- Manger: Fix the device model acquisition logic

- Manger: Update card default shadow and transparency settings, optimize theme color scheme

- Manger: Optimize dark color mode style

Signed-off-by:ShirkNeko<ShirkNeko@2773800761@qq.com>
This commit is contained in:
ShirkNeko
2025-03-23 00:06:03 +08:00
parent ff99ab8e62
commit 7265d5aacd
7 changed files with 110 additions and 83 deletions

View File

@@ -489,7 +489,7 @@ private fun InfoCard() {
Spacer(Modifier.height(16.dp)) Spacer(Modifier.height(16.dp))
val deviceModel = Build.MODEL val deviceModel = Build.DEVICE
InfoCardItem(stringResource(R.string.home_device_model), deviceModel) InfoCardItem(stringResource(R.string.home_device_model), deviceModel)

View File

@@ -112,6 +112,8 @@ import java.io.BufferedReader
import java.io.InputStreamReader import java.io.InputStreamReader
import java.util.zip.ZipInputStream import java.util.zip.ZipInputStream
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.material3.FloatingActionButtonDefaults
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Destination<RootGraph> @Destination<RootGraph>
@@ -353,16 +355,20 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
icon = { icon = {
Icon( Icon(
imageVector = Icons.Filled.Add, imageVector = Icons.Filled.Add,
contentDescription = moduleInstall, contentDescription = moduleInstall
tint = buttonTextColor
) )
}, },
text = { text = {
Text( Text(
text = moduleInstall, text = moduleInstall
color = buttonTextColor
) )
} },
elevation = FloatingActionButtonDefaults.elevation(
defaultElevation = 0.dp,
pressedElevation = 0.dp,
focusedElevation = 0.dp,
hoveredElevation = 0.dp
)
) )
} }
}, },

View File

@@ -119,7 +119,7 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
// 初始化卡片配置 // 初始化卡片配置
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
CardConfig.apply { CardConfig.apply {
cardAlpha = prefs.getFloat("card_alpha", 0.85f) cardAlpha = prefs.getFloat("card_alpha", 0.65f)
cardElevation = if (prefs.getBoolean("custom_background_enabled", false)) 0.dp else CardConfig.defaultElevation cardElevation = if (prefs.getBoolean("custom_background_enabled", false)) 0.dp else CardConfig.defaultElevation
} }
} }
@@ -133,7 +133,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
stringResource(R.string.color_orange) to ThemeColors.Orange, stringResource(R.string.color_orange) to ThemeColors.Orange,
stringResource(R.string.color_pink) to ThemeColors.Pink, stringResource(R.string.color_pink) to ThemeColors.Pink,
stringResource(R.string.color_gray) to ThemeColors.Gray, stringResource(R.string.color_gray) to ThemeColors.Gray,
stringResource(R.string.color_ivory) to ThemeColors.Ivory
) )
var showThemeColorDialog by remember { mutableStateOf(false) } var showThemeColorDialog by remember { mutableStateOf(false) }
@@ -262,7 +261,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
is ThemeColors.Orange -> stringResource(R.string.color_orange) is ThemeColors.Orange -> stringResource(R.string.color_orange)
is ThemeColors.Pink -> stringResource(R.string.color_pink) is ThemeColors.Pink -> stringResource(R.string.color_pink)
is ThemeColors.Gray -> stringResource(R.string.color_gray) is ThemeColors.Gray -> stringResource(R.string.color_gray)
is ThemeColors.Ivory -> stringResource(R.string.color_ivory)
else -> stringResource(R.string.color_default) else -> stringResource(R.string.color_default)
} }
Text(currentThemeName) Text(currentThemeName)
@@ -289,7 +287,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
ThemeColors.Orange -> "orange" ThemeColors.Orange -> "orange"
ThemeColors.Pink -> "pink" ThemeColors.Pink -> "pink"
ThemeColors.Gray -> "gray" ThemeColors.Gray -> "gray"
ThemeColors.Ivory -> "ivory"
else -> "default" else -> "default"
}) })
showThemeColorDialog = false showThemeColorDialog = false
@@ -446,9 +443,9 @@ private fun getSliderColors(cardAlpha: Float, useCustomColors: Boolean = false):
// 使用自定义主题色时 // 使用自定义主题色时
useCustomColors -> { useCustomColors -> {
SliderDefaults.colors( SliderDefaults.colors(
activeTrackColor = theme.getCustomSliderActiveColor(), activeTrackColor = Color.White,
inactiveTrackColor = theme.getCustomSliderInactiveColor(), inactiveTrackColor = theme.getCustomSliderInactiveColor(),
thumbColor = theme.Primary thumbColor = Color.White
) )
} }
else -> { else -> {

View File

@@ -24,6 +24,7 @@ import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExtendedFloatingActionButton import androidx.compose.material3.ExtendedFloatingActionButton
import androidx.compose.material3.FloatingActionButtonDefaults
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.ListItem import androidx.compose.material3.ListItem
@@ -148,6 +149,12 @@ fun AppProfileTemplateScreen(
}, },
icon = { Icon(Icons.Filled.Add, null) }, icon = { Icon(Icons.Filled.Add, null) },
text = { Text(stringResource(id = R.string.app_profile_template_create)) }, text = { Text(stringResource(id = R.string.app_profile_template_create)) },
elevation = FloatingActionButtonDefaults.elevation(
defaultElevation = 0.dp,
pressedElevation = 0.dp,
focusedElevation = 0.dp,
hoveredElevation = 0.dp
)
) )
}, },
contentWindowInsets = WindowInsets.safeDrawing.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal) contentWindowInsets = WindowInsets.safeDrawing.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal)

View File

@@ -12,10 +12,11 @@ import androidx.compose.ui.unit.dp
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
object CardConfig { object CardConfig {
val defaultElevation: Dp = 2.dp val defaultElevation: Dp = 0.dp
var cardAlpha by mutableStateOf(1f) var cardAlpha by mutableStateOf(1f)
var cardElevation by mutableStateOf(defaultElevation) var cardElevation by mutableStateOf(defaultElevation)
var isShadowEnabled by mutableStateOf(true)
fun save(context: Context) { fun save(context: Context) {
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE) val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
@@ -31,12 +32,23 @@ object CardConfig {
cardAlpha = prefs.getFloat("card_alpha", 1f) cardAlpha = prefs.getFloat("card_alpha", 1f)
cardElevation = if (prefs.getBoolean("custom_background_enabled", false)) 0.dp else defaultElevation cardElevation = if (prefs.getBoolean("custom_background_enabled", false)) 0.dp else defaultElevation
} }
fun updateShadowEnabled(enabled: Boolean) {
isShadowEnabled = enabled
cardElevation = if (enabled) defaultElevation else 0.dp
}
fun setDarkModeDefaults() {
cardAlpha = 0.5f
cardElevation = 0.dp
}
} }
@Composable @Composable
fun getCardColors(originalColor: Color) = CardDefaults.elevatedCardColors( fun getCardColors(originalColor: Color) = CardDefaults.elevatedCardColors(
containerColor = originalColor.copy(alpha = CardConfig.cardAlpha), containerColor = originalColor.copy(alpha = CardConfig.cardAlpha),
contentColor = if (originalColor.luminance() > 0.5) Color.Black else Color.White contentColor = if (originalColor.luminance() > 0.5) Color.Black else Color.White
) )
fun getCardElevation() = CardConfig.cardElevation fun getCardElevation() = CardConfig.cardElevation

View File

@@ -27,12 +27,12 @@ sealed class ThemeColors {
override val OnPrimary = Color(0xFFFFFFFF) override val OnPrimary = Color(0xFFFFFFFF)
override val OnSecondary = Color(0xFFFFFFFF) override val OnSecondary = Color(0xFFFFFFFF)
override val OnTertiary = Color(0xFFFFFFFF) override val OnTertiary = Color(0xFFFFFFFF)
override val PrimaryContainer = Color(0xFFFFFBE9) override val PrimaryContainer = Color(0xFFFFF7D6)
override val SecondaryContainer = Color(0xFFFFE6B3) override val SecondaryContainer = Color(0xFFFFE6B3)
override val TertiaryContainer = Color(0xFFD7CCC8) override val TertiaryContainer = Color(0xFFD7CCC8)
override val OnPrimaryContainer = Color(0xFF000000) override val OnPrimaryContainer = Color(0xFF1A1600)
override val OnSecondaryContainer = Color(0xFF000000) override val OnSecondaryContainer = Color(0xFF1A1100)
override val OnTertiaryContainer = Color(0xFF000000) override val OnTertiaryContainer = Color(0xFF1A1717)
} }
// Blue Theme // Blue Theme
@@ -43,12 +43,12 @@ sealed class ThemeColors {
override val OnPrimary = Color(0xFFFFFFFF) override val OnPrimary = Color(0xFFFFFFFF)
override val OnSecondary = Color(0xFFFFFFFF) override val OnSecondary = Color(0xFFFFFFFF)
override val OnTertiary = Color(0xFFFFFFFF) override val OnTertiary = Color(0xFFFFFFFF)
override val PrimaryContainer = Color(0xFFE3F2FD) override val PrimaryContainer = Color(0xFFCBE6FC)
override val SecondaryContainer = Color(0xFFBBDEFB) override val SecondaryContainer = Color(0xFFBBDEFB)
override val TertiaryContainer = Color(0xFF90CAF9) override val TertiaryContainer = Color(0xFF90CAF9)
override val OnPrimaryContainer = Color(0xFF000000) override val OnPrimaryContainer = Color(0xFF0A1A2E)
override val OnSecondaryContainer = Color(0xFF000000) override val OnSecondaryContainer = Color(0xFF0A192D)
override val OnTertiaryContainer = Color(0xFF000000) override val OnTertiaryContainer = Color(0xFF071B3D)
} }
// Green Theme // Green Theme
@@ -59,12 +59,12 @@ sealed class ThemeColors {
override val OnPrimary = Color(0xFFFFFFFF) override val OnPrimary = Color(0xFFFFFFFF)
override val OnSecondary = Color(0xFFFFFFFF) override val OnSecondary = Color(0xFFFFFFFF)
override val OnTertiary = Color(0xFFFFFFFF) override val OnTertiary = Color(0xFFFFFFFF)
override val PrimaryContainer = Color(0xFFE8F5E9) override val PrimaryContainer = Color(0xFFC8E6C9)
override val SecondaryContainer = Color(0xFFC8E6C9) override val SecondaryContainer = Color(0xFFA5D6A7)
override val TertiaryContainer = Color(0xFFA5D6A7) override val TertiaryContainer = Color(0xFF81C784)
override val OnPrimaryContainer = Color(0xFF000000) override val OnPrimaryContainer = Color(0xFF0A1F0B)
override val OnSecondaryContainer = Color(0xFF000000) override val OnSecondaryContainer = Color(0xFF0A1D0B)
override val OnTertiaryContainer = Color(0xFF000000) override val OnTertiaryContainer = Color(0xFF071F09)
} }
// Purple Theme // Purple Theme
@@ -75,12 +75,12 @@ sealed class ThemeColors {
override val OnPrimary = Color(0xFFFFFFFF) override val OnPrimary = Color(0xFFFFFFFF)
override val OnSecondary = Color(0xFFFFFFFF) override val OnSecondary = Color(0xFFFFFFFF)
override val OnTertiary = Color(0xFFFFFFFF) override val OnTertiary = Color(0xFFFFFFFF)
override val PrimaryContainer = Color(0xFFF3E5F5) override val PrimaryContainer = Color(0xFFE1BEE7)
override val SecondaryContainer = Color(0xFFE1BEE7) override val SecondaryContainer = Color(0xFFCE93D8)
override val TertiaryContainer = Color(0xFFCE93D8) override val TertiaryContainer = Color(0xFFB39DDB)
override val OnPrimaryContainer = Color(0xFF000000) override val OnPrimaryContainer = Color(0xFF1F0A23)
override val OnSecondaryContainer = Color(0xFF000000) override val OnSecondaryContainer = Color(0xFF1C0A21)
override val OnTertiaryContainer = Color(0xFF000000) override val OnTertiaryContainer = Color(0xFF12071C)
} }
// Orange Theme // Orange Theme
@@ -91,12 +91,12 @@ sealed class ThemeColors {
override val OnPrimary = Color(0xFFFFFFFF) override val OnPrimary = Color(0xFFFFFFFF)
override val OnSecondary = Color(0xFFFFFFFF) override val OnSecondary = Color(0xFFFFFFFF)
override val OnTertiary = Color(0xFFFFFFFF) override val OnTertiary = Color(0xFFFFFFFF)
override val PrimaryContainer = Color(0xFFFFF3E0) override val PrimaryContainer = Color(0xFFFFE0B2)
override val SecondaryContainer = Color(0xFFFFE0B2) override val SecondaryContainer = Color(0xFFFFCC80)
override val TertiaryContainer = Color(0xFFFFCC80) override val TertiaryContainer = Color(0xFFFFB74D)
override val OnPrimaryContainer = Color(0xFF000000) override val OnPrimaryContainer = Color(0xFF1A1100)
override val OnSecondaryContainer = Color(0xFF000000) override val OnSecondaryContainer = Color(0xFF1A1000)
override val OnTertiaryContainer = Color(0xFF000000) override val OnTertiaryContainer = Color(0xFF1A0B00)
} }
// Pink Theme // Pink Theme
@@ -107,12 +107,12 @@ sealed class ThemeColors {
override val OnPrimary = Color(0xFFFFFFFF) override val OnPrimary = Color(0xFFFFFFFF)
override val OnSecondary = Color(0xFFFFFFFF) override val OnSecondary = Color(0xFFFFFFFF)
override val OnTertiary = Color(0xFFFFFFFF) override val OnTertiary = Color(0xFFFFFFFF)
override val PrimaryContainer = Color(0xFFFCE4EC) override val PrimaryContainer = Color(0xFFF8BBD0)
override val SecondaryContainer = Color(0xFFF8BBD0) override val SecondaryContainer = Color(0xFFF48FB1)
override val TertiaryContainer = Color(0xFFF48FB1) override val TertiaryContainer = Color(0xFFE91E63)
override val OnPrimaryContainer = Color(0xFF000000) override val OnPrimaryContainer = Color(0xFF2E0A14)
override val OnSecondaryContainer = Color(0xFF000000) override val OnSecondaryContainer = Color(0xFF2B0A13)
override val OnTertiaryContainer = Color(0xFF000000) override val OnTertiaryContainer = Color(0xFF1C0311)
} }
// Gray Theme // Gray Theme
@@ -126,25 +126,9 @@ sealed class ThemeColors {
override val PrimaryContainer = Color(0xFFEEEEEE) override val PrimaryContainer = Color(0xFFEEEEEE)
override val SecondaryContainer = Color(0xFFE0E0E0) override val SecondaryContainer = Color(0xFFE0E0E0)
override val TertiaryContainer = Color(0xFFBDBDBD) override val TertiaryContainer = Color(0xFFBDBDBD)
override val OnPrimaryContainer = Color(0xFF000000) override val OnPrimaryContainer = Color(0xFF1A1A1A)
override val OnSecondaryContainer = Color(0xFF000000) override val OnSecondaryContainer = Color(0xFF171717)
override val OnTertiaryContainer = Color(0xFF000000) override val OnTertiaryContainer = Color(0xFF141414)
}
// Ivory Theme
object Ivory : ThemeColors() {
override val Primary = Color(0xFFFAF0E6)
override val Secondary = Color(0xFFFFF0E6)
override val Tertiary = Color(0xFFD7CCC8)
override val OnPrimary = Color(0xFFFFFFFF)
override val OnSecondary = Color(0xFFFFFFFF)
override val OnTertiary = Color(0xFFFFFFFF)
override val PrimaryContainer = Color(0xFFFFFAE3)
override val SecondaryContainer = Color(0xFFFFF0E6)
override val TertiaryContainer = Color(0xFFFFF0E6)
override val OnPrimaryContainer = Color(0xFF000000)
override val OnSecondaryContainer = Color(0xFF000000)
override val OnTertiaryContainer = Color(0xFF000000)
} }
companion object { companion object {
@@ -155,7 +139,6 @@ sealed class ThemeColors {
"orange" -> Orange "orange" -> Orange
"pink" -> Pink "pink" -> Pink
"gray" -> Gray "gray" -> Gray
"ivory" -> Ivory
else -> Default else -> Default
} }
} }

View File

@@ -39,22 +39,24 @@ object ThemeConfig {
@Composable @Composable
private fun getDarkColorScheme() = darkColorScheme( private fun getDarkColorScheme() = darkColorScheme(
primary = ThemeConfig.currentTheme.Primary, primary = ThemeConfig.currentTheme.Primary.copy(alpha = 0.8f),
onPrimary = ThemeConfig.currentTheme.OnPrimary, onPrimary = Color.White,
primaryContainer = ThemeConfig.currentTheme.PrimaryContainer, primaryContainer = ThemeConfig.currentTheme.PrimaryContainer.copy(alpha = 0.15f),
onPrimaryContainer = Color.White, onPrimaryContainer = Color.White,
secondary = ThemeConfig.currentTheme.Secondary, secondary = ThemeConfig.currentTheme.Secondary.copy(alpha = 0.8f),
onSecondary = ThemeConfig.currentTheme.OnSecondary, onSecondary = Color.White,
secondaryContainer = ThemeConfig.currentTheme.SecondaryContainer, secondaryContainer = ThemeConfig.currentTheme.SecondaryContainer.copy(alpha = 0.15f),
onSecondaryContainer = Color.White, onSecondaryContainer = Color.White,
tertiary = ThemeConfig.currentTheme.Tertiary, tertiary = ThemeConfig.currentTheme.Tertiary.copy(alpha = 0.8f),
onTertiary = ThemeConfig.currentTheme.OnTertiary, onTertiary = Color.White,
tertiaryContainer = ThemeConfig.currentTheme.TertiaryContainer, tertiaryContainer = ThemeConfig.currentTheme.TertiaryContainer.copy(alpha = 0.15f),
onTertiaryContainer = Color.White, onTertiaryContainer = Color.White,
background = Color.Transparent,
surface = Color.Transparent,
onBackground = Color.White, onBackground = Color.White,
onSurface = Color.White onSurface = Color.White,
surfaceVariant = Color(0xFF2F2F2F),
onSurfaceVariant = Color.White.copy(alpha = 0.78f),
outline = Color.White.copy(alpha = 0.12f),
outlineVariant = Color.White.copy(alpha = 0.12f)
) )
@Composable @Composable
@@ -72,7 +74,13 @@ private fun getLightColorScheme() = lightColorScheme(
tertiaryContainer = ThemeConfig.currentTheme.TertiaryContainer, tertiaryContainer = ThemeConfig.currentTheme.TertiaryContainer,
onTertiaryContainer = ThemeConfig.currentTheme.OnTertiaryContainer, onTertiaryContainer = ThemeConfig.currentTheme.OnTertiaryContainer,
background = Color.Transparent, background = Color.Transparent,
surface = Color.Transparent surface = Color.Transparent,
onBackground = Color.Black,
onSurface = Color.Black,
surfaceVariant = Color(0xFFF5F5F5),
onSurfaceVariant = Color.Black.copy(alpha = 0.78f),
outline = Color.Black.copy(alpha = 0.12f),
outlineVariant = Color.Black.copy(alpha = 0.12f)
) )
// 复制图片到应用内部存储 // 复制图片到应用内部存储
@@ -119,7 +127,13 @@ fun KernelSUTheme(
background = Color.Transparent, background = Color.Transparent,
surface = Color.Transparent, surface = Color.Transparent,
onBackground = Color.White, onBackground = Color.White,
onSurface = Color.White onSurface = Color.White,
onPrimary = Color.White,
onSecondary = Color.White,
onTertiary = Color.White,
onPrimaryContainer = Color.White,
onSecondaryContainer = Color.White,
onTertiaryContainer = Color.White
) else dynamicLightColorScheme(context).copy( ) else dynamicLightColorScheme(context).copy(
background = Color.Transparent, background = Color.Transparent,
surface = Color.Transparent surface = Color.Transparent
@@ -129,6 +143,17 @@ fun KernelSUTheme(
else -> getLightColorScheme() else -> getLightColorScheme()
} }
val isDarkModeWithCustomBackground = darkTheme && ThemeConfig.customBackgroundUri != null
if (darkTheme && !dynamicColor) {
CardConfig.setDarkModeDefaults()
} else {
CardConfig.cardAlpha = 1f
CardConfig.cardElevation = CardConfig.defaultElevation
}
CardConfig.updateShadowEnabled(!isDarkModeWithCustomBackground)
MaterialTheme( MaterialTheme(
colorScheme = colorScheme, colorScheme = colorScheme,
typography = Typography typography = Typography
@@ -202,7 +227,6 @@ fun KernelSUTheme(
} }
} }
fun Context.saveCustomBackground(uri: Uri?) { fun Context.saveCustomBackground(uri: Uri?) {
val newUri = uri?.let { copyImageToInternalStorage(it) } val newUri = uri?.let { copyImageToInternalStorage(it) }
getSharedPreferences("theme_prefs", Context.MODE_PRIVATE) getSharedPreferences("theme_prefs", Context.MODE_PRIVATE)
@@ -253,7 +277,6 @@ fun Context.saveThemeColors(themeName: String) {
"orange" -> ThemeColors.Orange "orange" -> ThemeColors.Orange
"pink" -> ThemeColors.Pink "pink" -> ThemeColors.Pink
"gray" -> ThemeColors.Gray "gray" -> ThemeColors.Gray
"ivory" -> ThemeColors.Ivory
else -> ThemeColors.Default else -> ThemeColors.Default
} }
} }
@@ -269,7 +292,6 @@ fun Context.loadThemeColors() {
"orange" -> ThemeColors.Orange "orange" -> ThemeColors.Orange
"pink" -> ThemeColors.Pink "pink" -> ThemeColors.Pink
"gray" -> ThemeColors.Gray "gray" -> ThemeColors.Gray
"ivory" -> ThemeColors.Ivory
else -> ThemeColors.Default else -> ThemeColors.Default
} }
} }