diff --git a/.github/workflows/build_develop.yml b/.github/workflows/build_develop.yml index fab9a9ddd..2cc213437 100644 --- a/.github/workflows/build_develop.yml +++ b/.github/workflows/build_develop.yml @@ -68,13 +68,6 @@ jobs: changelog="$changelog" echo "CHANGELOG=$changelog" >> $GITHUB_ENV - - name: Write Version.kt - uses: DamianReeves/write-file-action@v1.3 - with: - path: app/src/main/java/exh/Version.kt - contents: 'package exh const val syDebugVersion: String = "${{ github.run_number }}"' - write-mode: overwrite - - name: Write changelog_debug.xml uses: DamianReeves/write-file-action@v1.3 with: diff --git a/.github/workflows/build_preview.yml b/.github/workflows/build_preview.yml index ce1c9034b..9939ca967 100644 --- a/.github/workflows/build_preview.yml +++ b/.github/workflows/build_preview.yml @@ -71,20 +71,6 @@ jobs: changelog="$changelog" echo "CHANGELOG=$changelog" >> $GITHUB_ENV - - name: Write Version.kt - uses: DamianReeves/write-file-action@v1.3 - with: - path: app/src/main/java/exh/Version.kt - contents: 'package exh const val syDebugVersion: String = "${{ github.run_number }}"' - write-mode: overwrite - - # - name: Write changelog_debug.xml - # uses: DamianReeves/write-file-action@v1.3 - # with: - # path: app/src/main/res/raw/changelog_debug.xml - # contents: "${{ env.CHANGELOG }}" - # write-mode: overwrite - - name: Write google-services.json uses: DamianReeves/write-file-action@v1.3 with: diff --git a/app/build.gradle.kts b/app/build.gradle.kts index bf144b8ae..7f7bae67b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -36,6 +36,7 @@ android { buildConfigField("String", "COMMIT_SHA", "\"${getGitSha()}\"") buildConfigField("String", "BUILD_TIME", "\"${getBuildTime()}\"") buildConfigField("boolean", "INCLUDE_UPDATER", "false") + buildConfigField("boolean", "PREVIEW", "false") ndk { abiFilters += SUPPORTED_ABIS @@ -66,10 +67,20 @@ android { matchingFallbacks.add("release") } named("release") { - isMinifyEnabled = true isShrinkResources = true + isMinifyEnabled = true setProguardFiles(listOf(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")) } + create("preview") { + initWith(getByName("release")) + buildConfigField("boolean", "PREVIEW", "true") + + matchingFallbacks.add("release") + versionNameSuffix = "-${getCommitCount()}" + applicationIdSuffix = ".beta" + signingConfig = signingConfigs.getByName("debug") + // signingConfig = signingConfigs.getByName("debug") + } create("benchmark") { initWith(getByName("release")) @@ -77,12 +88,13 @@ android { matchingFallbacks.add("release") isDebuggable = false isProfileable = true - versionNameSuffix = "-benchmark" + versionNameSuffix = "-${getCommitCount()}-benchmark" applicationIdSuffix = ".benchmark" } } sourceSets { + getByName("preview").res.srcDirs("src/beta/res") getByName("benchmark").res.srcDirs("src/debug/res") } diff --git a/app/src/beta/res/drawable-hdpi/ic_launcher_adaptive_fore.png b/app/src/beta/res/drawable-hdpi/ic_launcher_adaptive_fore.png new file mode 100755 index 000000000..252b0ccde Binary files /dev/null and b/app/src/beta/res/drawable-hdpi/ic_launcher_adaptive_fore.png differ diff --git a/app/src/beta/res/drawable-hdpi/splash_icon.png b/app/src/beta/res/drawable-hdpi/splash_icon.png new file mode 100644 index 000000000..f06a1d734 Binary files /dev/null and b/app/src/beta/res/drawable-hdpi/splash_icon.png differ diff --git a/app/src/beta/res/drawable-mdpi/ic_launcher_adaptive_fore.png b/app/src/beta/res/drawable-mdpi/ic_launcher_adaptive_fore.png new file mode 100755 index 000000000..889e05cbe Binary files /dev/null and b/app/src/beta/res/drawable-mdpi/ic_launcher_adaptive_fore.png differ diff --git a/app/src/beta/res/drawable-mdpi/splash_icon.png b/app/src/beta/res/drawable-mdpi/splash_icon.png new file mode 100644 index 000000000..f33370864 Binary files /dev/null and b/app/src/beta/res/drawable-mdpi/splash_icon.png differ diff --git a/app/src/beta/res/drawable-xhdpi/ic_launcher_adaptive_fore.png b/app/src/beta/res/drawable-xhdpi/ic_launcher_adaptive_fore.png new file mode 100755 index 000000000..582fd4aac Binary files /dev/null and b/app/src/beta/res/drawable-xhdpi/ic_launcher_adaptive_fore.png differ diff --git a/app/src/beta/res/drawable-xhdpi/splash_icon.png b/app/src/beta/res/drawable-xhdpi/splash_icon.png new file mode 100644 index 000000000..89d9cc1ed Binary files /dev/null and b/app/src/beta/res/drawable-xhdpi/splash_icon.png differ diff --git a/app/src/beta/res/drawable-xxhdpi/ic_launcher_adaptive_fore.png b/app/src/beta/res/drawable-xxhdpi/ic_launcher_adaptive_fore.png new file mode 100755 index 000000000..633754398 Binary files /dev/null and b/app/src/beta/res/drawable-xxhdpi/ic_launcher_adaptive_fore.png differ diff --git a/app/src/beta/res/drawable-xxhdpi/splash_icon.png b/app/src/beta/res/drawable-xxhdpi/splash_icon.png new file mode 100644 index 000000000..710a81b92 Binary files /dev/null and b/app/src/beta/res/drawable-xxhdpi/splash_icon.png differ diff --git a/app/src/beta/res/drawable-xxxhdpi/ic_launcher_adaptive_fore.png b/app/src/beta/res/drawable-xxxhdpi/ic_launcher_adaptive_fore.png new file mode 100755 index 000000000..2056b911d Binary files /dev/null and b/app/src/beta/res/drawable-xxxhdpi/ic_launcher_adaptive_fore.png differ diff --git a/app/src/beta/res/drawable-xxxhdpi/splash_icon.png b/app/src/beta/res/drawable-xxxhdpi/splash_icon.png new file mode 100644 index 000000000..3d96a9b3d Binary files /dev/null and b/app/src/beta/res/drawable-xxxhdpi/splash_icon.png differ diff --git a/app/src/beta/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/beta/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 000000000..1413a3145 --- /dev/null +++ b/app/src/beta/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/beta/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/beta/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 000000000..1413a3145 --- /dev/null +++ b/app/src/beta/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/beta/res/mipmap-hdpi/ic_launcher.png b/app/src/beta/res/mipmap-hdpi/ic_launcher.png new file mode 100755 index 000000000..d9e08616d Binary files /dev/null and b/app/src/beta/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/beta/res/mipmap-hdpi/ic_launcher_round.png b/app/src/beta/res/mipmap-hdpi/ic_launcher_round.png new file mode 100755 index 000000000..89ee0d1bb Binary files /dev/null and b/app/src/beta/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/app/src/beta/res/mipmap-mdpi/ic_launcher.png b/app/src/beta/res/mipmap-mdpi/ic_launcher.png new file mode 100755 index 000000000..fba365a68 Binary files /dev/null and b/app/src/beta/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/beta/res/mipmap-mdpi/ic_launcher_round.png b/app/src/beta/res/mipmap-mdpi/ic_launcher_round.png new file mode 100755 index 000000000..bf03b3fab Binary files /dev/null and b/app/src/beta/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/app/src/beta/res/mipmap-xhdpi/ic_launcher.png b/app/src/beta/res/mipmap-xhdpi/ic_launcher.png new file mode 100755 index 000000000..b7c67c942 Binary files /dev/null and b/app/src/beta/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/beta/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/beta/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100755 index 000000000..c13971670 Binary files /dev/null and b/app/src/beta/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/app/src/beta/res/mipmap-xxhdpi/ic_launcher.png b/app/src/beta/res/mipmap-xxhdpi/ic_launcher.png new file mode 100755 index 000000000..4b6c97166 Binary files /dev/null and b/app/src/beta/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/beta/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/beta/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100755 index 000000000..3d1083145 Binary files /dev/null and b/app/src/beta/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/app/src/beta/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/beta/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100755 index 000000000..da1bc12cd Binary files /dev/null and b/app/src/beta/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/beta/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/beta/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100755 index 000000000..6a699a165 Binary files /dev/null and b/app/src/beta/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/app/src/debug/res/drawable-hdpi/ic_launcher_adaptive_fore.png b/app/src/debug/res/drawable-hdpi/ic_launcher_adaptive_fore.png new file mode 100755 index 000000000..c718b2bbf Binary files /dev/null and b/app/src/debug/res/drawable-hdpi/ic_launcher_adaptive_fore.png differ diff --git a/app/src/debug/res/drawable-hdpi/splash_icon.png b/app/src/debug/res/drawable-hdpi/splash_icon.png new file mode 100644 index 000000000..b7c6fa4f3 Binary files /dev/null and b/app/src/debug/res/drawable-hdpi/splash_icon.png differ diff --git a/app/src/debug/res/drawable-mdpi/ic_launcher_adaptive_fore.png b/app/src/debug/res/drawable-mdpi/ic_launcher_adaptive_fore.png new file mode 100755 index 000000000..30174a0cc Binary files /dev/null and b/app/src/debug/res/drawable-mdpi/ic_launcher_adaptive_fore.png differ diff --git a/app/src/debug/res/drawable-mdpi/splash_icon.png b/app/src/debug/res/drawable-mdpi/splash_icon.png new file mode 100644 index 000000000..b9c43aad0 Binary files /dev/null and b/app/src/debug/res/drawable-mdpi/splash_icon.png differ diff --git a/app/src/debug/res/drawable-xhdpi/ic_launcher_adaptive_fore.png b/app/src/debug/res/drawable-xhdpi/ic_launcher_adaptive_fore.png new file mode 100755 index 000000000..b9d54806d Binary files /dev/null and b/app/src/debug/res/drawable-xhdpi/ic_launcher_adaptive_fore.png differ diff --git a/app/src/debug/res/drawable-xhdpi/splash_icon.png b/app/src/debug/res/drawable-xhdpi/splash_icon.png new file mode 100644 index 000000000..dcbd604b3 Binary files /dev/null and b/app/src/debug/res/drawable-xhdpi/splash_icon.png differ diff --git a/app/src/debug/res/drawable-xxhdpi/ic_launcher_adaptive_fore.png b/app/src/debug/res/drawable-xxhdpi/ic_launcher_adaptive_fore.png new file mode 100755 index 000000000..0a94f64cb Binary files /dev/null and b/app/src/debug/res/drawable-xxhdpi/ic_launcher_adaptive_fore.png differ diff --git a/app/src/debug/res/drawable-xxhdpi/splash_icon.png b/app/src/debug/res/drawable-xxhdpi/splash_icon.png new file mode 100644 index 000000000..ffa5c6128 Binary files /dev/null and b/app/src/debug/res/drawable-xxhdpi/splash_icon.png differ diff --git a/app/src/debug/res/drawable-xxxhdpi/ic_launcher_adaptive_fore.png b/app/src/debug/res/drawable-xxxhdpi/ic_launcher_adaptive_fore.png new file mode 100755 index 000000000..1da3c78f9 Binary files /dev/null and b/app/src/debug/res/drawable-xxxhdpi/ic_launcher_adaptive_fore.png differ diff --git a/app/src/debug/res/drawable-xxxhdpi/splash_icon.png b/app/src/debug/res/drawable-xxxhdpi/splash_icon.png new file mode 100644 index 000000000..e4f41c827 Binary files /dev/null and b/app/src/debug/res/drawable-xxxhdpi/splash_icon.png differ diff --git a/app/src/debug/res/mipmap-hdpi/ic_launcher.png b/app/src/debug/res/mipmap-hdpi/ic_launcher.png old mode 100644 new mode 100755 index b64b5bfe4..acae85c53 Binary files a/app/src/debug/res/mipmap-hdpi/ic_launcher.png and b/app/src/debug/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png b/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png old mode 100644 new mode 100755 index 8fca34bd7..3ae4ea138 Binary files a/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png and b/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/app/src/debug/res/mipmap-mdpi/ic_launcher.png b/app/src/debug/res/mipmap-mdpi/ic_launcher.png old mode 100644 new mode 100755 index 894df70a0..257de79cc Binary files a/app/src/debug/res/mipmap-mdpi/ic_launcher.png and b/app/src/debug/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/debug/res/mipmap-mdpi/ic_launcher_round.png b/app/src/debug/res/mipmap-mdpi/ic_launcher_round.png old mode 100644 new mode 100755 index 3b3bd3046..8f70067f3 Binary files a/app/src/debug/res/mipmap-mdpi/ic_launcher_round.png and b/app/src/debug/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/app/src/debug/res/mipmap-xhdpi/ic_launcher.png b/app/src/debug/res/mipmap-xhdpi/ic_launcher.png old mode 100644 new mode 100755 index 24b8229cc..f3f4d717d Binary files a/app/src/debug/res/mipmap-xhdpi/ic_launcher.png and b/app/src/debug/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png old mode 100644 new mode 100755 index c85b53033..7964600b6 Binary files a/app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png and b/app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png b/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png old mode 100644 new mode 100755 index a93104c8e..4687edcb7 Binary files a/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png old mode 100644 new mode 100755 index 817c61ad7..d6415cc90 Binary files a/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png and b/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png old mode 100644 new mode 100755 index baf144b9b..cfddec528 Binary files a/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png old mode 100644 new mode 100755 index b7ca7afd7..ab0db23be Binary files a/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png and b/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/ic_launcher-beta.png b/app/src/main/ic_launcher-beta.png new file mode 100644 index 000000000..a488cd842 Binary files /dev/null and b/app/src/main/ic_launcher-beta.png differ diff --git a/app/src/main/ic_launcher-debug.png b/app/src/main/ic_launcher-debug.png new file mode 100644 index 000000000..af2a577b3 Binary files /dev/null and b/app/src/main/ic_launcher-debug.png differ diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt index b3e2b570e..254ede63d 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt @@ -7,8 +7,6 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.Public import androidx.compose.material3.CircularProgressIndicator import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -34,9 +32,7 @@ import eu.kanade.tachiyomi.ui.more.NewUpdateScreen import eu.kanade.tachiyomi.util.CrashLogUtil import eu.kanade.tachiyomi.util.lang.toDateTimestampString import eu.kanade.tachiyomi.util.system.copyToClipboard -import eu.kanade.tachiyomi.util.system.isPreviewBuildType import eu.kanade.tachiyomi.util.system.toast -import exh.syDebugVersion import kotlinx.coroutines.launch import logcat.LogPriority import tachiyomi.core.common.util.lang.withIOContext @@ -49,17 +45,14 @@ import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.icons.CustomIcons -import tachiyomi.presentation.core.icons.Discord -import tachiyomi.presentation.core.icons.Facebook import tachiyomi.presentation.core.icons.Github -import tachiyomi.presentation.core.icons.Reddit -import tachiyomi.presentation.core.icons.X import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.Instant import java.time.LocalDateTime import java.time.ZoneId +@Suppress("JavaIoSerializableObjectMustHaveReadResolve") object AboutScreen : Screen() { @Composable @@ -180,37 +173,35 @@ object AboutScreen : Screen() { .padding(vertical = 8.dp), horizontalArrangement = Arrangement.Center, ) { - LinkIcon( - label = stringResource(MR.strings.website), - icon = Icons.Outlined.Public, - url = "https://mihon.app", - ) - LinkIcon( - label = "Discord", - icon = CustomIcons.Discord, - url = "https://discord.gg/mihon", - ) - LinkIcon( - label = "X", - icon = CustomIcons.X, - url = "https://x.com/mihonapp", - ) - LinkIcon( - label = "Facebook", - icon = CustomIcons.Facebook, - url = "https://facebook.com/mihonapp", - ) - LinkIcon( - label = "Reddit", - icon = CustomIcons.Reddit, - url = "https://www.reddit.com/r/mihonapp", - ) + // LinkIcon( + // label = stringResource(MR.strings.website), + // icon = Icons.Outlined.Public, + // url = "https://mihon.app", + // ) + // LinkIcon( + // label = "Discord", + // icon = CustomIcons.Discord, + // url = "https://discord.gg/mihon", + // ) + // LinkIcon( + // label = "X", + // icon = CustomIcons.X, + // url = "https://x.com/mihonapp", + // ) + // LinkIcon( + // label = "Facebook", + // icon = CustomIcons.Facebook, + // url = "https://facebook.com/mihonapp", + // ) + // LinkIcon( + // label = "Reddit", + // icon = CustomIcons.Reddit, + // url = "https://www.reddit.com/r/mihonapp", + // ) LinkIcon( label = "GitHub", icon = CustomIcons.Github, - // SY --> - url = "https://github.com/komikku-app/komikku", - // SY <-- + url = "https://github.com/komikku-app", ) } } @@ -267,9 +258,8 @@ object AboutScreen : Screen() { } } } - // SY --> - isPreviewBuildType -> { - "Preview r$syDebugVersion".let { + BuildConfig.PREVIEW -> { + "Beta r${BuildConfig.COMMIT_COUNT}".let { if (withBuildDate) { "$it (${BuildConfig.COMMIT_SHA}, ${getFormattedBuildTime()})" } else { @@ -277,7 +267,6 @@ object AboutScreen : Screen() { } } } - // SY <-- else -> { "Stable ${BuildConfig.VERSION_NAME}".let { if (withBuildDate) { diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/WhatsNewDialog.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/WhatsNewDialog.kt index 1fc285cfc..8e03e99c6 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/WhatsNewDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/WhatsNewDialog.kt @@ -22,8 +22,11 @@ import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp +import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.data.updater.RELEASE_URL import eu.kanade.tachiyomi.util.system.isPreviewBuildType +import eu.kanade.tachiyomi.util.system.openInBrowser import kotlinx.serialization.Serializable import nl.adaptivity.xmlutil.AndroidXmlReader import nl.adaptivity.xmlutil.serialization.XML @@ -37,19 +40,22 @@ import tachiyomi.presentation.core.i18n.stringResource @Composable fun WhatsNewDialog(onDismissRequest: () -> Unit) { + val context = LocalContext.current AlertDialog( onDismissRequest = onDismissRequest, confirmButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_ok)) } }, - title = { - Text(text = stringResource(MR.strings.whats_new)) + title = { Text(text = stringResource(MR.strings.updated_version, BuildConfig.VERSION_NAME)) }, + dismissButton = { + TextButton(onClick = { context.openInBrowser(RELEASE_URL) }) { + Text(text = stringResource(SYMR.strings.changelogs)) + } }, text = { Column { - val context = LocalContext.current val changelog by produceState?>(initialValue = null) { value = withIOContext { XML.decodeFromReader( diff --git a/app/src/main/java/eu/kanade/tachiyomi/App.kt b/app/src/main/java/eu/kanade/tachiyomi/App.kt index 2f41b9f61..21830d453 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/App.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/App.kt @@ -58,6 +58,7 @@ import eu.kanade.tachiyomi.util.system.WebViewUtil import eu.kanade.tachiyomi.util.system.animatorDurationScale import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.isDevFlavor +import eu.kanade.tachiyomi.util.system.isPreviewBuildType import eu.kanade.tachiyomi.util.system.isReleaseBuildType import eu.kanade.tachiyomi.util.system.notify import exh.log.CrashlyticsPrinter @@ -65,7 +66,6 @@ import exh.log.EHLogLevel import exh.log.EnhancedFilePrinter import exh.log.XLogLogcatLogger import exh.log.xLogD -import exh.syDebugVersion import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -102,7 +102,7 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor // SY --> if (!isDevFlavor) { - Firebase.crashlytics.setCrashlyticsCollectionEnabled(isReleaseBuildType) + Firebase.crashlytics.setCrashlyticsCollectionEnabled(isReleaseBuildType || isPreviewBuildType) } // SY <-- GlobalExceptionHandler.initialize(applicationContext, CrashActivity::class.java) @@ -329,7 +329,7 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor xLogD( """ App version: ${BuildConfig.VERSION_NAME} (${BuildConfig.FLAVOR}, ${BuildConfig.COMMIT_SHA}, ${BuildConfig.VERSION_CODE}) - Preview build: $syDebugVersion + Build version: ${BuildConfig.COMMIT_COUNT} Android version: ${Build.VERSION.RELEASE} (SDK ${Build.VERSION.SDK_INT}) Android build ID: ${Build.DISPLAY} Device brand: ${Build.BRAND} diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt index 0db879f9f..8b4522f67 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt @@ -3,8 +3,6 @@ package eu.kanade.tachiyomi.data.updater import android.content.Context import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.util.system.isInstalledFromFDroid -import eu.kanade.tachiyomi.util.system.isPreviewBuildType -import exh.syDebugVersion import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.domain.release.interactor.GetApplicationRelease import uy.kohesive.injekt.injectLazy @@ -22,17 +20,12 @@ class AppUpdateChecker { return withIOContext { val result = getApplicationRelease.await( GetApplicationRelease.Arguments( - // SY --> - isPreviewBuildType, - // SY <-- - context.isInstalledFromFDroid(), - BuildConfig.COMMIT_COUNT.toInt(), - BuildConfig.VERSION_NAME, - GITHUB_REPO, - // SY --> - syDebugVersion, - // SY <-- - forceCheck, + isPreview = BuildConfig.PREVIEW, + isThirdParty = context.isInstalledFromFDroid(), + commitCount = BuildConfig.COMMIT_COUNT.toInt(), + versionName = BuildConfig.VERSION_NAME, + repository = GITHUB_REPO, + forceCheck = forceCheck, ), ) @@ -50,11 +43,19 @@ class AppUpdateChecker { } val GITHUB_REPO: String by lazy { - // SY --> - if (isPreviewBuildType) { - "komikku-app/komikku" + if (BuildConfig.PREVIEW) { + "komikku-app/komikku-preview" } else { "komikku-app/komikku" } - // SY <-- } + +val RELEASE_TAG: String by lazy { + if (BuildConfig.PREVIEW) { + "r${BuildConfig.COMMIT_COUNT}" + } else { + "v${BuildConfig.VERSION_NAME}" + } +} + +val RELEASE_URL = "https://github.com/$GITHUB_REPO/releases/tag/$RELEASE_TAG" diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index 49606eeba..ca47e2f79 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -75,8 +75,10 @@ import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.ui.more.NewUpdateScreen import eu.kanade.tachiyomi.ui.more.OnboardingScreen import eu.kanade.tachiyomi.util.system.dpToPx +import eu.kanade.tachiyomi.util.system.isDevFlavor import eu.kanade.tachiyomi.util.system.isNavigationBarNeedsScrim import eu.kanade.tachiyomi.util.system.isPreviewBuildType +import eu.kanade.tachiyomi.util.system.isReleaseBuildType import eu.kanade.tachiyomi.util.view.setComposeContent import exh.debug.DebugToggles import exh.eh.EHentaiUpdateWorker @@ -84,7 +86,6 @@ import exh.log.DebugModeOverlay import exh.source.BlacklistedSources import exh.source.EH_SOURCE_ID import exh.source.EXH_SOURCE_ID -import exh.syDebugVersion import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.collectLatest @@ -520,8 +521,8 @@ class MainActivity : BaseActivity() { // SY --> private fun addAnalytics() { - if (!BuildConfig.DEBUG && isPreviewBuildType) { - Firebase.analytics.setUserProperty("preview_version", syDebugVersion) + if (!isDevFlavor && (isReleaseBuildType || isPreviewBuildType)) { + Firebase.analytics.setUserProperty("preview_version", BuildConfig.COMMIT_COUNT) } } // SY <-- diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt b/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt index a8a5018c6..8c3748647 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt @@ -9,7 +9,6 @@ import eu.kanade.tachiyomi.util.system.WebViewUtil import eu.kanade.tachiyomi.util.system.createFileInCacheDir import eu.kanade.tachiyomi.util.system.toShareIntent import eu.kanade.tachiyomi.util.system.toast -import exh.syDebugVersion import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.core.common.util.lang.withUIContext import uy.kohesive.injekt.Injekt @@ -39,7 +38,7 @@ class CrashLogUtil( fun getDebugInfo(): String { return """ App version: ${BuildConfig.VERSION_NAME} (${BuildConfig.FLAVOR}, ${BuildConfig.COMMIT_SHA}, ${BuildConfig.VERSION_CODE}, ${BuildConfig.BUILD_TIME}) - Preview build: $syDebugVersion + Build version: ${BuildConfig.COMMIT_COUNT} Android version: ${Build.VERSION.RELEASE} (SDK ${Build.VERSION.SDK_INT}; build ${Build.DISPLAY}) Device brand: ${Build.BRAND} Device manufacturer: ${Build.MANUFACTURER} diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/BuildConfig.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/BuildConfig.kt index 072a87c17..933f44d90 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/BuildConfig.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/BuildConfig.kt @@ -1,13 +1,12 @@ package eu.kanade.tachiyomi.util.system import eu.kanade.tachiyomi.BuildConfig -import exh.syDebugVersion val isDevFlavor: Boolean get() = BuildConfig.FLAVOR == "dev" val isPreviewBuildType: Boolean - get() = BuildConfig.BUILD_TYPE == "release" /* SY --> */ && syDebugVersion != "0" /* SY <-- */ + get() = BuildConfig.BUILD_TYPE == "preview" val isReleaseBuildType: Boolean - get() = BuildConfig.BUILD_TYPE == "release" /* SY --> */ && syDebugVersion == "0" /* SY <-- */ + get() = BuildConfig.BUILD_TYPE == "release" diff --git a/app/src/main/java/exh/Version.kt b/app/src/main/java/exh/Version.kt deleted file mode 100644 index c4f6f03cb..000000000 --- a/app/src/main/java/exh/Version.kt +++ /dev/null @@ -1 +0,0 @@ -package exh const val syDebugVersion: String = "0" diff --git a/app/src/main/res/raw/changelog_debug.xml b/app/src/main/res/raw/changelog_debug.xml index ccfc3b134..4be735e91 100644 --- a/app/src/main/res/raw/changelog_debug.xml +++ b/app/src/main/res/raw/changelog_debug.xml @@ -1,46 +1,339 @@ - - - diff --git a/app/src/main/res/raw/changelog_release.xml b/app/src/main/res/raw/changelog_release.xml index dcd26c688..26b28c8a4 100644 --- a/app/src/main/res/raw/changelog_release.xml +++ b/app/src/main/res/raw/changelog_release.xml @@ -1,6 +1,22 @@ - + + [b]All features from Komikku pre-release version[/b] + Show related mangas for all sources + Bulk selection multiple entries to favorite/category + Search for source in Browse screen + Quick NSFW sources filter in both Extensions/Browse screen + Feeds screen support all sources + More Feed's entries + Click manga's source name will jump to source browsing + Show extensions/sources NSFW & languages tag + Jump to extensions' settings from Source screen + Built-in official extensions repo + Migrate to Komikku's own Tracking clients + Configurable interval to refresh entries from downloaded storage + Updater switched to method similar to Mihon's + Revert back support to show extensions' changelog & readme + [b]Based on TachiyomiSY stable 1.10.5(Mar 2,2024)[/b] [b]Based on Mihon stable 0.16.4(from 0.16.3)[/b] Minor fix for mark duplicate chapters as read Include the delayed tracker update fix diff --git a/domain/src/main/java/tachiyomi/domain/release/interactor/GetApplicationRelease.kt b/domain/src/main/java/tachiyomi/domain/release/interactor/GetApplicationRelease.kt index de29f06b6..9f399052e 100644 --- a/domain/src/main/java/tachiyomi/domain/release/interactor/GetApplicationRelease.kt +++ b/domain/src/main/java/tachiyomi/domain/release/interactor/GetApplicationRelease.kt @@ -32,10 +32,12 @@ class GetApplicationRelease( lastChecked.set(now.toEpochMilli()) // Check if latest version is different from current version - // SY --> - val isNewVersion = - isNewVersion(arguments.isPreview, arguments.syDebugVersion, arguments.versionName, release.version) - // SY <-- + val isNewVersion = isNewVersion( + isPreview = arguments.isPreview, + commitCount = arguments.commitCount, + versionName = arguments.versionName, + versionTag = release.version, + ) return when { isNewVersion && arguments.isThirdParty -> Result.ThirdPartyInstallation isNewVersion -> Result.NewUpdate(release) @@ -43,28 +45,45 @@ class GetApplicationRelease( } } - // SY --> + /** + * [isPreview] is if current version is Preview (beta) build + * + * [versionTag] is the version of new release + * + * Release (stable) version will compare with current's [versionName] ("v0.1.2") + * + * Preview (beta) version will compare with current's [commitCount] ("r1234") + */ private fun isNewVersion( isPreview: Boolean, - syDebugVersion: String, + commitCount: Int, versionName: String, versionTag: String, ): Boolean { // Removes prefixes like "r" or "v" val newVersion = versionTag.replace("[^\\d.]".toRegex(), "") return if (isPreview) { - // Preview builds: based on releases in "jobobby04/TachiyomiSYPreview" repo - // tagged as something like "508" - val currentInt = syDebugVersion.toIntOrNull() - currentInt != null && newVersion.toInt() > currentInt + // Preview builds: based on releases in "komikku-app/komikku-preview" repo + // tagged as something like "r1234" + // KMK --> + // When has stable update but current app is preview version (same repo) expect new update + // TODO: remove this when all users has finished switching from preview to stable + if (newVersion.matches("""\d.\d.\d""".toRegex())) return true + // KMK <-- + newVersion.toInt() > commitCount } else { // Release builds: based on releases in "komikku-app/komikku" repo - // tagged as something like "0.1.2" + // tagged as something like "v0.1.2" val oldVersion = versionName.replace("[^\\d.]".toRegex(), "") val newSemVer = newVersion.split(".").map { it.toInt() } val oldSemVer = oldVersion.split(".").map { it.toInt() } + // KMK --> + // When has stable update with preview version but current app is stable version expect no update + // TODO: remove this when all users has finished switching from preview to stable + if (newSemVer.size != oldSemVer.size) return false + // KMK <-- oldSemVer.mapIndexed { index, i -> if (newSemVer[index] > i) { return true @@ -74,17 +93,19 @@ class GetApplicationRelease( false } } - // SY <-- data class Arguments( + /** If current version is Preview (beta) build */ val isPreview: Boolean, + /** If current version is from third party */ val isThirdParty: Boolean, + /** Commit count of current version */ val commitCount: Int, + /** Current version name, could be version tag (v0.1.2) or commit count (r1234) */ val versionName: String, + /** Repository name */ val repository: String, - // SY --> - val syDebugVersion: String, - // SY <-- + /** Force check for new update */ val forceCheck: Boolean = false, ) diff --git a/domain/src/test/java/tachiyomi/domain/release/interactor/GetApplicationReleaseTest.kt b/domain/src/test/java/tachiyomi/domain/release/interactor/GetApplicationReleaseTest.kt index 80241d472..2397b5adb 100644 --- a/domain/src/test/java/tachiyomi/domain/release/interactor/GetApplicationReleaseTest.kt +++ b/domain/src/test/java/tachiyomi/domain/release/interactor/GetApplicationReleaseTest.kt @@ -49,7 +49,6 @@ class GetApplicationReleaseTest { commitCount = 0, versionName = "v1.0.0", repository = "test", - syDebugVersion = "0", ), ) @@ -62,7 +61,7 @@ class GetApplicationReleaseTest { every { preference.set(any()) }.answers { } val release = Release( - "200", + "r2000", "info", "http://example.com/release_link", listOf("http://example.com/assets"), @@ -77,13 +76,10 @@ class GetApplicationReleaseTest { commitCount = 1000, versionName = "", repository = "test", - syDebugVersion = "100", ), ) - (result as GetApplicationRelease.Result.NewUpdate).release shouldBe GetApplicationRelease.Result.NewUpdate( - release, - ).release + result shouldBe GetApplicationRelease.Result.NewUpdate(release) } @Test @@ -106,14 +102,11 @@ class GetApplicationReleaseTest { isThirdParty = false, commitCount = 0, versionName = "v1.0.0", - syDebugVersion = "0", repository = "test", ), ) - (result as GetApplicationRelease.Result.NewUpdate).release shouldBe GetApplicationRelease.Result.NewUpdate( - release, - ).release + result shouldBe GetApplicationRelease.Result.NewUpdate(release) } @Test @@ -136,7 +129,6 @@ class GetApplicationReleaseTest { isThirdParty = false, commitCount = 0, versionName = "v2.0.0", - syDebugVersion = "0", repository = "test", ), ) @@ -150,7 +142,7 @@ class GetApplicationReleaseTest { every { preference.set(any()) }.answers { } val release = Release( - "v1.0.0", + "v2.0.0", "info", "http://example.com/release_link", listOf("http://example.com/assets"), @@ -163,8 +155,7 @@ class GetApplicationReleaseTest { isPreview = false, isThirdParty = false, commitCount = 0, - versionName = "v2.0.0", - syDebugVersion = "0", + versionName = "v1.0.0", repository = "test", ), ) @@ -172,4 +163,88 @@ class GetApplicationReleaseTest { coVerify(exactly = 0) { releaseService.latest(any()) } result shouldBe GetApplicationRelease.Result.NoNewUpdate } + + // KMK --> + // TODO: remove below tests when all users finished switching from preview to stable + @Test + fun `When preview version updating to new stable version with preview tag expect new update`() = runTest { + every { preference.get() } returns 0 + every { preference.set(any()) }.answers { } + + val release = Release( + "r1234", + "info", + "http://example.com/release_link", + listOf("http://example.com/assets"), + ) + + coEvery { releaseService.latest(any()) } returns release + + val result = getApplicationRelease.await( + GetApplicationRelease.Arguments( + isPreview = true, + isThirdParty = false, + commitCount = 25, + versionName = "", + repository = "test", + ), + ) + + result shouldBe GetApplicationRelease.Result.NewUpdate(release) + } + + @Test + fun `When has stable update with preview version but current app is stable version expect no update`() = runTest { + every { preference.get() } returns 0 + every { preference.set(any()) }.answers { } + + val release = Release( + "r1234", + "info", + "http://example.com/release_link", + listOf("http://example.com/assets"), + ) + + coEvery { releaseService.latest(any()) } returns release + + val result = getApplicationRelease.await( + GetApplicationRelease.Arguments( + isPreview = false, + isThirdParty = false, + commitCount = 0, + versionName = "v1.0.0", + repository = "test", + ), + ) + + result shouldBe GetApplicationRelease.Result.NoNewUpdate + } + + @Test + fun `When has stable update but current app is preview version (same repo) expect new update`() = runTest { + every { preference.get() } returns 0 + every { preference.set(any()) }.answers { } + + val release = Release( + "v2.0.0", + "info", + "http://example.com/release_link", + listOf("http://example.com/assets"), + ) + + coEvery { releaseService.latest(any()) } returns release + + val result = getApplicationRelease.await( + GetApplicationRelease.Arguments( + isPreview = true, + isThirdParty = false, + commitCount = 25, + versionName = "", + repository = "test", + ), + ) + + result shouldBe GetApplicationRelease.Result.NewUpdate(release) + } + // KMK <-- } diff --git a/i18n-sy/src/commonMain/resources/MR/base/strings.xml b/i18n-sy/src/commonMain/resources/MR/base/strings.xml index 278e5af68..20cb89b96 100644 --- a/i18n-sy/src/commonMain/resources/MR/base/strings.xml +++ b/i18n-sy/src/commonMain/resources/MR/base/strings.xml @@ -28,6 +28,7 @@ Version %1$s + Change Logs E-Hentai Website Account Settings