diff --git a/app/src/main/java/io/legado/app/help/config/AppConfig.kt b/app/src/main/java/io/legado/app/help/config/AppConfig.kt index 55451fd48..4c1ee513f 100644 --- a/app/src/main/java/io/legado/app/help/config/AppConfig.kt +++ b/app/src/main/java/io/legado/app/help/config/AppConfig.kt @@ -4,6 +4,7 @@ import android.content.SharedPreferences import android.os.Build import io.legado.app.BuildConfig 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.repository.ReadPreferences 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 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 swipeAnimation = appCtx.getPrefBoolean(PreferKey.swipeAnimation, true) @@ -205,10 +206,6 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener { AppTheme = appCtx.getPrefString(PreferKey.appTheme, "0") } - PreferKey.themeMode -> { - themeMode = appCtx.getPrefString(PreferKey.themeMode, "0") - } - PreferKey.clickActionTL -> clickActionTL = appCtx.getPrefInt(PreferKey.clickActionTL, 2) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 17131088e..74e4038cb 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -2587,8 +2587,6 @@ class ReadBookViewModel( else -> "0" // dark → follow system } ThemeConfig.themeMode = nextMode - // 同步更新 AppConfig 缓存,确保 View 层 ReadStyleResolver 立即读到新值 - AppConfig.themeMode = nextMode _uiState.update { it.copy(styleConfig = buildStyleConfig()) } _effects.tryEmit(ReadBookEffect.UpdateReadViewConfig( setOf( diff --git a/app/src/main/java/io/legado/app/ui/config/PrefDelegate.kt b/app/src/main/java/io/legado/app/ui/config/PrefDelegate.kt index 479392540..9d740922b 100644 --- a/app/src/main/java/io/legado/app/ui/config/PrefDelegate.kt +++ b/app/src/main/java/io/legado/app/ui/config/PrefDelegate.kt @@ -125,14 +125,17 @@ fun prefDelegate( is Long -> appCtx.putPrefLong(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)