From 9d2640d8e918337f47fc2594cdac41e6eb656e77 Mon Sep 17 00:00:00 2001 From: HuanCheng65 <22636177+HuanCheng65@users.noreply.github.com> Date: Fri, 29 Sep 2023 22:22:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8A=A8=E6=80=81=E5=8F=96=E8=89=B2?= =?UTF-8?q?=E5=A4=9C=E9=97=B4=E6=A8=A1=E5=BC=8F=E6=94=AF=E6=8C=81=E7=BA=AF?= =?UTF-8?q?=E9=BB=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/ui/common/theme/compose/Theme.kt | 169 +++++++++--------- 1 file changed, 80 insertions(+), 89 deletions(-) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/common/theme/compose/Theme.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/common/theme/compose/Theme.kt index 61b9ac64..f5025e7d 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/common/theme/compose/Theme.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/common/theme/compose/Theme.kt @@ -99,11 +99,16 @@ fun getColorPalette( @Composable private fun getDynamicColor( - isDarkColorPalette: Boolean, + theme: String, tonalPalette: TonalPalette, ): ExtendedColors { + val isDarkColorPalette = ThemeUtil.isNightMode(theme) return if (isDarkColorPalette) { - getDarkDynamicColor(tonalPalette) + if (theme == ThemeUtil.THEME_AMOLED_DARK) { + getBlackDarkDynamicColor(tonalPalette) + } else { + getDarkDynamicColor(tonalPalette) + } } else { getLightDynamicColor(tonalPalette) } @@ -112,20 +117,12 @@ private fun getDynamicColor( @Composable private fun getDynamicTopBarColor( tonalPalette: TonalPalette, - isNightMode: Boolean, + isNightMode: Boolean = false, ): Color { val topBarUsePrimaryColor = - LocalContext.current.appPreferences.toolbarPrimaryColor && !isNightMode - val primaryColor = if (isNightMode) { - tonalPalette.primary80 - } else { - tonalPalette.primary40 - } - val backgroundColor = if (isNightMode) { - tonalPalette.neutralVariant10 - } else { - tonalPalette.neutralVariant99 - } + LocalContext.current.appPreferences.toolbarPrimaryColor + val primaryColor = tonalPalette.primary40 + val backgroundColor = tonalPalette.neutralVariant99 return if (topBarUsePrimaryColor) { primaryColor } else { @@ -136,20 +133,11 @@ private fun getDynamicTopBarColor( @Composable private fun getDynamicOnTopBarColor( tonalPalette: TonalPalette, - isNightMode: Boolean, ): Color { val topBarUsePrimaryColor = - LocalContext.current.appPreferences.toolbarPrimaryColor && !isNightMode - val onPrimaryColor = if (isNightMode) { - tonalPalette.primary20 - } else { - tonalPalette.primary100 - } - val onBackgroundColor = if (isNightMode) { - tonalPalette.neutralVariant90 - } else { - tonalPalette.neutralVariant10 - } + LocalContext.current.appPreferences.toolbarPrimaryColor + val onPrimaryColor = tonalPalette.primary100 + val onBackgroundColor = tonalPalette.neutralVariant10 return if (topBarUsePrimaryColor) { onPrimaryColor } else { @@ -160,20 +148,12 @@ private fun getDynamicOnTopBarColor( @Composable private fun getDynamicOnTopBarSecondaryColor( tonalPalette: TonalPalette, - isNightMode: Boolean, + isNightMode: Boolean = false, ): Color { val topBarUsePrimaryColor = - LocalContext.current.appPreferences.toolbarPrimaryColor && !isNightMode - val primaryColor = if (isNightMode) { - tonalPalette.primary20 - } else { - tonalPalette.primary80 - } - val backgroundColor = if (isNightMode) { - tonalPalette.neutralVariant70 - } else { - tonalPalette.neutralVariant40 - } + LocalContext.current.appPreferences.toolbarPrimaryColor + val primaryColor = tonalPalette.primary80 + val backgroundColor = tonalPalette.neutralVariant40 return if (topBarUsePrimaryColor) { primaryColor } else { @@ -184,20 +164,11 @@ private fun getDynamicOnTopBarSecondaryColor( @Composable private fun getDynamicOnTopBarActiveColor( tonalPalette: TonalPalette, - isNightMode: Boolean, ): Color { val topBarUsePrimaryColor = - LocalContext.current.appPreferences.toolbarPrimaryColor && !isNightMode - val primaryColor = if (isNightMode) { - tonalPalette.primary0 - } else { - tonalPalette.primary100 - } - val backgroundColor = if (isNightMode) { - tonalPalette.neutralVariant100 - } else { - tonalPalette.neutralVariant0 - } + LocalContext.current.appPreferences.toolbarPrimaryColor + val primaryColor = tonalPalette.primary100 + val backgroundColor = tonalPalette.neutralVariant0 return if (topBarUsePrimaryColor) { primaryColor } else { @@ -208,20 +179,11 @@ private fun getDynamicOnTopBarActiveColor( @Composable private fun getDynamicTopBarSurfaceColor( tonalPalette: TonalPalette, - isNightMode: Boolean, ): Color { val topBarUsePrimaryColor = - LocalContext.current.appPreferences.toolbarPrimaryColor && !isNightMode - val primaryColor = if (isNightMode) { - tonalPalette.primary30 - } else { - tonalPalette.primary90 - } - val backgroundColor = if (isNightMode) { - tonalPalette.neutralVariant20 - } else { - tonalPalette.neutralVariant95 - } + LocalContext.current.appPreferences.toolbarPrimaryColor + val primaryColor = tonalPalette.primary90 + val backgroundColor = tonalPalette.neutralVariant95 return if (topBarUsePrimaryColor) { primaryColor } else { @@ -232,20 +194,11 @@ private fun getDynamicTopBarSurfaceColor( @Composable private fun getDynamicOnTopBarSurfaceColor( tonalPalette: TonalPalette, - isNightMode: Boolean, ): Color { val topBarUsePrimaryColor = - LocalContext.current.appPreferences.toolbarPrimaryColor && !isNightMode - val primaryColor = if (isNightMode) { - tonalPalette.primary90 - } else { - tonalPalette.primary10 - } - val backgroundColor = if (isNightMode) { - tonalPalette.neutralVariant70 - } else { - tonalPalette.neutralVariant30 - } + LocalContext.current.appPreferences.toolbarPrimaryColor + val primaryColor = tonalPalette.primary10 + val backgroundColor = tonalPalette.neutralVariant30 return if (topBarUsePrimaryColor) { primaryColor } else { @@ -262,12 +215,12 @@ private fun getLightDynamicColor(tonalPalette: TonalPalette): ExtendedColors { textOnPrimary = tonalPalette.primary90, accent = tonalPalette.secondary40, onAccent = tonalPalette.secondary100, - topBar = getDynamicTopBarColor(tonalPalette, false), - onTopBar = getDynamicOnTopBarColor(tonalPalette, false), - onTopBarSecondary = getDynamicOnTopBarSecondaryColor(tonalPalette, false), - onTopBarActive = getDynamicOnTopBarActiveColor(tonalPalette, false), - topBarSurface = getDynamicTopBarSurfaceColor(tonalPalette, false), - onTopBarSurface = getDynamicOnTopBarSurfaceColor(tonalPalette, false), + topBar = getDynamicTopBarColor(tonalPalette), + onTopBar = getDynamicOnTopBarColor(tonalPalette), + onTopBarSecondary = getDynamicOnTopBarSecondaryColor(tonalPalette), + onTopBarActive = getDynamicOnTopBarActiveColor(tonalPalette), + topBarSurface = getDynamicTopBarSurfaceColor(tonalPalette), + onTopBarSurface = getDynamicOnTopBarSurfaceColor(tonalPalette), bottomBar = tonalPalette.neutralVariant99, bottomBarSurface = tonalPalette.neutralVariant95, onBottomBarSurface = tonalPalette.neutralVariant30, @@ -297,12 +250,13 @@ private fun getDarkDynamicColor(tonalPalette: TonalPalette): ExtendedColors { textOnPrimary = tonalPalette.primary10, accent = tonalPalette.secondary80, onAccent = tonalPalette.secondary20, - topBar = getDynamicTopBarColor(tonalPalette, true), - onTopBar = getDynamicOnTopBarColor(tonalPalette, true), - onTopBarSecondary = getDynamicOnTopBarSecondaryColor(tonalPalette, true), - onTopBarActive = getDynamicOnTopBarActiveColor(tonalPalette, true), - topBarSurface = getDynamicTopBarSurfaceColor(tonalPalette, true), - onTopBarSurface = getDynamicOnTopBarSurfaceColor(tonalPalette, true), + topBar = tonalPalette.neutralVariant10, + onTopBar = tonalPalette.neutralVariant90, + onTopBarSecondary = tonalPalette.neutralVariant70, + onTopBarActive = tonalPalette.neutralVariant100, + topBarSurface = tonalPalette.neutralVariant20, + onTopBarSurface = tonalPalette.neutralVariant70, + bottomBar = tonalPalette.neutralVariant10, bottomBarSurface = tonalPalette.neutralVariant20, onBottomBarSurface = tonalPalette.neutralVariant70, text = tonalPalette.neutralVariant90, @@ -322,6 +276,41 @@ private fun getDarkDynamicColor(tonalPalette: TonalPalette): ExtendedColors { ) } +@Composable +private fun getBlackDarkDynamicColor(tonalPalette: TonalPalette): ExtendedColors { + return ExtendedColors( + theme = "dynamic", + isNightMode = true, + primary = tonalPalette.primary80, + textOnPrimary = tonalPalette.primary10, + accent = tonalPalette.secondary80, + onAccent = tonalPalette.secondary20, + topBar = tonalPalette.neutralVariant0, + onTopBar = tonalPalette.neutralVariant90, + onTopBarSecondary = tonalPalette.neutralVariant70, + onTopBarActive = tonalPalette.neutralVariant100, + topBarSurface = tonalPalette.neutralVariant10, + onTopBarSurface = tonalPalette.neutralVariant70, + bottomBar = tonalPalette.neutralVariant10, + bottomBarSurface = tonalPalette.neutralVariant10, + onBottomBarSurface = tonalPalette.neutralVariant70, + text = tonalPalette.neutralVariant90, + textSecondary = tonalPalette.neutralVariant70, + textDisabled = tonalPalette.neutralVariant50, + background = tonalPalette.neutralVariant0, + chip = tonalPalette.neutralVariant10, + onChip = tonalPalette.neutralVariant50, + unselected = tonalPalette.neutralVariant40, + card = tonalPalette.neutralVariant10, + floorCard = tonalPalette.neutralVariant10, + divider = tonalPalette.neutralVariant10, + shadow = tonalPalette.neutralVariant10, + indicator = tonalPalette.neutralVariant10, + windowBackground = tonalPalette.neutralVariant0, + placeholder = tonalPalette.neutralVariant50, + ) +} + @Composable private fun getThemeColorForTheme(theme: String): ExtendedColors { val context = LocalContext.current @@ -410,10 +399,12 @@ fun TiebaLiteTheme( } } - val extendedColors = if (isDynamicTheme && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - getDynamicColor(isDarkColorPalette, dynamicTonalPalette(context)) - } else { + val useDynamicTheme = isDynamicTheme && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S + + val extendedColors = if (!useDynamicTheme || ThemeUtil.isTranslucentTheme(theme)) { getThemeColorForTheme(theme) + } else { + getDynamicColor(theme, dynamicTonalPalette(context)) } val colors = getColorPalette(isDarkColorPalette, extendedColors)