Преглед изворни кода

fix: View与Compose亮暗色主题冷启动不一致

HapeLee пре 5 месеци
родитељ
комит
92614c2ca6

+ 3 - 3
app/src/main/java/io/legado/app/App.kt

@@ -34,6 +34,7 @@ import io.legado.app.data.entities.rule.BookInfoRule
 import io.legado.app.data.entities.rule.ContentRule
 import io.legado.app.data.entities.rule.ContentRule
 import io.legado.app.data.entities.rule.ExploreRule
 import io.legado.app.data.entities.rule.ExploreRule
 import io.legado.app.data.entities.rule.SearchRule
 import io.legado.app.data.entities.rule.SearchRule
+import io.legado.app.data.repository.SettingsRepository
 import io.legado.app.di.appDatabaseModule
 import io.legado.app.di.appDatabaseModule
 import io.legado.app.di.appModule
 import io.legado.app.di.appModule
 import io.legado.app.help.AppFreezeMonitor
 import io.legado.app.help.AppFreezeMonitor
@@ -44,11 +45,10 @@ import io.legado.app.help.DispatchersMonitor
 import io.legado.app.help.LifecycleHelp
 import io.legado.app.help.LifecycleHelp
 import io.legado.app.help.RuleBigDataHelp
 import io.legado.app.help.RuleBigDataHelp
 import io.legado.app.help.book.BookHelp
 import io.legado.app.help.book.BookHelp
-import io.legado.app.data.repository.SettingsRepository
 import io.legado.app.help.config.AppConfig
 import io.legado.app.help.config.AppConfig
+import io.legado.app.help.config.ReadBookConfig
 import io.legado.app.help.config.ThemeConfigStore
 import io.legado.app.help.config.ThemeConfigStore
 import io.legado.app.help.config.ThemeConfigStore.applyDayNightInit
 import io.legado.app.help.config.ThemeConfigStore.applyDayNightInit
-import io.legado.app.help.config.ReadBookConfig
 import io.legado.app.help.coroutine.Coroutine
 import io.legado.app.help.coroutine.Coroutine
 import io.legado.app.help.http.Cronet
 import io.legado.app.help.http.Cronet
 import io.legado.app.help.http.ObsoleteUrlFactory
 import io.legado.app.help.http.ObsoleteUrlFactory
@@ -91,6 +91,7 @@ class App : Application(), ImageLoaderFactory {
             androidContext(this@App)
             androidContext(this@App)
             modules(appDatabaseModule, appModule)
             modules(appDatabaseModule, appModule)
         }
         }
+        applyDayNightInit(this)
         if (getPrefString("app_theme", "0") == "12") {
         if (getPrefString("app_theme", "0") == "12") {
             if (AppConfig.customMode == "accent")
             if (AppConfig.customMode == "accent")
                 setTheme(R.style.ThemeOverlay_WhiteBackground)
                 setTheme(R.style.ThemeOverlay_WhiteBackground)
@@ -130,7 +131,6 @@ class App : Application(), ImageLoaderFactory {
             ThreadUtils.setThreadAssertsDisabledForTesting(true)
             ThreadUtils.setThreadAssertsDisabledForTesting(true)
         }
         }
         oldConfig = Configuration(resources.configuration)
         oldConfig = Configuration(resources.configuration)
-        applyDayNightInit(this)
         registerActivityLifecycleCallbacks(LifecycleHelp)
         registerActivityLifecycleCallbacks(LifecycleHelp)
         defaultSharedPreferences.registerOnSharedPreferenceChangeListener(AppConfig)
         defaultSharedPreferences.registerOnSharedPreferenceChangeListener(AppConfig)
         Coroutine.async {
         Coroutine.async {

+ 1 - 6
app/src/main/java/io/legado/app/base/BaseActivity.kt

@@ -128,12 +128,7 @@ abstract class BaseActivity<VB : ViewBinding>(
             true,
             true,
             fullScreen
             fullScreen
         )
         )
-        val isDarkTheme = when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) {
-            Configuration.UI_MODE_NIGHT_YES -> true
-            Configuration.UI_MODE_NIGHT_NO,
-            Configuration.UI_MODE_NIGHT_UNDEFINED -> false
-            else -> false
-        }
+        val isDarkTheme = AppConfig.isNightTheme
         WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightStatusBars = !isDarkTheme
         WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightStatusBars = !isDarkTheme
     }
     }
 
 

+ 2 - 2
app/src/main/java/io/legado/app/ui/about/MiuixAboutScreen.kt

@@ -4,7 +4,6 @@ package io.legado.app.ui.about
 
 
 import androidx.compose.foundation.Image
 import androidx.compose.foundation.Image
 import androidx.compose.foundation.background
 import androidx.compose.foundation.background
-import androidx.compose.foundation.isSystemInDarkTheme
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.PaddingValues
@@ -46,6 +45,7 @@ import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
 import androidx.compose.ui.unit.sp
 import io.legado.app.R
 import io.legado.app.R
 import io.legado.app.constant.AppConst.appInfo
 import io.legado.app.constant.AppConst.appInfo
+import io.legado.app.ui.theme.LegadoTheme
 import io.legado.app.ui.util.BlurredBar
 import io.legado.app.ui.util.BlurredBar
 import io.legado.app.ui.util.LocalAppState
 import io.legado.app.ui.util.LocalAppState
 import io.legado.app.ui.util.LocalIsWideScreen
 import io.legado.app.ui.util.LocalIsWideScreen
@@ -212,7 +212,7 @@ private fun AboutContent(
             .calculateRightPadding(LayoutDirection.Ltr) + 16.dp,
             .calculateRightPadding(LayoutDirection.Ltr) + 16.dp,
     )
     )
 
 
-    val isInDark = isSystemInDarkTheme()
+    val isInDark = LegadoTheme.isDark
     val dynamicBackground = isRuntimeShaderSupported()
     val dynamicBackground = isRuntimeShaderSupported()
 
 
     val cardBlend =
     val cardBlend =

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

@@ -59,7 +59,7 @@ object ThemeConfig {
     }
     }
 
 
     fun initNightMode() {
     fun initNightMode() {
-        when (appCtx.getPrefString(PreferKey.themeMode, "0")) {
+        when (themeMode) {
             "1" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
             "1" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
             "2" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
             "2" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
             else -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
             else -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)

+ 2 - 2
app/src/main/java/io/legado/app/ui/rss/read/RssReadRouteScreen.kt

@@ -11,7 +11,6 @@ import androidx.activity.compose.BackHandler
 import androidx.activity.compose.LocalActivity
 import androidx.activity.compose.LocalActivity
 import androidx.appcompat.app.AppCompatActivity
 import androidx.appcompat.app.AppCompatActivity
 import androidx.compose.foundation.background
 import androidx.compose.foundation.background
-import androidx.compose.foundation.isSystemInDarkTheme
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.Spacer
@@ -55,6 +54,7 @@ import io.legado.app.help.config.AppConfig
 import io.legado.app.help.http.CookieManager
 import io.legado.app.help.http.CookieManager
 import io.legado.app.ui.config.otherConfig.OtherConfig
 import io.legado.app.ui.config.otherConfig.OtherConfig
 import io.legado.app.ui.login.SourceLoginActivity
 import io.legado.app.ui.login.SourceLoginActivity
+import io.legado.app.ui.theme.LegadoTheme
 import io.legado.app.ui.widget.components.AppScaffold
 import io.legado.app.ui.widget.components.AppScaffold
 import io.legado.app.ui.widget.components.AppTextField
 import io.legado.app.ui.widget.components.AppTextField
 import io.legado.app.ui.widget.components.button.ConfirmDismissButtonsRow
 import io.legado.app.ui.widget.components.button.ConfirmDismissButtonsRow
@@ -189,7 +189,7 @@ fun RssReadRouteScreen(
         }
         }
     }
     }
 
 
-    val isNight = isSystemInDarkTheme()
+    val isNight = LegadoTheme.isDark
 
 
     LaunchedEffect(isNight, webView) {
     LaunchedEffect(isNight, webView) {
         val currentWebView = webView ?: return@LaunchedEffect
         val currentWebView = webView ?: return@LaunchedEffect

+ 1 - 2
app/src/main/java/io/legado/app/ui/widget/components/AppScaffold.kt

@@ -1,6 +1,5 @@
 package io.legado.app.ui.widget.components
 package io.legado.app.ui.widget.components
 
 
-import androidx.compose.foundation.isSystemInDarkTheme
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.WindowInsets
 import androidx.compose.foundation.layout.WindowInsets
@@ -46,7 +45,7 @@ fun AppScaffold(
     disableHazeSource: Boolean = false,
     disableHazeSource: Boolean = false,
     content: @Composable (PaddingValues) -> Unit
     content: @Composable (PaddingValues) -> Unit
 ) {
 ) {
-    val isDark = isSystemInDarkTheme()
+    val isDark = LegadoTheme.isDark
     val hasImageBg = ThemeConfig.hasImageBg(isDark)
     val hasImageBg = ThemeConfig.hasImageBg(isDark)
     val hazeState = remember { HazeState() }
     val hazeState = remember { HazeState() }
     val composeEngine = LegadoTheme.composeEngine
     val composeEngine = LegadoTheme.composeEngine

+ 2 - 2
app/src/main/java/io/legado/app/ui/widget/components/effect/BgEffectBackground.kt

@@ -2,7 +2,6 @@ package io.legado.app.ui.widget.components.effect
 
 
 import androidx.compose.animation.core.Animatable
 import androidx.compose.animation.core.Animatable
 import androidx.compose.animation.core.spring
 import androidx.compose.animation.core.spring
-import androidx.compose.foundation.isSystemInDarkTheme
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.BoxScope
 import androidx.compose.foundation.layout.BoxScope
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.Spacer
@@ -11,6 +10,7 @@ import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.remember
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.Modifier
+import io.legado.app.ui.theme.LegadoTheme
 import io.legado.app.ui.util.shouldShowSplitPane
 import io.legado.app.ui.util.shouldShowSplitPane
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.isActive
 import kotlinx.coroutines.isActive
@@ -39,7 +39,7 @@ fun BgEffectBackground(
     ) {
     ) {
         val surface = MiuixTheme.colorScheme.surface
         val surface = MiuixTheme.colorScheme.surface
         val deviceType = if (shouldShowSplitPane()) DeviceType.PAD else DeviceType.PHONE
         val deviceType = if (shouldShowSplitPane()) DeviceType.PAD else DeviceType.PHONE
-        val isDarkTheme = isSystemInDarkTheme()
+        val isDarkTheme = LegadoTheme.isDark
         val painter = remember(isOs3Effect) { BgEffectPainter(isOs3Effect) }
         val painter = remember(isOs3Effect) { BgEffectPainter(isOs3Effect) }
 
 
         val preset = remember(deviceType, isDarkTheme, isOs3Effect) {
         val preset = remember(deviceType, isDarkTheme, isOs3Effect) {

+ 2 - 3
app/src/main/java/io/legado/app/ui/widget/components/image/cover/CoilBookCover.kt

@@ -13,7 +13,6 @@ import androidx.compose.animation.SharedTransitionScope
 import androidx.compose.animation.core.animateFloat
 import androidx.compose.animation.core.animateFloat
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.background
 import androidx.compose.foundation.background
-import androidx.compose.foundation.isSystemInDarkTheme
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.aspectRatio
 import androidx.compose.foundation.layout.aspectRatio
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxSize
@@ -68,7 +67,7 @@ fun BookCoverImage(
     sharedCoverKey: String? = null,
     sharedCoverKey: String? = null,
 ) {
 ) {
     val context = LocalContext.current
     val context = LocalContext.current
-    val isNight = isSystemInDarkTheme()
+    val isNight = LegadoTheme.isDark
 
 
     val useDefault = !ignoreUseDefaultCover && CoverConfig.useDefaultCover
     val useDefault = !ignoreUseDefaultCover && CoverConfig.useDefaultCover
     val finalPath = if (useDefault) null else path
     val finalPath = if (useDefault) null else path
@@ -159,7 +158,7 @@ fun CoilBookCover(
     animatedVisibilityScope: AnimatedVisibilityScope? = null,
     animatedVisibilityScope: AnimatedVisibilityScope? = null,
     sharedCoverKey: String? = null,
     sharedCoverKey: String? = null,
 ) {
 ) {
-    val isNight = isSystemInDarkTheme()
+    val isNight = LegadoTheme.isDark
 
 
     val useDefault = !ignoreUseDefaultCover && CoverConfig.useDefaultCover
     val useDefault = !ignoreUseDefaultCover && CoverConfig.useDefaultCover
     val finalPath = if (useDefault) null else path
     val finalPath = if (useDefault) null else path