From 2ef2ab2ec7ae56077c97bc283bc42952a77443a3 Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Thu, 15 Jan 2026 01:01:31 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=96=B0=E5=A2=9E]=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BA=86=E4=B8=80=E4=BA=9B=20Compose=20=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E7=9A=84=E7=9B=B8=E5=85=B3=E9=85=8D=E7=BD=AE=EF=BC=8C=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E6=A8=A1=E7=B3=8A=E9=85=8D=E7=BD=AE=E5=B0=9A=E4=B8=8D?= =?UTF-8?q?=E5=8F=AF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/ic_launcher-playstore.png | Bin 27293 -> 0 bytes .../java/io/legado/app/constant/PreferKey.kt | 2 ++ .../io/legado/app/help/config/AppConfig.kt | 13 +++++++ .../app/ui/config/ThemeConfigFragment.kt | 6 ++-- .../java/io/legado/app/ui/theme/AppTheme.kt | 5 ++- .../io/legado/app/ui/theme/ThemeManager.kt | 7 ++-- .../io/legado/app/ui/theme/ThemeResolver.kt | 18 ++++++++++ .../java/io/legado/app/ui/theme/ThemeState.kt | 21 +++++++++++ .../io/legado/app/ui/theme/ThemeSyncer.kt | 10 ++++++ .../GlobalModalBottomSheet.kt | 4 ++- app/src/main/res/values-zh-rCN/arrays.xml | 12 +++++++ app/src/main/res/values-zh-rCN/strings.xml | 3 ++ app/src/main/res/values/array_values.xml | 12 +++++++ app/src/main/res/values/arrays.xml | 14 +++++++- app/src/main/res/values/strings.xml | 3 ++ app/src/main/res/xml/pref_config_theme.xml | 33 +++++++++++++++--- gradle/libs.versions.toml | 2 +- 17 files changed, 151 insertions(+), 14 deletions(-) delete mode 100644 app/src/main/ic_launcher-playstore.png diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png deleted file mode 100644 index 2c61762ef6cca739006f0dddb9be19adadb8445f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27293 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

cbx1MHBmlvi~ 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 diff --git a/app/src/main/java/io/legado/app/constant/PreferKey.kt b/app/src/main/java/io/legado/app/constant/PreferKey.kt index bb8250ebd..fa3034b6a 100644 --- a/app/src/main/java/io/legado/app/constant/PreferKey.kt +++ b/app/src/main/java/io/legado/app/constant/PreferKey.kt @@ -172,6 +172,8 @@ object PreferKey { const val cPrimary = "colorPrimary" const val cAccent = "colorAccent" const val customMode = "customMode" + const val paletteStyle = "paletteStyle" + const val enableBlur = "enableBlur" const val cBackground = "colorBackground" const val cBBackground = "colorBottomBackground" const val bgImage = "backgroundImage" 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 26079298d..afe2c6003 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 @@ -902,6 +902,17 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener { appCtx.putPrefString(PreferKey.labelVisibilityMode, value) } + var paletteStyle + get() = appCtx.getPrefString(PreferKey.paletteStyle, "tonalSpot") + set(value) { + appCtx.putPrefString(PreferKey.paletteStyle, value) + } + + var enableBlur + get() = appCtx.getPrefBoolean(PreferKey.enableBlur, false) + set(value) { + appCtx.putPrefBoolean(PreferKey.enableBlur, value) + } var menuAlpha: Int get() = appCtx.getPrefInt(PreferKey.menuAlpha, 100) set(value) { @@ -961,5 +972,7 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener { set(value) { appCtx.putPrefBoolean(PreferKey.sliderVibrator, value) } + + } diff --git a/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt index 046231d8f..4c3bd1acf 100644 --- a/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt +++ b/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt @@ -139,6 +139,7 @@ class ThemeConfigFragment : PreferenceFragmentCompat(), true } + // TODO:删掉种子色了喵 val hasColorImage = !getPrefString(PreferKey.colorImage).isNullOrBlank() colorPrimary?.isEnabled = !hasColorImage if (hasColorImage) @@ -178,15 +179,16 @@ class ThemeConfigFragment : PreferenceFragmentCompat(), //recreateActivities() } - PreferKey.customMode -> handleRestartRequired() - PreferKey.pureBlack -> { + PreferKey.paletteStyle, PreferKey.pureBlack, PreferKey.enableBlur -> { ThemeSyncer.syncAll() Handler(Looper.getMainLooper()).postDelayed({ recreateActivities() }, 100) } + PreferKey.customMode -> handleRestartRequired() + PreferKey.isPredictiveBackEnabled -> { toastOnUi("重启以应用") } diff --git a/app/src/main/java/io/legado/app/ui/theme/AppTheme.kt b/app/src/main/java/io/legado/app/ui/theme/AppTheme.kt index 6eb15f538..e38b19296 100644 --- a/app/src/main/java/io/legado/app/ui/theme/AppTheme.kt +++ b/app/src/main/java/io/legado/app/ui/theme/AppTheme.kt @@ -19,12 +19,14 @@ fun AppTheme( val appThemeMode by ThemeState.themeMode.collectAsState() val isPureBlack by ThemeState.isPureBlack.collectAsState() val hasImageBg by ThemeState.hasImageBg.collectAsState() + val paletteStyle by ThemeState.paletteStyle.collectAsState() val colorScheme = ThemeManager.getColorScheme( mode = appThemeMode, darkTheme = darkTheme, isAmoled = isPureBlack, - isImageBg = hasImageBg + isImageBg = hasImageBg, + paletteStyle = paletteStyle ) MaterialExpressiveTheme( @@ -34,4 +36,5 @@ fun AppTheme( shapes = Shapes(), content = content ) + } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/theme/ThemeManager.kt b/app/src/main/java/io/legado/app/ui/theme/ThemeManager.kt index bf964c13e..d35577e73 100644 --- a/app/src/main/java/io/legado/app/ui/theme/ThemeManager.kt +++ b/app/src/main/java/io/legado/app/ui/theme/ThemeManager.kt @@ -8,8 +8,8 @@ import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext -import com.materialkolor.PaletteStyle import io.legado.app.lib.theme.primaryColor +import io.legado.app.ui.theme.ThemeResolver.resolvePaletteStyle import io.legado.app.ui.theme.colorScheme.AugustColorScheme import io.legado.app.ui.theme.colorScheme.CarlottaColorScheme import io.legado.app.ui.theme.colorScheme.ElinkColorScheme @@ -46,10 +46,11 @@ object ThemeManager { darkTheme: Boolean = isSystemInDarkTheme(), isAmoled: Boolean, isImageBg: Boolean, + paletteStyle: String?, forceOpaque: Boolean = false ): ColorScheme { val context = LocalContext.current - + val style = resolvePaletteStyle(paletteStyle) val actualMode = if (forceOpaque && mode == AppThemeMode.Transparent) { AppThemeMode.WH } else { @@ -66,7 +67,7 @@ object ThemeManager { } AppThemeMode.CUSTOM -> { - CustomColorScheme(context, context.primaryColor, PaletteStyle.Vibrant) + CustomColorScheme(context, context.primaryColor, style) .getColorScheme(darkTheme) } diff --git a/app/src/main/java/io/legado/app/ui/theme/ThemeResolver.kt b/app/src/main/java/io/legado/app/ui/theme/ThemeResolver.kt index 4b1697633..e84c37f83 100644 --- a/app/src/main/java/io/legado/app/ui/theme/ThemeResolver.kt +++ b/app/src/main/java/io/legado/app/ui/theme/ThemeResolver.kt @@ -1,5 +1,7 @@ package io.legado.app.ui.theme +import com.materialkolor.PaletteStyle + object ThemeResolver { fun resolveThemeMode(value: String): AppThemeMode = when (value) { @@ -19,4 +21,20 @@ object ThemeResolver { "13" -> AppThemeMode.Transparent else -> AppThemeMode.Dynamic } + + fun resolvePaletteStyle(value: String?): PaletteStyle { + return when (value) { + "tonalSpot" -> PaletteStyle.TonalSpot + "neutral" -> PaletteStyle.Neutral + "vibrant" -> PaletteStyle.Vibrant + "expressive" -> PaletteStyle.Expressive + "rainbow" -> PaletteStyle.Rainbow + "fruitSalad" -> PaletteStyle.FruitSalad + "monochrome" -> PaletteStyle.Monochrome + "fidelity" -> PaletteStyle.Fidelity + "content" -> PaletteStyle.Content + else -> PaletteStyle.TonalSpot + } + } + } diff --git a/app/src/main/java/io/legado/app/ui/theme/ThemeState.kt b/app/src/main/java/io/legado/app/ui/theme/ThemeState.kt index a13b3f8e8..dd01485dc 100644 --- a/app/src/main/java/io/legado/app/ui/theme/ThemeState.kt +++ b/app/src/main/java/io/legado/app/ui/theme/ThemeState.kt @@ -22,6 +22,14 @@ object ThemeState { MutableStateFlow(AppConfig.hasImageBg) val hasImageBg: StateFlow = _hasImageBg.asStateFlow() + private val _paletteStyle = + MutableStateFlow(AppConfig.paletteStyle) + val paletteStyle: StateFlow = _paletteStyle.asStateFlow() + + private val _enableBlur = + MutableStateFlow(AppConfig.enableBlur) + val enableBlur: StateFlow = _enableBlur.asStateFlow() + fun updateThemeMode(newMode: AppThemeMode) { if (_themeMode.value != newMode) { _themeMode.value = newMode @@ -39,4 +47,17 @@ object ThemeState { _hasImageBg.value = enabled } } + + fun updatePaletteStyle(style: String?) { + if (_paletteStyle.value != style) { + _paletteStyle.value = style + } + } + + fun updateEnableBlur(enabled: Boolean) { + if (_enableBlur.value != enabled) { + _enableBlur.value = enabled + } + } + } diff --git a/app/src/main/java/io/legado/app/ui/theme/ThemeSyncer.kt b/app/src/main/java/io/legado/app/ui/theme/ThemeSyncer.kt index ca45030b2..658a1e222 100644 --- a/app/src/main/java/io/legado/app/ui/theme/ThemeSyncer.kt +++ b/app/src/main/java/io/legado/app/ui/theme/ThemeSyncer.kt @@ -11,6 +11,8 @@ object ThemeSyncer { syncThemeMode() syncPureBlack() syncImageBg() + syncPaletteStyle() + syncEnableBlur() } fun syncThemeMode() { @@ -26,4 +28,12 @@ object ThemeSyncer { fun syncImageBg() { ThemeState.updateImageBg(AppConfig.hasImageBg) } + + fun syncPaletteStyle() { + ThemeState.updatePaletteStyle(AppConfig.paletteStyle) + } + + fun syncEnableBlur() { + ThemeState.updateEnableBlur(AppConfig.enableBlur) + } } diff --git a/app/src/main/java/io/legado/app/ui/widget/components/modalBottomSheet/GlobalModalBottomSheet.kt b/app/src/main/java/io/legado/app/ui/widget/components/modalBottomSheet/GlobalModalBottomSheet.kt index c1cb4dab8..33b76c962 100644 --- a/app/src/main/java/io/legado/app/ui/widget/components/modalBottomSheet/GlobalModalBottomSheet.kt +++ b/app/src/main/java/io/legado/app/ui/widget/components/modalBottomSheet/GlobalModalBottomSheet.kt @@ -34,12 +34,14 @@ fun GlobalModalBottomSheet( val themeMode by ThemeState.themeMode.collectAsState() val isPureBlack by ThemeState.isPureBlack.collectAsState() val hasImageBg by ThemeState.hasImageBg.collectAsState() + val paletteStyle by ThemeState.paletteStyle.collectAsState() val colorScheme = ThemeManager.getColorScheme( mode = themeMode, isAmoled = isPureBlack, isImageBg = hasImageBg, - forceOpaque = true + forceOpaque = true, + paletteStyle = paletteStyle ) ModalBottomSheet( diff --git a/app/src/main/res/values-zh-rCN/arrays.xml b/app/src/main/res/values-zh-rCN/arrays.xml index daa7ad9e0..4338ea683 100644 --- a/app/src/main/res/values-zh-rCN/arrays.xml +++ b/app/src/main/res/values-zh-rCN/arrays.xml @@ -156,6 +156,18 @@ 关闭 + + 柔和 + 中性 + 鲜艳 + 表现力 + 彩虹 + 水果拼盘 + 单色 + 仿真 + 内容取色 + + 全局 仅强调色 diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index aa99779a7..ef43ff54f 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -1367,4 +1367,7 @@ 强调 颜色样式 反转音量键翻页方向 + 调色板样式 + 这里的选项仅可以控制使用Compose重写的界面。 + 启用控件模糊 \ No newline at end of file diff --git a/app/src/main/res/values/array_values.xml b/app/src/main/res/values/array_values.xml index 88a0850ee..f38ca5b96 100644 --- a/app/src/main/res/values/array_values.xml +++ b/app/src/main/res/values/array_values.xml @@ -78,6 +78,18 @@ off + + tonalSpot + neutral + vibrant + expressive + rainbow + fruitSalad + monochrome + fidelity + content + + global accent diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index abd8627e6..8c5249d58 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -193,7 +193,19 @@ Off - + + TonalSpot + Neutral + Vibrant + Expressive + Rainbow + FruitSalad + Monochrome + Fidelity + Content + + + Global Accent diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 77d0e0acf..ab05d1ba8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1372,4 +1372,7 @@ 强调 颜色样式 反转音量键翻页方向 + 调色板样式 + 这里的选项仅可以控制使用Compose重写的界面。 + 启用控件模糊 diff --git a/app/src/main/res/xml/pref_config_theme.xml b/app/src/main/res/xml/pref_config_theme.xml index fe7d23cb9..edc46db98 100644 --- a/app/src/main/res/xml/pref_config_theme.xml +++ b/app/src/main/res/xml/pref_config_theme.xml @@ -43,11 +43,6 @@ app:cpv_dialogType="preset" app:iconSpaceReserved="false" /> - - + + + + + + + + + +