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.ExploreRule
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.appModule
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.RuleBigDataHelp
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.ReadBookConfig
import io.legado.app.help.config.ThemeConfigStore
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.http.Cronet
import io.legado.app.help.http.ObsoleteUrlFactory
@@ -91,6 +91,7 @@ class App : Application(), ImageLoaderFactory {
androidContext(this@App)
modules(appDatabaseModule, appModule)
}
applyDayNightInit(this)
if (getPrefString("app_theme", "0") == "12") {
if (AppConfig.customMode == "accent")
setTheme(R.style.ThemeOverlay_WhiteBackground)
@@ -130,7 +131,6 @@ class App : Application(), ImageLoaderFactory {
ThreadUtils.setThreadAssertsDisabledForTesting(true)
}
oldConfig = Configuration(resources.configuration)
applyDayNightInit(this)
registerActivityLifecycleCallbacks(LifecycleHelp)
defaultSharedPreferences.registerOnSharedPreferenceChangeListener(AppConfig)
Coroutine.async {
@@ -128,12 +128,7 @@ abstract class BaseActivity<VB : ViewBinding>(
true,
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
}
@@ -4,7 +4,6 @@ package io.legado.app.ui.about
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
@@ -46,6 +45,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import io.legado.app.R
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.LocalAppState
import io.legado.app.ui.util.LocalIsWideScreen
@@ -212,7 +212,7 @@ private fun AboutContent(
.calculateRightPadding(LayoutDirection.Ltr) + 16.dp,
)
val isInDark = isSystemInDarkTheme()
val isInDark = LegadoTheme.isDark
val dynamicBackground = isRuntimeShaderSupported()
val cardBlend =
@@ -59,7 +59,7 @@ object ThemeConfig {
}
fun initNightMode() {
when (appCtx.getPrefString(PreferKey.themeMode, "0")) {
when (themeMode) {
"1" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
"2" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
else -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
@@ -11,7 +11,6 @@ import androidx.activity.compose.BackHandler
import androidx.activity.compose.LocalActivity
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.background
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
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.ui.config.otherConfig.OtherConfig
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.AppTextField
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) {
val currentWebView = webView ?: return@LaunchedEffect
@@ -1,6 +1,5 @@
package io.legado.app.ui.widget.components
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
@@ -46,7 +45,7 @@ fun AppScaffold(
disableHazeSource: Boolean = false,
content: @Composable (PaddingValues) -> Unit
) {
val isDark = isSystemInDarkTheme()
val isDark = LegadoTheme.isDark
val hasImageBg = ThemeConfig.hasImageBg(isDark)
val hazeState = remember { HazeState() }
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.spring
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.Spacer
@@ -11,6 +10,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import io.legado.app.ui.theme.LegadoTheme
import io.legado.app.ui.util.shouldShowSplitPane
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
@@ -39,7 +39,7 @@ fun BgEffectBackground(
) {
val surface = MiuixTheme.colorScheme.surface
val deviceType = if (shouldShowSplitPane()) DeviceType.PAD else DeviceType.PHONE
val isDarkTheme = isSystemInDarkTheme()
val isDarkTheme = LegadoTheme.isDark
val painter = remember(isOs3Effect) { BgEffectPainter(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.foundation.Canvas
import androidx.compose.foundation.background
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxSize
@@ -68,7 +67,7 @@ fun BookCoverImage(
sharedCoverKey: String? = null,
) {
val context = LocalContext.current
val isNight = isSystemInDarkTheme()
val isNight = LegadoTheme.isDark
val useDefault = !ignoreUseDefaultCover && CoverConfig.useDefaultCover
val finalPath = if (useDefault) null else path
@@ -159,7 +158,7 @@ fun CoilBookCover(
animatedVisibilityScope: AnimatedVisibilityScope? = null,
sharedCoverKey: String? = null,
) {
val isNight = isSystemInDarkTheme()
val isNight = LegadoTheme.isDark
val useDefault = !ignoreUseDefaultCover && CoverConfig.useDefaultCover
val finalPath = if (useDefault) null else path