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

This commit is contained in:
HapeLee
2026-06-09 13:26:52 +08:00
parent 88dd01e0be
commit 92614c2ca6
8 changed files with 14 additions and 21 deletions
+3 -3
View File
@@ -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 {
@@ -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) { val isDarkTheme = AppConfig.isNightTheme
Configuration.UI_MODE_NIGHT_YES -> true
Configuration.UI_MODE_NIGHT_NO,
Configuration.UI_MODE_NIGHT_UNDEFINED -> false
else -> false
}
WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightStatusBars = !isDarkTheme WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightStatusBars = !isDarkTheme
} }
@@ -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 =
@@ -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)
@@ -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,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,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) {
@@ -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