fix: Crashes caused by cab40214d2

Screen arguments need to be parcelable
This commit is contained in:
Ahmad Ansori Palembani 2024-12-28 11:23:34 +07:00
parent c6a86d773b
commit cd4079aa4b
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
3 changed files with 17 additions and 7 deletions

View file

@ -16,6 +16,7 @@ import eu.kanade.tachiyomi.ui.base.controller.BaseComposeController
import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.ui.base.controller.DialogController
import eu.kanade.tachiyomi.util.compose.LocalAlertDialog import eu.kanade.tachiyomi.util.compose.LocalAlertDialog
import eu.kanade.tachiyomi.util.compose.LocalBackPress 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.system.materialAlertDialog
import eu.kanade.tachiyomi.util.view.setNegativeButton import eu.kanade.tachiyomi.util.view.setNegativeButton
import eu.kanade.tachiyomi.util.view.setPositiveButton import eu.kanade.tachiyomi.util.view.setPositiveButton
@ -32,13 +33,12 @@ class AboutController : BaseComposeController() {
@Composable @Composable
override fun ScreenContent() { override fun ScreenContent() {
Navigator( Navigator(
screen = AboutScreen { body, url, isBeta -> screen = AboutScreen(),
NewUpdateDialogController(body, url, isBeta).showDialog(router)
},
content = { content = {
CompositionLocalProvider( CompositionLocalProvider(
LocalAlertDialog provides ComposableAlertDialog(null), LocalAlertDialog provides ComposableAlertDialog(null),
LocalBackPress provides router::handleBack, LocalBackPress provides router::handleBack,
LocalRouter provides router,
) { ) {
ScreenTransition( ScreenTransition(
navigator = it, navigator = it,

View file

@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.ProvidableCompositionLocal import androidx.compose.runtime.ProvidableCompositionLocal
import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.runtime.staticCompositionLocalOf
import com.bluelinelabs.conductor.Router
import yokai.domain.ComposableAlertDialog import yokai.domain.ComposableAlertDialog
val <T> ProvidableCompositionLocal<T?>.currentOrThrow val <T> ProvidableCompositionLocal<T?>.currentOrThrow
@ -12,3 +13,8 @@ val <T> ProvidableCompositionLocal<T?>.currentOrThrow
val LocalBackPress: ProvidableCompositionLocal<(() -> Unit)?> = staticCompositionLocalOf { null } val LocalBackPress: ProvidableCompositionLocal<(() -> Unit)?> = staticCompositionLocalOf { null }
val LocalAlertDialog: ProvidableCompositionLocal<ComposableAlertDialog?> = compositionLocalOf { null } val LocalAlertDialog: ProvidableCompositionLocal<ComposableAlertDialog?> = 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<Router?> = compositionLocalOf { null }

View file

@ -27,6 +27,7 @@ import androidx.compose.ui.unit.dp
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.LocalNavigator
import co.touchlab.kermit.Logger import co.touchlab.kermit.Logger
import com.bluelinelabs.conductor.Router
import dev.icerock.moko.resources.compose.stringResource import dev.icerock.moko.resources.compose.stringResource
import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.BuildConfig
import eu.kanade.tachiyomi.core.storage.preference.asDateFormat 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.AppUpdateNotifier
import eu.kanade.tachiyomi.data.updater.AppUpdateResult import eu.kanade.tachiyomi.data.updater.AppUpdateResult
import eu.kanade.tachiyomi.data.updater.RELEASE_URL 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.CrashLogUtil
import eu.kanade.tachiyomi.util.compose.LocalRouter
import eu.kanade.tachiyomi.util.compose.currentOrThrow import eu.kanade.tachiyomi.util.compose.currentOrThrow
import eu.kanade.tachiyomi.util.lang.toTimestampString import eu.kanade.tachiyomi.util.lang.toTimestampString
import eu.kanade.tachiyomi.util.system.isOnline import eu.kanade.tachiyomi.util.system.isOnline
@ -60,11 +63,12 @@ import yokai.presentation.settings.SettingsScaffold
import yokai.util.Screen import yokai.util.Screen
import yokai.util.lang.getString import yokai.util.lang.getString
class AboutScreen(private val showNewUpdateDialog: (String, String, Boolean?) -> Unit) : Screen() { class AboutScreen : Screen() {
@Composable @Composable
override fun Content() { override fun Content() {
val context = LocalContext.current val context = LocalContext.current
val navigator = LocalNavigator.currentOrThrow val navigator = LocalNavigator.currentOrThrow
val router = LocalRouter.currentOrThrow
val uriHandler = LocalUriHandler.current val uriHandler = LocalUriHandler.current
val snackbarHostState = remember { SnackbarHostState() } val snackbarHostState = remember { SnackbarHostState() }
@ -105,7 +109,7 @@ class AboutScreen(private val showNewUpdateDialog: (String, String, Boolean?) ->
onPreferenceClick = { onPreferenceClick = {
if (context.isOnline()) { if (context.isOnline()) {
scope.launch { scope.launch {
context.checkVersion() context.checkVersion(router)
} }
} else { } else {
context.toast(MR.strings.no_network_connection) context.toast(MR.strings.no_network_connection)
@ -189,7 +193,7 @@ class AboutScreen(private val showNewUpdateDialog: (String, String, Boolean?) ->
else -> "Release ${BuildConfig.VERSION_NAME}" else -> "Release ${BuildConfig.VERSION_NAME}"
} }
private suspend fun Context.checkVersion() { private suspend fun Context.checkVersion(router: Router) {
val updateChecker = AppUpdateChecker() val updateChecker = AppUpdateChecker()
withUIContext { toast(MR.strings.searching_for_updates) } withUIContext { toast(MR.strings.searching_for_updates) }
@ -211,7 +215,7 @@ class AboutScreen(private val showNewUpdateDialog: (String, String, Boolean?) ->
// Create confirmation window // Create confirmation window
withUIContext { withUIContext {
AppUpdateNotifier.releasePageUrl = result.release.releaseLink AppUpdateNotifier.releasePageUrl = result.release.releaseLink
showNewUpdateDialog(body, url, isBeta) NewUpdateDialogController(body, url, isBeta).showDialog(router)
} }
} }
is AppUpdateResult.NoNewUpdate -> { is AppUpdateResult.NoNewUpdate -> {