Просмотр исходного кода

fix: 移除预测性返回与主题包应用的多余全局重建

- 预测性返回开关的消费点(BackHandler enabled / predictivePopTransitionSpec)
  均为 Compose 状态读取,切换本就即时生效,去掉 RECREATE 恢复开关动画
- 主题包应用/导入不再无条件全局重建:AppTheme 对全部主题键为响应式读取,
  写入即生效;fontScale、自定义色等需重建的键由各自 prefDelegate 按需触发
- 删除 RestartRequired 效果与 ShowResult.restartRequired 字段
5151561 3 месяцев назад
Родитель
Сommit
3cfc5fe298

+ 4 - 3
app/src/main/java/io/legado/app/ui/config/themeConfig/ThemeConfig.kt

@@ -117,9 +117,10 @@ object ThemeConfig {
 
     var bgImageNBlurring by prefDelegate(PreferKey.bgImageNBlurring, 0)
 
-    var isPredictiveBackEnabled by prefDelegate(PreferKey.isPredictiveBackEnabled, true) {
-        postEvent(EventBus.RECREATE, "")
-    }
+    // 无需 RECREATE:Compose 消费点(BackHandler enabled / predictivePopTransitionSpec)
+    // 读的是 prefDelegate 的 Compose state,切换即时生效;View 系 Activity 在下次
+    // onCreate 时按新值注册 OnBackInvokedCallback(与旧版行为一致)
+    var isPredictiveBackEnabled by prefDelegate(PreferKey.isPredictiveBackEnabled, true)
 
     var customMode by prefDelegate<String?>(PreferKey.customMode, "tonalSpot")
 

+ 0 - 17
app/src/main/java/io/legado/app/ui/config/themeManage/ThemeManageScreen.kt

@@ -1,7 +1,5 @@
 package io.legado.app.ui.config.themeManage
 
-import android.os.Handler
-import android.os.Looper
 import androidx.activity.compose.rememberLauncherForActivityResult
 import androidx.activity.result.contract.ActivityResultContracts
 import androidx.compose.foundation.background
@@ -41,7 +39,6 @@ import androidx.compose.ui.res.stringResource
 import androidx.compose.ui.unit.dp
 import androidx.lifecycle.compose.collectAsStateWithLifecycle
 import io.legado.app.R
-import io.legado.app.constant.EventBus
 import io.legado.app.help.config.SavedTheme
 import io.legado.app.help.config.ThemePackageManager
 import io.legado.app.ui.theme.adaptiveContentPadding
@@ -56,7 +53,6 @@ import io.legado.app.ui.widget.components.text.AppText
 import io.legado.app.ui.widget.components.topbar.GlassMediumFlexibleTopAppBar
 import io.legado.app.ui.widget.components.topbar.GlassTopAppBarDefaults
 import io.legado.app.ui.widget.components.topbar.TopBarNavigationButton
-import io.legado.app.utils.postEvent
 import io.legado.app.utils.toastOnUi
 import kotlinx.coroutines.flow.collectLatest
 import org.koin.androidx.compose.koinViewModel
@@ -115,12 +111,6 @@ fun ThemeManageScreen(
     LaunchedEffect(Unit) {
         viewModel.effects.collectLatest { effect ->
             when (effect) {
-                ThemeManageEffect.RestartRequired -> {
-                    Handler(Looper.getMainLooper()).postDelayed({
-                        postEvent(EventBus.RECREATE, "")
-                    }, 100)
-                }
-
                 is ThemeManageEffect.LegacyMigrationFinished -> {
                     val message = if (effect.failedCount == 0) {
                         context.getString(
@@ -146,11 +136,6 @@ fun ThemeManageScreen(
                         }
                     }
                     context.toastOnUi(message)
-                    if (effect.restartRequired) {
-                        Handler(Looper.getMainLooper()).postDelayed({
-                            postEvent(EventBus.RECREATE, "")
-                        }, 100)
-                    }
                 }
             }
         }
@@ -257,8 +242,6 @@ fun ThemeManageScreen(
         }
     }
 
-
-
     // Save theme dialog
     AppAlertDialog(
         show = showSaveDialog,

+ 2 - 5
app/src/main/java/io/legado/app/ui/config/themeManage/ThemeManageViewModel.kt

@@ -106,8 +106,9 @@ class ThemeManageViewModel(
             _uiState.update { it.copy(loading = true) }
             val result = themePackageManager.applySavedTheme(theme)
             if (result.isSuccess) {
+                // 主题键均为 Compose 响应式读取,写入即生效;fontScale/自定义色等
+                // 需要重建的键由各自 prefDelegate 的 RECREATE 回调按需触发
                 refreshSavedThemes()
-                _effects.emit(ThemeManageEffect.RestartRequired)
             } else {
                 _uiState.update { it.copy(loading = false) }
                 _effects.emit(
@@ -179,7 +180,6 @@ class ThemeManageViewModel(
             if (result.isSuccess) {
                 ThemeManageEffect.ShowResult(
                     messageRes = R.string.theme_manage_import_success,
-                    restartRequired = true,
                 )
             } else {
                 ThemeManageEffect.ShowResult(
@@ -248,8 +248,6 @@ sealed interface ThemeManageIntent {
 }
 
 sealed interface ThemeManageEffect {
-    data object RestartRequired : ThemeManageEffect
-
     data class LegacyMigrationFinished(
         val migratedCount: Int,
         val failedCount: Int,
@@ -258,6 +256,5 @@ sealed interface ThemeManageEffect {
     data class ShowResult(
         @param:StringRes val messageRes: Int,
         val detail: String? = null,
-        val restartRequired: Boolean = false,
     ) : ThemeManageEffect
 }