From cd4079aa4b0daba99e32e04af3101942130df3e6 Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Sat, 28 Dec 2024 11:23:34 +0700 Subject: [PATCH] fix: Crashes caused by cab40214d2bd4a650fe22886e2c822f4010a20fb Screen arguments need to be parcelable --- .../eu/kanade/tachiyomi/ui/more/AboutController.kt | 6 +++--- .../java/eu/kanade/tachiyomi/util/compose/Locals.kt | 6 ++++++ .../settings/screen/about/AboutScreen.kt | 12 ++++++++---- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutController.kt index 4d1f9a63c8..e0635b44c0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutController.kt @@ -16,6 +16,7 @@ import eu.kanade.tachiyomi.ui.base.controller.BaseComposeController import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.util.compose.LocalAlertDialog import eu.kanade.tachiyomi.util.compose.LocalBackPress +import eu.kanade.tachiyomi.util.compose.LocalRouter import eu.kanade.tachiyomi.util.system.materialAlertDialog import eu.kanade.tachiyomi.util.view.setNegativeButton import eu.kanade.tachiyomi.util.view.setPositiveButton @@ -32,13 +33,12 @@ class AboutController : BaseComposeController() { @Composable override fun ScreenContent() { Navigator( - screen = AboutScreen { body, url, isBeta -> - NewUpdateDialogController(body, url, isBeta).showDialog(router) - }, + screen = AboutScreen(), content = { CompositionLocalProvider( LocalAlertDialog provides ComposableAlertDialog(null), LocalBackPress provides router::handleBack, + LocalRouter provides router, ) { ScreenTransition( navigator = it, diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/compose/Locals.kt b/app/src/main/java/eu/kanade/tachiyomi/util/compose/Locals.kt index d9590305dd..54a1468710 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/compose/Locals.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/compose/Locals.kt @@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.ProvidableCompositionLocal import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.staticCompositionLocalOf +import com.bluelinelabs.conductor.Router import yokai.domain.ComposableAlertDialog val ProvidableCompositionLocal.currentOrThrow @@ -12,3 +13,8 @@ val ProvidableCompositionLocal.currentOrThrow val LocalBackPress: ProvidableCompositionLocal<(() -> Unit)?> = staticCompositionLocalOf { null } val LocalAlertDialog: ProvidableCompositionLocal = compositionLocalOf { null } +@Deprecated( + message = "Scheduled for removal once Conductor is fully replaced by Voyager", + replaceWith = ReplaceWith("LocalNavigator", "cafe.adriel.voyager.navigator.LocalNavigator"), +) +val LocalRouter: ProvidableCompositionLocal = compositionLocalOf { null } diff --git a/app/src/main/java/yokai/presentation/settings/screen/about/AboutScreen.kt b/app/src/main/java/yokai/presentation/settings/screen/about/AboutScreen.kt index ca3b495904..66d57832dc 100644 --- a/app/src/main/java/yokai/presentation/settings/screen/about/AboutScreen.kt +++ b/app/src/main/java/yokai/presentation/settings/screen/about/AboutScreen.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.unit.dp import androidx.core.content.getSystemService import cafe.adriel.voyager.navigator.LocalNavigator import co.touchlab.kermit.Logger +import com.bluelinelabs.conductor.Router import dev.icerock.moko.resources.compose.stringResource import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.core.storage.preference.asDateFormat @@ -35,7 +36,9 @@ import eu.kanade.tachiyomi.data.updater.AppUpdateChecker import eu.kanade.tachiyomi.data.updater.AppUpdateNotifier import eu.kanade.tachiyomi.data.updater.AppUpdateResult import eu.kanade.tachiyomi.data.updater.RELEASE_URL +import eu.kanade.tachiyomi.ui.more.AboutController.NewUpdateDialogController import eu.kanade.tachiyomi.util.CrashLogUtil +import eu.kanade.tachiyomi.util.compose.LocalRouter import eu.kanade.tachiyomi.util.compose.currentOrThrow import eu.kanade.tachiyomi.util.lang.toTimestampString import eu.kanade.tachiyomi.util.system.isOnline @@ -60,11 +63,12 @@ import yokai.presentation.settings.SettingsScaffold import yokai.util.Screen import yokai.util.lang.getString -class AboutScreen(private val showNewUpdateDialog: (String, String, Boolean?) -> Unit) : Screen() { +class AboutScreen : Screen() { @Composable override fun Content() { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow + val router = LocalRouter.currentOrThrow val uriHandler = LocalUriHandler.current val snackbarHostState = remember { SnackbarHostState() } @@ -105,7 +109,7 @@ class AboutScreen(private val showNewUpdateDialog: (String, String, Boolean?) -> onPreferenceClick = { if (context.isOnline()) { scope.launch { - context.checkVersion() + context.checkVersion(router) } } else { context.toast(MR.strings.no_network_connection) @@ -189,7 +193,7 @@ class AboutScreen(private val showNewUpdateDialog: (String, String, Boolean?) -> else -> "Release ${BuildConfig.VERSION_NAME}" } - private suspend fun Context.checkVersion() { + private suspend fun Context.checkVersion(router: Router) { val updateChecker = AppUpdateChecker() withUIContext { toast(MR.strings.searching_for_updates) } @@ -211,7 +215,7 @@ class AboutScreen(private val showNewUpdateDialog: (String, String, Boolean?) -> // Create confirmation window withUIContext { AppUpdateNotifier.releasePageUrl = result.release.releaseLink - showNewUpdateDialog(body, url, isBeta) + NewUpdateDialogController(body, url, isBeta).showDialog(router) } } is AppUpdateResult.NoNewUpdate -> {