Add card darkness adjustment function

- Updated some string translations
This commit is contained in:
ShirkNeko
2025-05-14 19:55:11 +08:00
parent b3b7fa6f4d
commit 4d59ce435e
7 changed files with 155 additions and 29 deletions

View File

@@ -40,6 +40,7 @@ import androidx.compose.material.icons.filled.DarkMode
import androidx.compose.material.icons.filled.KeyboardArrowDown
import androidx.compose.material.icons.filled.KeyboardArrowUp
import androidx.compose.material.icons.filled.Language
import androidx.compose.material.icons.filled.LightMode
import androidx.compose.material.icons.filled.Opacity
import androidx.compose.material.icons.filled.Palette
import androidx.compose.material.icons.filled.Security
@@ -345,6 +346,7 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
// 卡片配置状态
var cardAlpha by rememberSaveable { mutableFloatStateOf(CardConfig.cardAlpha) }
var cardDim by rememberSaveable { mutableFloatStateOf(CardConfig.cardDim) }
var isCustomBackgroundEnabled by rememberSaveable {
mutableStateOf(ThemeConfig.customBackgroundUri != null)
}
@@ -393,6 +395,7 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
// 加载设置
CardConfig.load(context)
cardAlpha = CardConfig.cardAlpha
cardDim = CardConfig.cardDim
isCustomBackgroundEnabled = ThemeConfig.customBackgroundUri != null
// 设置主题模式
@@ -699,10 +702,13 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
isCustomBackgroundEnabled = false
CardConfig.cardElevation
CardConfig.cardAlpha = 1f
CardConfig.cardDim = 0f
CardConfig.isCustomAlphaSet = false
CardConfig.isCustomDimSet = false
CardConfig.isCustomBackgroundEnabled = false
saveCardConfig(context)
cardAlpha = 1f
cardDim = 0f
// 重置其他相关设置
ThemeConfig.needsResetOnThemeChange = true
@@ -730,7 +736,7 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
)
)
// 透明度 Slider
// 透明度和亮度调节滑动条
AnimatedVisibility(
visible = ThemeConfig.customBackgroundUri != null,
enter = fadeIn() + expandVertically(),
@@ -738,6 +744,7 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
modifier = Modifier.padding(horizontal = 32.dp)
) {
Column(modifier = Modifier.padding(vertical = 8.dp)) {
// 透明度滑动条
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.padding(bottom = 4.dp)
@@ -785,6 +792,55 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
inactiveTrackColor = MaterialTheme.colorScheme.surfaceVariant
)
)
// 亮度调节滑动条
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.padding(top = 16.dp, bottom = 4.dp)
) {
Icon(
Icons.Filled.LightMode,
contentDescription = null,
modifier = Modifier.size(20.dp),
tint = MaterialTheme.colorScheme.primary
)
Spacer(modifier = Modifier.width(8.dp))
Text(
text = stringResource(R.string.settings_card_dim),
style = MaterialTheme.typography.titleSmall
)
Spacer(modifier = Modifier.weight(1f))
Text(
text = "${(cardDim * 100).roundToInt()}%",
style = MaterialTheme.typography.labelMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant
)
}
Slider(
value = cardDim,
onValueChange = { newValue ->
cardDim = newValue
CardConfig.cardDim = newValue
CardConfig.isCustomDimSet = true
prefs.edit {
putBoolean("is_custom_dim_set", true)
putFloat("card_dim", newValue)
}
},
onValueChangeFinished = {
coroutineScope.launch(Dispatchers.IO) {
saveCardConfig(context)
}
},
valueRange = 0f..1f,
steps = 20,
colors = SliderDefaults.colors(
thumbColor = MaterialTheme.colorScheme.primary,
activeTrackColor = MaterialTheme.colorScheme.primary,
inactiveTrackColor = MaterialTheme.colorScheme.surfaceVariant
)
)
}
}
}
@@ -1144,6 +1200,9 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
if (!CardConfig.isCustomAlphaSet) {
CardConfig.cardAlpha = 1f
}
if (!CardConfig.isCustomDimSet) {
CardConfig.cardDim = 0.5f
}
CardConfig.save(context)
}
1 -> { // 浅色
@@ -1153,6 +1212,9 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
if (!CardConfig.isCustomAlphaSet) {
CardConfig.cardAlpha = 1f
}
if (!CardConfig.isCustomDimSet) {
CardConfig.cardDim = 0f
}
CardConfig.save(context)
}
0 -> { // 跟随系统

View File

@@ -5,6 +5,7 @@ import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.CardDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.graphics.Color
@@ -16,10 +17,15 @@ object CardConfig {
val settingElevation: Dp = 4.dp
val customBackgroundElevation: Dp = 0.dp
var cardAlpha by mutableStateOf(1f)
// 卡片透明度
var cardAlpha by mutableFloatStateOf(1f)
// 卡片亮度
var cardDim by mutableFloatStateOf(0f)
// 卡片阴影
var cardElevation by mutableStateOf(settingElevation)
var isShadowEnabled by mutableStateOf(true)
var isCustomAlphaSet by mutableStateOf(false)
var isCustomDimSet by mutableStateOf(false)
var isUserDarkModeEnabled by mutableStateOf(false)
var isUserLightModeEnabled by mutableStateOf(false)
var isCustomBackgroundEnabled by mutableStateOf(false)
@@ -31,9 +37,11 @@ object CardConfig {
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
prefs.edit().apply {
putFloat("card_alpha", cardAlpha)
putFloat("card_dim", cardDim)
putBoolean("custom_background_enabled", isCustomBackgroundEnabled)
putBoolean("is_shadow_enabled", isShadowEnabled)
putBoolean("is_custom_alpha_set", isCustomAlphaSet)
putBoolean("is_custom_dim_set", isCustomDimSet)
putBoolean("is_user_dark_mode_enabled", isUserDarkModeEnabled)
putBoolean("is_user_light_mode_enabled", isUserLightModeEnabled)
apply()
@@ -46,9 +54,11 @@ object CardConfig {
fun load(context: Context) {
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
cardAlpha = prefs.getFloat("card_alpha", 1f)
cardDim = prefs.getFloat("card_dim", 0f)
isCustomBackgroundEnabled = prefs.getBoolean("custom_background_enabled", false)
isShadowEnabled = prefs.getBoolean("is_shadow_enabled", true)
isCustomAlphaSet = prefs.getBoolean("is_custom_alpha_set", false)
isCustomDimSet = prefs.getBoolean("is_custom_dim_set", false)
isUserDarkModeEnabled = prefs.getBoolean("is_user_dark_mode_enabled", false)
isUserLightModeEnabled = prefs.getBoolean("is_user_light_mode_enabled", false)
updateShadowEnabled(isShadowEnabled)
@@ -72,9 +82,25 @@ object CardConfig {
* 设置深色模式默认值
*/
fun setDarkModeDefaults() {
if (!isCustomAlphaSet) {
cardAlpha = 0.70f
}
if (!isCustomDimSet) {
cardDim = 0.5f
}
updateShadowEnabled(isShadowEnabled)
}
/**
* 设置浅色模式默认值
*/
fun setLightModeDefaults() {
if (!isCustomAlphaSet) {
cardAlpha = 1f
}
if (!isCustomDimSet) {
cardDim = 0f
}
updateShadowEnabled(isShadowEnabled)
}
}
@@ -104,4 +130,4 @@ private fun determineContentColor(originalColor: Color): Color {
isDarkTheme -> Color.White
else -> if (originalColor.luminance() > 0.5f) Color.Black else Color.White
}
}
}

View File

@@ -110,6 +110,9 @@ fun KernelSUTheme(
if (!isCustomAlphaSet) {
cardAlpha = if (systemIsDark) 0.50f else 1f
}
if (!isCustomDimSet) {
cardDim = if (systemIsDark) 0.5f else 0f
}
save(context)
}
}
@@ -148,6 +151,8 @@ fun KernelSUTheme(
val isDarkModeWithCustomBackground = darkTheme && ThemeConfig.customBackgroundUri != null
if (darkTheme && !dynamicColor) {
CardConfig.setDarkModeDefaults()
} else if (!darkTheme && !dynamicColor) {
CardConfig.setLightModeDefaults()
}
CardConfig.updateShadowEnabled(!isDarkModeWithCustomBackground)
@@ -199,6 +204,9 @@ fun KernelSUTheme(
}
}
// 计算适用的暗化值
val dimFactor = CardConfig.cardDim
MaterialTheme(
colorScheme = colorScheme,
typography = Typography
@@ -234,13 +242,13 @@ fun KernelSUTheme(
)
}
// 亮度调节层
// 亮度调节层 (根据cardDim调整)
Box(
modifier = Modifier
.fillMaxSize()
.background(
if (darkTheme) Color.Black.copy(alpha = 0.6f)
else Color.White.copy(alpha = 0.1f)
if (darkTheme) Color.Black.copy(alpha = 0.6f + dimFactor * 0.3f)
else Color.White.copy(alpha = 0.1f + dimFactor * 0.2f)
)
)
@@ -252,8 +260,8 @@ fun KernelSUTheme(
Brush.radialGradient(
colors = listOf(
Color.Transparent,
if (darkTheme) Color.Black.copy(alpha = 0.5f)
else Color.Black.copy(alpha = 0.2f)
if (darkTheme) Color.Black.copy(alpha = 0.5f + dimFactor * 0.2f)
else Color.Black.copy(alpha = 0.2f + dimFactor * 0.1f)
),
radius = 1200f
)