feat: 动态取色夜间模式支持纯黑
This commit is contained in:
parent
9c1dd21f3c
commit
9d2640d8e9
|
|
@ -99,11 +99,16 @@ fun getColorPalette(
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun getDynamicColor(
|
private fun getDynamicColor(
|
||||||
isDarkColorPalette: Boolean,
|
theme: String,
|
||||||
tonalPalette: TonalPalette,
|
tonalPalette: TonalPalette,
|
||||||
): ExtendedColors {
|
): ExtendedColors {
|
||||||
|
val isDarkColorPalette = ThemeUtil.isNightMode(theme)
|
||||||
return if (isDarkColorPalette) {
|
return if (isDarkColorPalette) {
|
||||||
|
if (theme == ThemeUtil.THEME_AMOLED_DARK) {
|
||||||
|
getBlackDarkDynamicColor(tonalPalette)
|
||||||
|
} else {
|
||||||
getDarkDynamicColor(tonalPalette)
|
getDarkDynamicColor(tonalPalette)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
getLightDynamicColor(tonalPalette)
|
getLightDynamicColor(tonalPalette)
|
||||||
}
|
}
|
||||||
|
|
@ -112,20 +117,12 @@ private fun getDynamicColor(
|
||||||
@Composable
|
@Composable
|
||||||
private fun getDynamicTopBarColor(
|
private fun getDynamicTopBarColor(
|
||||||
tonalPalette: TonalPalette,
|
tonalPalette: TonalPalette,
|
||||||
isNightMode: Boolean,
|
isNightMode: Boolean = false,
|
||||||
): Color {
|
): Color {
|
||||||
val topBarUsePrimaryColor =
|
val topBarUsePrimaryColor =
|
||||||
LocalContext.current.appPreferences.toolbarPrimaryColor && !isNightMode
|
LocalContext.current.appPreferences.toolbarPrimaryColor
|
||||||
val primaryColor = if (isNightMode) {
|
val primaryColor = tonalPalette.primary40
|
||||||
tonalPalette.primary80
|
val backgroundColor = tonalPalette.neutralVariant99
|
||||||
} else {
|
|
||||||
tonalPalette.primary40
|
|
||||||
}
|
|
||||||
val backgroundColor = if (isNightMode) {
|
|
||||||
tonalPalette.neutralVariant10
|
|
||||||
} else {
|
|
||||||
tonalPalette.neutralVariant99
|
|
||||||
}
|
|
||||||
return if (topBarUsePrimaryColor) {
|
return if (topBarUsePrimaryColor) {
|
||||||
primaryColor
|
primaryColor
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -136,20 +133,11 @@ private fun getDynamicTopBarColor(
|
||||||
@Composable
|
@Composable
|
||||||
private fun getDynamicOnTopBarColor(
|
private fun getDynamicOnTopBarColor(
|
||||||
tonalPalette: TonalPalette,
|
tonalPalette: TonalPalette,
|
||||||
isNightMode: Boolean,
|
|
||||||
): Color {
|
): Color {
|
||||||
val topBarUsePrimaryColor =
|
val topBarUsePrimaryColor =
|
||||||
LocalContext.current.appPreferences.toolbarPrimaryColor && !isNightMode
|
LocalContext.current.appPreferences.toolbarPrimaryColor
|
||||||
val onPrimaryColor = if (isNightMode) {
|
val onPrimaryColor = tonalPalette.primary100
|
||||||
tonalPalette.primary20
|
val onBackgroundColor = tonalPalette.neutralVariant10
|
||||||
} else {
|
|
||||||
tonalPalette.primary100
|
|
||||||
}
|
|
||||||
val onBackgroundColor = if (isNightMode) {
|
|
||||||
tonalPalette.neutralVariant90
|
|
||||||
} else {
|
|
||||||
tonalPalette.neutralVariant10
|
|
||||||
}
|
|
||||||
return if (topBarUsePrimaryColor) {
|
return if (topBarUsePrimaryColor) {
|
||||||
onPrimaryColor
|
onPrimaryColor
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -160,20 +148,12 @@ private fun getDynamicOnTopBarColor(
|
||||||
@Composable
|
@Composable
|
||||||
private fun getDynamicOnTopBarSecondaryColor(
|
private fun getDynamicOnTopBarSecondaryColor(
|
||||||
tonalPalette: TonalPalette,
|
tonalPalette: TonalPalette,
|
||||||
isNightMode: Boolean,
|
isNightMode: Boolean = false,
|
||||||
): Color {
|
): Color {
|
||||||
val topBarUsePrimaryColor =
|
val topBarUsePrimaryColor =
|
||||||
LocalContext.current.appPreferences.toolbarPrimaryColor && !isNightMode
|
LocalContext.current.appPreferences.toolbarPrimaryColor
|
||||||
val primaryColor = if (isNightMode) {
|
val primaryColor = tonalPalette.primary80
|
||||||
tonalPalette.primary20
|
val backgroundColor = tonalPalette.neutralVariant40
|
||||||
} else {
|
|
||||||
tonalPalette.primary80
|
|
||||||
}
|
|
||||||
val backgroundColor = if (isNightMode) {
|
|
||||||
tonalPalette.neutralVariant70
|
|
||||||
} else {
|
|
||||||
tonalPalette.neutralVariant40
|
|
||||||
}
|
|
||||||
return if (topBarUsePrimaryColor) {
|
return if (topBarUsePrimaryColor) {
|
||||||
primaryColor
|
primaryColor
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -184,20 +164,11 @@ private fun getDynamicOnTopBarSecondaryColor(
|
||||||
@Composable
|
@Composable
|
||||||
private fun getDynamicOnTopBarActiveColor(
|
private fun getDynamicOnTopBarActiveColor(
|
||||||
tonalPalette: TonalPalette,
|
tonalPalette: TonalPalette,
|
||||||
isNightMode: Boolean,
|
|
||||||
): Color {
|
): Color {
|
||||||
val topBarUsePrimaryColor =
|
val topBarUsePrimaryColor =
|
||||||
LocalContext.current.appPreferences.toolbarPrimaryColor && !isNightMode
|
LocalContext.current.appPreferences.toolbarPrimaryColor
|
||||||
val primaryColor = if (isNightMode) {
|
val primaryColor = tonalPalette.primary100
|
||||||
tonalPalette.primary0
|
val backgroundColor = tonalPalette.neutralVariant0
|
||||||
} else {
|
|
||||||
tonalPalette.primary100
|
|
||||||
}
|
|
||||||
val backgroundColor = if (isNightMode) {
|
|
||||||
tonalPalette.neutralVariant100
|
|
||||||
} else {
|
|
||||||
tonalPalette.neutralVariant0
|
|
||||||
}
|
|
||||||
return if (topBarUsePrimaryColor) {
|
return if (topBarUsePrimaryColor) {
|
||||||
primaryColor
|
primaryColor
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -208,20 +179,11 @@ private fun getDynamicOnTopBarActiveColor(
|
||||||
@Composable
|
@Composable
|
||||||
private fun getDynamicTopBarSurfaceColor(
|
private fun getDynamicTopBarSurfaceColor(
|
||||||
tonalPalette: TonalPalette,
|
tonalPalette: TonalPalette,
|
||||||
isNightMode: Boolean,
|
|
||||||
): Color {
|
): Color {
|
||||||
val topBarUsePrimaryColor =
|
val topBarUsePrimaryColor =
|
||||||
LocalContext.current.appPreferences.toolbarPrimaryColor && !isNightMode
|
LocalContext.current.appPreferences.toolbarPrimaryColor
|
||||||
val primaryColor = if (isNightMode) {
|
val primaryColor = tonalPalette.primary90
|
||||||
tonalPalette.primary30
|
val backgroundColor = tonalPalette.neutralVariant95
|
||||||
} else {
|
|
||||||
tonalPalette.primary90
|
|
||||||
}
|
|
||||||
val backgroundColor = if (isNightMode) {
|
|
||||||
tonalPalette.neutralVariant20
|
|
||||||
} else {
|
|
||||||
tonalPalette.neutralVariant95
|
|
||||||
}
|
|
||||||
return if (topBarUsePrimaryColor) {
|
return if (topBarUsePrimaryColor) {
|
||||||
primaryColor
|
primaryColor
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -232,20 +194,11 @@ private fun getDynamicTopBarSurfaceColor(
|
||||||
@Composable
|
@Composable
|
||||||
private fun getDynamicOnTopBarSurfaceColor(
|
private fun getDynamicOnTopBarSurfaceColor(
|
||||||
tonalPalette: TonalPalette,
|
tonalPalette: TonalPalette,
|
||||||
isNightMode: Boolean,
|
|
||||||
): Color {
|
): Color {
|
||||||
val topBarUsePrimaryColor =
|
val topBarUsePrimaryColor =
|
||||||
LocalContext.current.appPreferences.toolbarPrimaryColor && !isNightMode
|
LocalContext.current.appPreferences.toolbarPrimaryColor
|
||||||
val primaryColor = if (isNightMode) {
|
val primaryColor = tonalPalette.primary10
|
||||||
tonalPalette.primary90
|
val backgroundColor = tonalPalette.neutralVariant30
|
||||||
} else {
|
|
||||||
tonalPalette.primary10
|
|
||||||
}
|
|
||||||
val backgroundColor = if (isNightMode) {
|
|
||||||
tonalPalette.neutralVariant70
|
|
||||||
} else {
|
|
||||||
tonalPalette.neutralVariant30
|
|
||||||
}
|
|
||||||
return if (topBarUsePrimaryColor) {
|
return if (topBarUsePrimaryColor) {
|
||||||
primaryColor
|
primaryColor
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -262,12 +215,12 @@ private fun getLightDynamicColor(tonalPalette: TonalPalette): ExtendedColors {
|
||||||
textOnPrimary = tonalPalette.primary90,
|
textOnPrimary = tonalPalette.primary90,
|
||||||
accent = tonalPalette.secondary40,
|
accent = tonalPalette.secondary40,
|
||||||
onAccent = tonalPalette.secondary100,
|
onAccent = tonalPalette.secondary100,
|
||||||
topBar = getDynamicTopBarColor(tonalPalette, false),
|
topBar = getDynamicTopBarColor(tonalPalette),
|
||||||
onTopBar = getDynamicOnTopBarColor(tonalPalette, false),
|
onTopBar = getDynamicOnTopBarColor(tonalPalette),
|
||||||
onTopBarSecondary = getDynamicOnTopBarSecondaryColor(tonalPalette, false),
|
onTopBarSecondary = getDynamicOnTopBarSecondaryColor(tonalPalette),
|
||||||
onTopBarActive = getDynamicOnTopBarActiveColor(tonalPalette, false),
|
onTopBarActive = getDynamicOnTopBarActiveColor(tonalPalette),
|
||||||
topBarSurface = getDynamicTopBarSurfaceColor(tonalPalette, false),
|
topBarSurface = getDynamicTopBarSurfaceColor(tonalPalette),
|
||||||
onTopBarSurface = getDynamicOnTopBarSurfaceColor(tonalPalette, false),
|
onTopBarSurface = getDynamicOnTopBarSurfaceColor(tonalPalette),
|
||||||
bottomBar = tonalPalette.neutralVariant99,
|
bottomBar = tonalPalette.neutralVariant99,
|
||||||
bottomBarSurface = tonalPalette.neutralVariant95,
|
bottomBarSurface = tonalPalette.neutralVariant95,
|
||||||
onBottomBarSurface = tonalPalette.neutralVariant30,
|
onBottomBarSurface = tonalPalette.neutralVariant30,
|
||||||
|
|
@ -297,12 +250,13 @@ private fun getDarkDynamicColor(tonalPalette: TonalPalette): ExtendedColors {
|
||||||
textOnPrimary = tonalPalette.primary10,
|
textOnPrimary = tonalPalette.primary10,
|
||||||
accent = tonalPalette.secondary80,
|
accent = tonalPalette.secondary80,
|
||||||
onAccent = tonalPalette.secondary20,
|
onAccent = tonalPalette.secondary20,
|
||||||
topBar = getDynamicTopBarColor(tonalPalette, true),
|
topBar = tonalPalette.neutralVariant10,
|
||||||
onTopBar = getDynamicOnTopBarColor(tonalPalette, true),
|
onTopBar = tonalPalette.neutralVariant90,
|
||||||
onTopBarSecondary = getDynamicOnTopBarSecondaryColor(tonalPalette, true),
|
onTopBarSecondary = tonalPalette.neutralVariant70,
|
||||||
onTopBarActive = getDynamicOnTopBarActiveColor(tonalPalette, true),
|
onTopBarActive = tonalPalette.neutralVariant100,
|
||||||
topBarSurface = getDynamicTopBarSurfaceColor(tonalPalette, true),
|
topBarSurface = tonalPalette.neutralVariant20,
|
||||||
onTopBarSurface = getDynamicOnTopBarSurfaceColor(tonalPalette, true),
|
onTopBarSurface = tonalPalette.neutralVariant70,
|
||||||
|
bottomBar = tonalPalette.neutralVariant10,
|
||||||
bottomBarSurface = tonalPalette.neutralVariant20,
|
bottomBarSurface = tonalPalette.neutralVariant20,
|
||||||
onBottomBarSurface = tonalPalette.neutralVariant70,
|
onBottomBarSurface = tonalPalette.neutralVariant70,
|
||||||
text = tonalPalette.neutralVariant90,
|
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
|
@Composable
|
||||||
private fun getThemeColorForTheme(theme: String): ExtendedColors {
|
private fun getThemeColorForTheme(theme: String): ExtendedColors {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
|
|
@ -410,10 +399,12 @@ fun TiebaLiteTheme(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val extendedColors = if (isDynamicTheme && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
val useDynamicTheme = isDynamicTheme && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
|
||||||
getDynamicColor(isDarkColorPalette, dynamicTonalPalette(context))
|
|
||||||
} else {
|
val extendedColors = if (!useDynamicTheme || ThemeUtil.isTranslucentTheme(theme)) {
|
||||||
getThemeColorForTheme(theme)
|
getThemeColorForTheme(theme)
|
||||||
|
} else {
|
||||||
|
getDynamicColor(theme, dynamicTonalPalette(context))
|
||||||
}
|
}
|
||||||
|
|
||||||
val colors = getColorPalette(isDarkColorPalette, extendedColors)
|
val colors = getColorPalette(isDarkColorPalette, extendedColors)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue