HapeLee 5 месяцев назад
Родитель
Сommit
2ba5f98db9

+ 2 - 5
app/src/main/java/io/legado/app/help/config/AppConfig.kt

@@ -4,6 +4,7 @@ import android.content.SharedPreferences
 import android.os.Build
 import android.os.Build
 import io.legado.app.BuildConfig
 import io.legado.app.BuildConfig
 import io.legado.app.constant.PreferKey
 import io.legado.app.constant.PreferKey
+import io.legado.app.ui.config.themeConfig.ThemeConfig
 import io.legado.app.data.appDb
 import io.legado.app.data.appDb
 import io.legado.app.data.repository.ReadPreferences
 import io.legado.app.data.repository.ReadPreferences
 import io.legado.app.ui.book.manga.config.MangaScrollMode
 import io.legado.app.ui.book.manga.config.MangaScrollMode
@@ -50,7 +51,7 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
     var mangaClickActionBC = appCtx.getPrefInt(PreferKey.mangaClickActionBC, 1)
     var mangaClickActionBC = appCtx.getPrefInt(PreferKey.mangaClickActionBC, 1)
     var mangaClickActionBR = appCtx.getPrefInt(PreferKey.mangaClickActionBR, 1)
     var mangaClickActionBR = appCtx.getPrefInt(PreferKey.mangaClickActionBR, 1)
 
 
-    var themeMode = appCtx.getPrefString(PreferKey.themeMode, "0")
+    val themeMode get() = ThemeConfig.themeMode
     var AppTheme = appCtx.getPrefString(PreferKey.appTheme, "0")
     var AppTheme = appCtx.getPrefString(PreferKey.appTheme, "0")
 
 
     var swipeAnimation = appCtx.getPrefBoolean(PreferKey.swipeAnimation, true)
     var swipeAnimation = appCtx.getPrefBoolean(PreferKey.swipeAnimation, true)
@@ -205,10 +206,6 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
                 AppTheme = appCtx.getPrefString(PreferKey.appTheme, "0")
                 AppTheme = appCtx.getPrefString(PreferKey.appTheme, "0")
             }
             }
 
 
-            PreferKey.themeMode -> {
-                themeMode = appCtx.getPrefString(PreferKey.themeMode, "0")
-            }
-
             PreferKey.clickActionTL -> clickActionTL =
             PreferKey.clickActionTL -> clickActionTL =
                 appCtx.getPrefInt(PreferKey.clickActionTL, 2)
                 appCtx.getPrefInt(PreferKey.clickActionTL, 2)
 
 

+ 0 - 2
app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt

@@ -2587,8 +2587,6 @@ class ReadBookViewModel(
             else -> "0" // dark → follow system
             else -> "0" // dark → follow system
         }
         }
         ThemeConfig.themeMode = nextMode
         ThemeConfig.themeMode = nextMode
-        // 同步更新 AppConfig 缓存,确保 View 层 ReadStyleResolver 立即读到新值
-        AppConfig.themeMode = nextMode
         _uiState.update { it.copy(styleConfig = buildStyleConfig()) }
         _uiState.update { it.copy(styleConfig = buildStyleConfig()) }
         _effects.tryEmit(ReadBookEffect.UpdateReadViewConfig(
         _effects.tryEmit(ReadBookEffect.UpdateReadViewConfig(
             setOf(
             setOf(

+ 11 - 8
app/src/main/java/io/legado/app/ui/config/PrefDelegate.kt

@@ -125,14 +125,17 @@ fun <T> prefDelegate(
                     is Long -> appCtx.putPrefLong(key, value)
                     is Long -> appCtx.putPrefLong(key, value)
                     is Float -> appCtx.putPrefFloat(key, value)
                     is Float -> appCtx.putPrefFloat(key, value)
                 }
                 }
-                // 同步写入 DataStore(权威存储),确保持久化后再返回
-                runBlocking(Dispatchers.IO) {
-                    when (value) {
-                        is String? -> DsSync.putString(key, value)
-                        is Int -> DsSync.putInt(key, value)
-                        is Boolean -> DsSync.putBoolean(key, value)
-                        is Long -> DsSync.putLong(key, value)
-                        is Float -> DsSync.putFloat(key, value)
+                // 同步写入 DataStore,确保持久化后再返回
+                // 异常不阻断流程:SP 已写入,readFromDs() 会回退到 SP 读取
+                runCatching {
+                    runBlocking(Dispatchers.IO) {
+                        when (value) {
+                            is String? -> DsSync.putString(key, value)
+                            is Int -> DsSync.putInt(key, value)
+                            is Boolean -> DsSync.putBoolean(key, value)
+                            is Long -> DsSync.putLong(key, value)
+                            is Float -> DsSync.putFloat(key, value)
+                        }
                     }
                     }
                 }
                 }
                 onValueChange?.invoke(value)
                 onValueChange?.invoke(value)