diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/MainActivity.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/MainActivity.kt
index 09d00965..9863d993 100644
--- a/manager/app/src/main/java/com/sukisu/ultra/ui/MainActivity.kt
+++ b/manager/app/src/main/java/com/sukisu/ultra/ui/MainActivity.kt
@@ -33,6 +33,7 @@ import com.sukisu.ultra.Natives
import com.sukisu.ultra.ksuApp
import com.sukisu.ultra.ui.screen.BottomBarDestination
import com.sukisu.ultra.ui.theme.*
+import com.sukisu.ultra.ui.theme.CardConfig.cardAlpha
import com.sukisu.ultra.ui.util.*
class MainActivity : ComponentActivity() {
@@ -138,78 +139,29 @@ class MainActivity : ComponentActivity() {
}
}
+@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun BottomBar(navController: NavHostController) {
val navigator = navController.rememberDestinationsNavigator()
val isManager = Natives.becomeManager(ksuApp.packageName)
val fullFeatured = isManager && !Natives.requireNewKernel() && rootAvailable()
val kpmVersion = getKpmVersion()
+ val containerColor = MaterialTheme.colorScheme.surfaceVariant
+ val cardColor = MaterialTheme.colorScheme.surfaceVariant
- val containerColor = MaterialTheme.colorScheme.surfaceContainer
- val selectedColor = MaterialTheme.colorScheme.primary
- val unselectedColor = MaterialTheme.colorScheme.onSurfaceVariant
- val cornerRadius = 18.dp
-
- Surface(
- modifier = Modifier
- .fillMaxWidth()
- .padding(horizontal = 12.dp, vertical = 8.dp)
- .clip(RoundedCornerShape(cornerRadius)),
- color = containerColor.copy(alpha = 0.95f),
+ NavigationBar(
+ modifier = Modifier.windowInsetsPadding(
+ WindowInsets.navigationBars.only(WindowInsetsSides.Horizontal)
+ ),
+ containerColor = TopAppBarDefaults.topAppBarColors(
+ containerColor = cardColor.copy(alpha = cardAlpha),
+ scrolledContainerColor = containerColor.copy(alpha = cardAlpha)
+ ).containerColor,
tonalElevation = 0.dp
) {
- NavigationBar(
- modifier = Modifier.windowInsetsPadding(
- WindowInsets.navigationBars.only(WindowInsetsSides.Horizontal)
- ),
- containerColor = Color.Transparent,
- tonalElevation = 0.dp
- ) {
- BottomBarDestination.entries.forEach { destination ->
- if (destination == BottomBarDestination.Kpm) {
- if (kpmVersion.isNotEmpty() && !kpmVersion.startsWith("Error")) {
- if (!fullFeatured && destination.rootRequired) return@forEach
- val isCurrentDestOnBackStack by navController.isRouteOnBackStackAsState(destination.direction)
- NavigationBarItem(
- selected = isCurrentDestOnBackStack,
- onClick = {
- if (!isCurrentDestOnBackStack) {
- navigator.navigate(destination.direction) {
- popUpTo(NavGraphs.root as RouteOrDirection) {
- saveState = true
- }
- launchSingleTop = true
- restoreState = true
- }
- }
- },
- icon = {
- Icon(
- imageVector = if (isCurrentDestOnBackStack) {
- destination.iconSelected
- } else {
- destination.iconNotSelected
- },
- contentDescription = stringResource(destination.label),
- tint = if (isCurrentDestOnBackStack) selectedColor else unselectedColor
- )
- },
- label = {
- Text(
- text = stringResource(destination.label),
- style = MaterialTheme.typography.labelMedium
- )
- },
- colors = NavigationBarItemDefaults.colors(
- selectedIconColor = selectedColor,
- unselectedIconColor = unselectedColor,
- selectedTextColor = selectedColor,
- unselectedTextColor = unselectedColor,
- indicatorColor = MaterialTheme.colorScheme.secondaryContainer
- )
- )
- }
- } else {
+ BottomBarDestination.entries.forEach { destination ->
+ if (destination == BottomBarDestination.Kpm) {
+ if (kpmVersion.isNotEmpty() && !kpmVersion.startsWith("Error")) {
if (!fullFeatured && destination.rootRequired) return@forEach
val isCurrentDestOnBackStack by navController.isRouteOnBackStackAsState(destination.direction)
NavigationBarItem(
@@ -233,7 +185,7 @@ private fun BottomBar(navController: NavHostController) {
destination.iconNotSelected
},
contentDescription = stringResource(destination.label),
- tint = if (isCurrentDestOnBackStack) selectedColor else unselectedColor
+ tint = if (isCurrentDestOnBackStack) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant
)
},
label = {
@@ -241,16 +193,43 @@ private fun BottomBar(navController: NavHostController) {
text = stringResource(destination.label),
style = MaterialTheme.typography.labelMedium
)
- },
- colors = NavigationBarItemDefaults.colors(
- selectedIconColor = selectedColor,
- unselectedIconColor = unselectedColor,
- selectedTextColor = selectedColor,
- unselectedTextColor = unselectedColor,
- indicatorColor = MaterialTheme.colorScheme.secondaryContainer
- )
+ }
)
}
+ } else {
+ if (!fullFeatured && destination.rootRequired) return@forEach
+ val isCurrentDestOnBackStack by navController.isRouteOnBackStackAsState(destination.direction)
+ NavigationBarItem(
+ selected = isCurrentDestOnBackStack,
+ onClick = {
+ if (!isCurrentDestOnBackStack) {
+ navigator.navigate(destination.direction) {
+ popUpTo(NavGraphs.root as RouteOrDirection) {
+ saveState = true
+ }
+ launchSingleTop = true
+ restoreState = true
+ }
+ }
+ },
+ icon = {
+ Icon(
+ imageVector = if (isCurrentDestOnBackStack) {
+ destination.iconSelected
+ } else {
+ destination.iconNotSelected
+ },
+ contentDescription = stringResource(destination.label),
+ tint = if (isCurrentDestOnBackStack) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant
+ )
+ },
+ label = {
+ Text(
+ text = stringResource(destination.label),
+ style = MaterialTheme.typography.labelMedium
+ )
+ }
+ )
}
}
}
diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Home.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Home.kt
index 0a9e1eee..62b66d90 100644
--- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Home.kt
+++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Home.kt
@@ -1,13 +1,11 @@
package com.sukisu.ultra.ui.screen
+import android.R.attr.layerType
import android.annotation.SuppressLint
import android.content.Context
-import android.content.Intent
-import android.net.Uri
import android.os.Build
import android.os.PowerManager
import android.system.Os
-import android.util.Log
import androidx.annotation.StringRes
import androidx.compose.animation.*
import androidx.compose.animation.core.*
@@ -35,7 +33,6 @@ import androidx.core.content.pm.PackageInfoCompat
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootGraph
import com.ramcosta.composedestinations.generated.destinations.InstallScreenDestination
-import com.ramcosta.composedestinations.generated.destinations.SettingScreenDestination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
@@ -54,6 +51,8 @@ import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.fadeOut
import androidx.compose.animation.shrinkVertically
import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.ui.composed
+import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.graphics.vector.ImageVector
import com.sukisu.ultra.ui.theme.CardConfig
import androidx.core.content.edit
@@ -113,7 +112,6 @@ fun HomeScreen(navigator: DestinationsNavigator) {
TopBar(
kernelVersion,
onInstallClick = { navigator.navigate(InstallScreenDestination) },
- onSettingsClick = { navigator.navigate(SettingScreenDestination) },
scrollBehavior = scrollBehavior
)
},
@@ -124,6 +122,8 @@ fun HomeScreen(navigator: DestinationsNavigator) {
Column(
modifier = Modifier
.padding(innerPadding)
+ .graphicsLayer(clip = true)
+ .disableOverscroll()
.nestedScroll(scrollBehavior.nestedScrollConnection)
.verticalScroll(rememberScrollState())
.padding(top = 16.dp)
@@ -293,7 +293,6 @@ fun RebootDropdownItem(@StringRes id: Int, reason: String = "") {
private fun TopBar(
kernelVersion: KernelVersion,
onInstallClick: () -> Unit,
- onSettingsClick: () -> Unit,
scrollBehavior: TopAppBarScrollBehavior? = null
) {
val cardColor = MaterialTheme.colorScheme.surfaceVariant
@@ -348,14 +347,6 @@ private fun TopBar(
}
}
}
-
- IconButton(onClick = onSettingsClick) {
- Icon(
- Icons.Filled.Settings,
- contentDescription = stringResource(id = R.string.settings),
- tint = MaterialTheme.colorScheme.primary
- )
- }
},
windowInsets = WindowInsets.safeDrawing.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal),
scrollBehavior = scrollBehavior
@@ -962,4 +953,13 @@ private fun checkKpmConfigured(): Boolean {
e.printStackTrace()
}
return false
+}
+
+@SuppressLint("UnnecessaryComposedModifier")
+fun Modifier.disableOverscroll(): Modifier = composed {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ this
+ } else {
+ this
+ }
}
\ No newline at end of file
diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/MoreSettings.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/MoreSettings.kt
index cabbfcd9..c5911945 100644
--- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/MoreSettings.kt
+++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/MoreSettings.kt
@@ -249,7 +249,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
// 主题色选项
val themeColorOptions = listOf(
stringResource(R.string.color_default) to ThemeColors.Default,
- stringResource(R.string.color_blue) to ThemeColors.Blue,
stringResource(R.string.color_green) to ThemeColors.Green,
stringResource(R.string.color_purple) to ThemeColors.Purple,
stringResource(R.string.color_orange) to ThemeColors.Orange,
@@ -396,7 +395,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
supportingContent = {
val currentThemeName = when (ThemeConfig.currentTheme) {
is ThemeColors.Default -> stringResource(R.string.color_default)
- is ThemeColors.Blue -> stringResource(R.string.color_blue)
is ThemeColors.Green -> stringResource(R.string.color_green)
is ThemeColors.Purple -> stringResource(R.string.color_purple)
is ThemeColors.Orange -> stringResource(R.string.color_orange)
@@ -820,7 +818,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
.clickable {
context.saveThemeColors(when (theme) {
ThemeColors.Default -> "default"
- ThemeColors.Blue -> "blue"
ThemeColors.Green -> "green"
ThemeColors.Purple -> "purple"
ThemeColors.Orange -> "orange"
diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/theme/CardManage.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/theme/CardManage.kt
index 57d12f35..701ea61a 100644
--- a/manager/app/src/main/java/com/sukisu/ultra/ui/theme/CardManage.kt
+++ b/manager/app/src/main/java/com/sukisu/ultra/ui/theme/CardManage.kt
@@ -23,8 +23,6 @@ object CardConfig {
var isUserLightModeEnabled by mutableStateOf(false)
var isCustomBackgroundEnabled by mutableStateOf(false)
- private var lastSystemDarkMode: Boolean? = null
-
/**
* 保存卡片配置到SharedPreferences
*/
@@ -91,22 +89,14 @@ fun getCardColors(originalColor: Color) = CardDefaults.cardColors(
@Composable
private fun determineContentColor(originalColor: Color): Color {
val isDarkTheme = isSystemInDarkTheme()
-
- // 处理主题切换过程中的颜色
if (ThemeConfig.isThemeChanging) {
return if (isDarkTheme) Color.White else Color.Black
}
return when {
- // 用户明确设置了浅色或深色模式
CardConfig.isUserLightModeEnabled -> Color.Black
- CardConfig.isUserDarkModeEnabled -> Color.White
-
- // 根据系统主题和背景亮度自动确定
!isDarkTheme && originalColor.luminance() > 0.5f -> Color.Black
isDarkTheme -> Color.White
-
- // 其他情况根据背景亮度确定
else -> if (originalColor.luminance() > 0.5f) Color.Black else Color.White
}
}
\ No newline at end of file
diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/theme/Color.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/theme/Color.kt
index 50d2b42b..7bddba93 100644
--- a/manager/app/src/main/java/com/sukisu/ultra/ui/theme/Color.kt
+++ b/manager/app/src/main/java/com/sukisu/ultra/ui/theme/Color.kt
@@ -35,40 +35,8 @@ sealed class ThemeColors {
abstract val Background: Color
abstract val OnBackground: Color
- // 默认主题 (白色)
+ // 默认主题 (蓝色)
object Default : ThemeColors() {
- override val Primary = Color(0xFFFFFFFF)
- override val Secondary = Color(0xFF5F6368)
- override val Tertiary = Color(0xFFFFFFFF)
- override val OnPrimary = Color(0xFFFFFFFF)
- override val OnSecondary = Color(0xFFFFFFFF)
- override val OnTertiary = Color(0xFFFFFFFF)
- override val PrimaryContainer = Color(0xFFD1E3FF)
- override val SecondaryContainer = Color(0xFFE4E6E8)
- override val TertiaryContainer = Color(0xFFD0E1FC)
- override val OnPrimaryContainer = Color(0xFF0D2E5E)
- override val OnSecondaryContainer = Color(0xFF24262A)
- override val OnTertiaryContainer = Color(0xFF0A2E62)
- override val ButtonContrast = Color(0xFF0A2E62)
-
- override val Surface = Color(0xFFFCFCFC)
- override val SurfaceVariant = Color(0xFFF2F2F2)
- override val OnSurface = Color(0xFF202124)
- override val OnSurfaceVariant = Color(0xFF5F6368)
-
- override val Error = Color(0xFFD93025)
- override val OnError = Color(0xFFFFFFFF)
- override val ErrorContainer = Color(0xFFFDECEA)
- override val OnErrorContainer = Color(0xFF58160F)
-
- override val Outline = Color(0xFFDADADA)
- override val OutlineVariant = Color(0xFFEEEEEE)
- override val Background = Color(0xFFFFFFFF)
- override val OnBackground = Color(0xFF202124)
- }
-
- // 蓝色主题
- object Blue : ThemeColors() {
override val Primary = Color(0xFF2196F3)
override val Secondary = Color(0xFF64B5F6)
override val Tertiary = Color(0xFF0D47A1)
@@ -293,7 +261,6 @@ sealed class ThemeColors {
companion object {
fun fromName(name: String): ThemeColors = when (name.lowercase()) {
- "blue" -> Blue
"green" -> Green
"purple" -> Purple
"orange" -> Orange
diff --git a/manager/app/src/main/res/values-ja/strings.xml b/manager/app/src/main/res/values-ja/strings.xml
index a936a1dd..a838e68c 100644
--- a/manager/app/src/main/res/values-ja/strings.xml
+++ b/manager/app/src/main/res/values-ja/strings.xml
@@ -203,8 +203,7 @@
ダイナミックカラー
システムテーマのダイナミックカラーを使用します
テーマカラーを選択
- ホワイト
- ブルー
+ ブルー
グリーン
パープル
オレンジ
diff --git a/manager/app/src/main/res/values-vi/strings.xml b/manager/app/src/main/res/values-vi/strings.xml
index 282103f3..65b660c5 100644
--- a/manager/app/src/main/res/values-vi/strings.xml
+++ b/manager/app/src/main/res/values-vi/strings.xml
@@ -201,8 +201,7 @@
Màu sắc động
Màu sắc động sử dụng chủ đề hệ thống
Chọn màu chủ đề
- Trắng
- Xanh dương
+ Xanh dương
Xanh lá
Tím
Cam
diff --git a/manager/app/src/main/res/values-zh-rCN/strings.xml b/manager/app/src/main/res/values-zh-rCN/strings.xml
index bc922a9e..daa73d87 100644
--- a/manager/app/src/main/res/values-zh-rCN/strings.xml
+++ b/manager/app/src/main/res/values-zh-rCN/strings.xml
@@ -202,8 +202,7 @@
动态颜色
使用系统主题的动态颜色
选择主题色
- 白色
- 蓝色
+ 蓝色
绿色
紫色
橙色
diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml
index be11273b..10c8b988 100644
--- a/manager/app/src/main/res/values/strings.xml
+++ b/manager/app/src/main/res/values/strings.xml
@@ -202,8 +202,7 @@
Dynamic colours
Dynamic colours using system themes
Choose a theme colour
- White
- Blue
+ Blue
Green
Purple
Orange