diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png deleted file mode 100644 index 2c61762ef..000000000 Binary files a/app/src/main/ic_launcher-playstore.png and /dev/null differ 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" /> - - + + + + + + + + + +