mirror of
https://github.com/mihonapp/mihon.git
synced 2024-11-06 02:37:26 +01:00
Merge 8289585c6e
into 3cfc2be104
This commit is contained in:
commit
a49649eeca
35
.github/workflows/build_push.yml
vendored
35
.github/workflows/build_push.yml
vendored
@ -51,6 +51,9 @@ jobs:
|
|||||||
path: app/build/outputs/mapping/standardRelease
|
path: app/build/outputs/mapping/standardRelease
|
||||||
|
|
||||||
# Sign APK and create release for tags
|
# Sign APK and create release for tags
|
||||||
|
- name: Build FOSS flavor
|
||||||
|
if: startsWith(github.ref, 'refs/tags/') && github.repository == 'mihonapp/mihon'
|
||||||
|
run: ./gradlew assembleFossRelease
|
||||||
|
|
||||||
- name: Get tag name
|
- name: Get tag name
|
||||||
if: startsWith(github.ref, 'refs/tags/') && github.repository == 'mihonapp/mihon'
|
if: startsWith(github.ref, 'refs/tags/') && github.repository == 'mihonapp/mihon'
|
||||||
@ -58,7 +61,7 @@ jobs:
|
|||||||
set -x
|
set -x
|
||||||
echo "VERSION_TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
|
echo "VERSION_TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Sign APK
|
- name: Sign APK (standard)
|
||||||
if: startsWith(github.ref, 'refs/tags/') && github.repository == 'mihonapp/mihon'
|
if: startsWith(github.ref, 'refs/tags/') && github.repository == 'mihonapp/mihon'
|
||||||
uses: r0adkll/sign-android-release@349ebdef58775b1e0d8099458af0816dc79b6407 # v1
|
uses: r0adkll/sign-android-release@349ebdef58775b1e0d8099458af0816dc79b6407 # v1
|
||||||
with:
|
with:
|
||||||
@ -68,6 +71,16 @@ jobs:
|
|||||||
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
|
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
|
||||||
keyPassword: ${{ secrets.KEY_PASSWORD }}
|
keyPassword: ${{ secrets.KEY_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Sign APK (FOSS)
|
||||||
|
if: startsWith(github.ref, 'refs/tags/') && github.repository == 'mihonapp/mihon'
|
||||||
|
uses: r0adkll/sign-android-release@349ebdef58775b1e0d8099458af0816dc79b6407 # v1
|
||||||
|
with:
|
||||||
|
releaseDirectory: app/build/outputs/apk/foss/release
|
||||||
|
signingKeyBase64: ${{ secrets.SIGNING_KEY }}
|
||||||
|
alias: ${{ secrets.ALIAS }}
|
||||||
|
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
|
||||||
|
keyPassword: ${{ secrets.KEY_PASSWORD }}
|
||||||
|
|
||||||
- name: Clean up build artifacts
|
- name: Clean up build artifacts
|
||||||
if: startsWith(github.ref, 'refs/tags/') && github.repository == 'mihonapp/mihon'
|
if: startsWith(github.ref, 'refs/tags/') && github.repository == 'mihonapp/mihon'
|
||||||
run: |
|
run: |
|
||||||
@ -93,6 +106,10 @@ jobs:
|
|||||||
sha=`sha256sum mihon-x86_64-${{ env.VERSION_TAG }}.apk | awk '{ print $1 }'`
|
sha=`sha256sum mihon-x86_64-${{ env.VERSION_TAG }}.apk | awk '{ print $1 }'`
|
||||||
echo "APK_X86_64_SHA=$sha" >> $GITHUB_ENV
|
echo "APK_X86_64_SHA=$sha" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
mv app/build/outputs/apk/foss/release/app-foss-universal-release-unsigned-signed.apk mihon-foss-${{ env.VERSION_TAG }}.apk
|
||||||
|
sha=`sha256sum mihon-foss-${{ env.VERSION_TAG }}.apk | awk '{ print $1 }'`
|
||||||
|
echo "APK_FOSS_UNIVERSAL_SHA=$sha" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
if: startsWith(github.ref, 'refs/tags/') && github.repository == 'mihonapp/mihon'
|
if: startsWith(github.ref, 'refs/tags/') && github.repository == 'mihonapp/mihon'
|
||||||
uses: softprops/action-gh-release@e7a8f85e1c67a31e6ed99a94b41bd0b71bbee6b8 # v2.0.9
|
uses: softprops/action-gh-release@e7a8f85e1c67a31e6ed99a94b41bd0b71bbee6b8 # v2.0.9
|
||||||
@ -104,13 +121,14 @@ jobs:
|
|||||||
|
|
||||||
### Checksums
|
### Checksums
|
||||||
|
|
||||||
| Variant | SHA-256 |
|
| Flavor | Variant | SHA-256 |
|
||||||
| ------- | ------- |
|
| ------ | ------- | ------- |
|
||||||
| Universal | ${{ env.APK_UNIVERSAL_SHA }}
|
| Standard | Universal | ${{ env.APK_UNIVERSAL_SHA }}
|
||||||
| arm64-v8a | ${{ env.APK_ARM64_V8A_SHA }}
|
| Standard | arm64-v8a | ${{ env.APK_ARM64_V8A_SHA }}
|
||||||
| armeabi-v7a | ${{ env.APK_ARMEABI_V7A_SHA }}
|
| Standard | armeabi-v7a | ${{ env.APK_ARMEABI_V7A_SHA }}
|
||||||
| x86 | ${{ env.APK_X86_SHA }} |
|
| Standard | x86 | ${{ env.APK_X86_SHA }} |
|
||||||
| x86_64 | ${{ env.APK_X86_64_SHA }} |
|
| Standard | x86_64 | ${{ env.APK_X86_64_SHA }} |
|
||||||
|
| FOSS | Universal | ${{ env.APK_FOSS_UNIVERSAL_SHA }} |
|
||||||
|
|
||||||
## If you are unsure which version to choose then go with mihon-${{ env.VERSION_TAG }}.apk
|
## If you are unsure which version to choose then go with mihon-${{ env.VERSION_TAG }}.apk
|
||||||
files: |
|
files: |
|
||||||
@ -119,6 +137,7 @@ jobs:
|
|||||||
mihon-armeabi-v7a-${{ env.VERSION_TAG }}.apk
|
mihon-armeabi-v7a-${{ env.VERSION_TAG }}.apk
|
||||||
mihon-x86-${{ env.VERSION_TAG }}.apk
|
mihon-x86-${{ env.VERSION_TAG }}.apk
|
||||||
mihon-x86_64-${{ env.VERSION_TAG }}.apk
|
mihon-x86_64-${{ env.VERSION_TAG }}.apk
|
||||||
|
mihon-foss-${{ env.VERSION_TAG }}.apk
|
||||||
draft: true
|
draft: true
|
||||||
prerelease: false
|
prerelease: false
|
||||||
env:
|
env:
|
||||||
|
@ -99,6 +99,10 @@ android {
|
|||||||
buildConfigField("boolean", "INCLUDE_UPDATER", "true")
|
buildConfigField("boolean", "INCLUDE_UPDATER", "true")
|
||||||
dimension = "default"
|
dimension = "default"
|
||||||
}
|
}
|
||||||
|
create("foss") {
|
||||||
|
buildConfigField("boolean", "INCLUDE_UPDATER", "true")
|
||||||
|
dimension = "default"
|
||||||
|
}
|
||||||
create("dev") {
|
create("dev") {
|
||||||
// Include pseudolocales: https://developer.android.com/guide/topics/resources/pseudolocales
|
// Include pseudolocales: https://developer.android.com/guide/topics/resources/pseudolocales
|
||||||
resourceConfigurations.addAll(listOf("en", "en_XA", "ar_XB", "xxhdpi"))
|
resourceConfigurations.addAll(listOf("en", "en_XA", "ar_XB", "xxhdpi"))
|
||||||
@ -291,9 +295,12 @@ androidComponents {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
onVariants(selector().withFlavor("default" to "standard")) {
|
// Only excluding in standard and foss flavors because this breaks
|
||||||
// Only excluding in standard flavor because this breaks
|
|
||||||
// Layout Inspector's Compose tree
|
// Layout Inspector's Compose tree
|
||||||
|
onVariants(selector().withFlavor("default" to "standard")) {
|
||||||
|
it.packaging.resources.excludes.add("META-INF/*.version")
|
||||||
|
}
|
||||||
|
onVariants(selector().withFlavor("default" to "foss")) {
|
||||||
it.packaging.resources.excludes.add("META-INF/*.version")
|
it.packaging.resources.excludes.add("META-INF/*.version")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
11
app/src/foss/java/mihon/core/firebase/FirebaseConfig.kt
Normal file
11
app/src/foss/java/mihon/core/firebase/FirebaseConfig.kt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package mihon.core.firebase
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
|
||||||
|
object FirebaseConfig {
|
||||||
|
fun init(context: Context) = Unit
|
||||||
|
|
||||||
|
fun setAnalyticsEnabled(enabled: Boolean) = Unit
|
||||||
|
|
||||||
|
fun setCrashlyticsEnabled(enabled: Boolean) = Unit
|
||||||
|
}
|
@ -37,6 +37,7 @@ import androidx.lifecycle.LifecycleOwner
|
|||||||
import androidx.lifecycle.compose.LocalLifecycleOwner
|
import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||||
import eu.kanade.presentation.util.rememberRequestPackageInstallsPermissionState
|
import eu.kanade.presentation.util.rememberRequestPackageInstallsPermissionState
|
||||||
import eu.kanade.tachiyomi.core.security.PrivacyPreferences
|
import eu.kanade.tachiyomi.core.security.PrivacyPreferences
|
||||||
|
import eu.kanade.tachiyomi.util.system.isFossFlavor
|
||||||
import eu.kanade.tachiyomi.util.system.launchRequestPackageInstallsPermission
|
import eu.kanade.tachiyomi.util.system.launchRequestPackageInstallsPermission
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.stringResource
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
@ -117,6 +118,7 @@ internal class PermissionStep : OnboardingStep {
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (!isFossFlavor) {
|
||||||
HorizontalDivider(
|
HorizontalDivider(
|
||||||
modifier = Modifier.padding(vertical = 8.dp, horizontal = 16.dp),
|
modifier = Modifier.padding(vertical = 8.dp, horizontal = 16.dp),
|
||||||
color = MaterialTheme.colorScheme.onPrimaryContainer,
|
color = MaterialTheme.colorScheme.onPrimaryContainer,
|
||||||
@ -141,6 +143,7 @@ internal class PermissionStep : OnboardingStep {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun SectionHeader(
|
private fun SectionHeader(
|
||||||
|
@ -11,6 +11,7 @@ import eu.kanade.tachiyomi.core.security.PrivacyPreferences
|
|||||||
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
||||||
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate
|
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate
|
||||||
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported
|
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported
|
||||||
|
import eu.kanade.tachiyomi.util.system.isFossFlavor
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import kotlinx.collections.immutable.toImmutableMap
|
import kotlinx.collections.immutable.toImmutableMap
|
||||||
import tachiyomi.core.common.i18n.stringResource
|
import tachiyomi.core.common.i18n.stringResource
|
||||||
@ -31,9 +32,9 @@ object SettingsSecurityScreen : SearchableSettings {
|
|||||||
override fun getPreferences(): List<Preference> {
|
override fun getPreferences(): List<Preference> {
|
||||||
val securityPreferences = remember { Injekt.get<SecurityPreferences>() }
|
val securityPreferences = remember { Injekt.get<SecurityPreferences>() }
|
||||||
val privacyPreferences = remember { Injekt.get<PrivacyPreferences>() }
|
val privacyPreferences = remember { Injekt.get<PrivacyPreferences>() }
|
||||||
return listOf(
|
return listOfNotNull(
|
||||||
getSecurityGroup(securityPreferences),
|
getSecurityGroup(securityPreferences),
|
||||||
getFirebaseGroup(privacyPreferences),
|
if (!isFossFlavor) getFirebaseGroup(privacyPreferences) else null,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,6 +35,7 @@ import eu.kanade.tachiyomi.ui.more.NewUpdateScreen
|
|||||||
import eu.kanade.tachiyomi.util.CrashLogUtil
|
import eu.kanade.tachiyomi.util.CrashLogUtil
|
||||||
import eu.kanade.tachiyomi.util.lang.toDateTimestampString
|
import eu.kanade.tachiyomi.util.lang.toDateTimestampString
|
||||||
import eu.kanade.tachiyomi.util.system.copyToClipboard
|
import eu.kanade.tachiyomi.util.system.copyToClipboard
|
||||||
|
import eu.kanade.tachiyomi.util.system.isFossFlavor
|
||||||
import eu.kanade.tachiyomi.util.system.toast
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
@ -121,7 +122,7 @@ object AboutScreen : Screen() {
|
|||||||
versionName = result.release.version,
|
versionName = result.release.version,
|
||||||
changelogInfo = result.release.info,
|
changelogInfo = result.release.info,
|
||||||
releaseLink = result.release.releaseLink,
|
releaseLink = result.release.releaseLink,
|
||||||
downloadLink = result.release.getDownloadLink(),
|
downloadLink = result.release.getDownloadLink(isFossFlavor),
|
||||||
)
|
)
|
||||||
navigator.push(updateScreen)
|
navigator.push(updateScreen)
|
||||||
},
|
},
|
||||||
|
@ -44,6 +44,7 @@ import eu.kanade.tachiyomi.util.system.DeviceUtil
|
|||||||
import eu.kanade.tachiyomi.util.system.WebViewUtil
|
import eu.kanade.tachiyomi.util.system.WebViewUtil
|
||||||
import eu.kanade.tachiyomi.util.system.animatorDurationScale
|
import eu.kanade.tachiyomi.util.system.animatorDurationScale
|
||||||
import eu.kanade.tachiyomi.util.system.cancelNotification
|
import eu.kanade.tachiyomi.util.system.cancelNotification
|
||||||
|
import eu.kanade.tachiyomi.util.system.isFossFlavor
|
||||||
import eu.kanade.tachiyomi.util.system.notify
|
import eu.kanade.tachiyomi.util.system.notify
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
@ -132,6 +133,7 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor
|
|||||||
}
|
}
|
||||||
.launchIn(scope)
|
.launchIn(scope)
|
||||||
|
|
||||||
|
if (!isFossFlavor) {
|
||||||
privacyPreferences.analytics()
|
privacyPreferences.analytics()
|
||||||
.changes()
|
.changes()
|
||||||
.onEach(FirebaseConfig::setAnalyticsEnabled)
|
.onEach(FirebaseConfig::setAnalyticsEnabled)
|
||||||
@ -141,6 +143,7 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor
|
|||||||
.changes()
|
.changes()
|
||||||
.onEach(FirebaseConfig::setCrashlyticsEnabled)
|
.onEach(FirebaseConfig::setCrashlyticsEnabled)
|
||||||
.launchIn(scope)
|
.launchIn(scope)
|
||||||
|
}
|
||||||
|
|
||||||
setAppCompatDelegateThemeMode(Injekt.get<UiPreferences>().themeMode().get())
|
setAppCompatDelegateThemeMode(Injekt.get<UiPreferences>().themeMode().get())
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ import eu.kanade.tachiyomi.R
|
|||||||
import eu.kanade.tachiyomi.data.notification.NotificationHandler
|
import eu.kanade.tachiyomi.data.notification.NotificationHandler
|
||||||
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
||||||
import eu.kanade.tachiyomi.data.notification.Notifications
|
import eu.kanade.tachiyomi.data.notification.Notifications
|
||||||
|
import eu.kanade.tachiyomi.util.system.isFossFlavor
|
||||||
import eu.kanade.tachiyomi.util.system.notificationBuilder
|
import eu.kanade.tachiyomi.util.system.notificationBuilder
|
||||||
import eu.kanade.tachiyomi.util.system.notify
|
import eu.kanade.tachiyomi.util.system.notify
|
||||||
import tachiyomi.core.common.i18n.stringResource
|
import tachiyomi.core.common.i18n.stringResource
|
||||||
@ -38,7 +39,7 @@ internal class AppUpdateNotifier(private val context: Context) {
|
|||||||
fun promptUpdate(release: Release) {
|
fun promptUpdate(release: Release) {
|
||||||
val updateIntent = NotificationReceiver.downloadAppUpdatePendingBroadcast(
|
val updateIntent = NotificationReceiver.downloadAppUpdatePendingBroadcast(
|
||||||
context,
|
context,
|
||||||
release.getDownloadLink(),
|
release.getDownloadLink(isFossFlavor),
|
||||||
release.version,
|
release.version,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -78,6 +78,7 @@ import eu.kanade.tachiyomi.ui.manga.MangaScreen
|
|||||||
import eu.kanade.tachiyomi.ui.more.NewUpdateScreen
|
import eu.kanade.tachiyomi.ui.more.NewUpdateScreen
|
||||||
import eu.kanade.tachiyomi.ui.more.OnboardingScreen
|
import eu.kanade.tachiyomi.ui.more.OnboardingScreen
|
||||||
import eu.kanade.tachiyomi.util.system.dpToPx
|
import eu.kanade.tachiyomi.util.system.dpToPx
|
||||||
|
import eu.kanade.tachiyomi.util.system.isFossFlavor
|
||||||
import eu.kanade.tachiyomi.util.system.isNavigationBarNeedsScrim
|
import eu.kanade.tachiyomi.util.system.isNavigationBarNeedsScrim
|
||||||
import eu.kanade.tachiyomi.util.system.openInBrowser
|
import eu.kanade.tachiyomi.util.system.openInBrowser
|
||||||
import eu.kanade.tachiyomi.util.view.setComposeContent
|
import eu.kanade.tachiyomi.util.view.setComposeContent
|
||||||
@ -303,7 +304,7 @@ class MainActivity : BaseActivity() {
|
|||||||
versionName = result.release.version,
|
versionName = result.release.version,
|
||||||
changelogInfo = result.release.info,
|
changelogInfo = result.release.info,
|
||||||
releaseLink = result.release.releaseLink,
|
releaseLink = result.release.releaseLink,
|
||||||
downloadLink = result.release.getDownloadLink(),
|
downloadLink = result.release.getDownloadLink(isFossFlavor),
|
||||||
)
|
)
|
||||||
navigator.push(updateScreen)
|
navigator.push(updateScreen)
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,9 @@ import eu.kanade.tachiyomi.BuildConfig
|
|||||||
val isDevFlavor: Boolean
|
val isDevFlavor: Boolean
|
||||||
get() = BuildConfig.FLAVOR == "dev"
|
get() = BuildConfig.FLAVOR == "dev"
|
||||||
|
|
||||||
|
val isFossFlavor: Boolean
|
||||||
|
get() = BuildConfig.FLAVOR == "foss"
|
||||||
|
|
||||||
val isPreviewBuildType: Boolean
|
val isPreviewBuildType: Boolean
|
||||||
get() = BuildConfig.BUILD_TYPE == "preview"
|
get() = BuildConfig.BUILD_TYPE == "preview"
|
||||||
|
|
||||||
|
@ -16,7 +16,13 @@ data class Release(
|
|||||||
* Get download link of latest release from the assets.
|
* Get download link of latest release from the assets.
|
||||||
* @return download link of latest release.
|
* @return download link of latest release.
|
||||||
*/
|
*/
|
||||||
fun getDownloadLink(): String {
|
fun getDownloadLink(isFossFlavor: Boolean): String {
|
||||||
|
val fossFlavor = if (isFossFlavor) {
|
||||||
|
"-foss"
|
||||||
|
} else {
|
||||||
|
""
|
||||||
|
}
|
||||||
|
|
||||||
val apkVariant = when (Build.SUPPORTED_ABIS[0]) {
|
val apkVariant = when (Build.SUPPORTED_ABIS[0]) {
|
||||||
"arm64-v8a" -> "-arm64-v8a"
|
"arm64-v8a" -> "-arm64-v8a"
|
||||||
"armeabi-v7a" -> "-armeabi-v7a"
|
"armeabi-v7a" -> "-armeabi-v7a"
|
||||||
@ -25,7 +31,7 @@ data class Release(
|
|||||||
else -> ""
|
else -> ""
|
||||||
}
|
}
|
||||||
|
|
||||||
return assets.find { it.contains("mihon$apkVariant-") } ?: assets[0]
|
return assets.find { it.contains("mihon$fossFlavor$apkVariant-") } ?: assets[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user