From 404352b536b03db3eb0ef4cd8b2eeceeaa9f4a45 Mon Sep 17 00:00:00 2001 From: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com> Date: Thu, 20 Nov 2025 13:59:40 +0800 Subject: [PATCH] Step 4-1: Fixed incorrect homepage indexing after enabling KPM - Adjusted the position of the personalized menu --- .../java/com/sukisu/ultra/ui/MainActivity.kt | 18 +------ .../java/com/sukisu/ultra/ui/screen/Home.kt | 14 ++++- .../sukisu/ultra/ui/screen/Personalization.kt | 1 - .../com/sukisu/ultra/ui/screen/Settings.kt | 51 +++++++++---------- .../java/com/sukisu/ultra/ui/util/KsuCli.kt | 18 +++++++ 5 files changed, 57 insertions(+), 45 deletions(-) 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 a0878699..26f5e710 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 @@ -25,13 +25,9 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf -import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import com.sukisu.ultra.ui.util.getKpmVersion import androidx.compose.ui.Modifier import androidx.navigation.NavBackStackEntry import androidx.navigation.compose.rememberNavController @@ -55,6 +51,7 @@ import com.sukisu.ultra.ui.screen.SettingPager import com.sukisu.ultra.ui.screen.SuperUserPager import com.sukisu.ultra.ui.theme.KernelSUTheme import com.sukisu.ultra.ui.util.install +import com.sukisu.ultra.ui.util.rememberKpmAvailable import top.yukonga.miuix.kmp.basic.Scaffold import top.yukonga.miuix.kmp.theme.MiuixTheme @@ -149,18 +146,7 @@ fun MainScreen(navController: DestinationsNavigator) { val activity = LocalActivity.current val coroutineScope = rememberCoroutineScope() - // 检查 KPM 版本是否可用 - val kpmVersion by produceState(initialValue = "") { - value = withContext(Dispatchers.IO) { - try { - getKpmVersion() - } catch (e: Exception) { - "" - } - } - } - - val isKpmAvailable = kpmVersion.isNotEmpty() && !kpmVersion.contains("Error", ignoreCase = true) + val isKpmAvailable = rememberKpmAvailable() val pageCount = if (isKpmAvailable) 5 else 4 val pagerState = rememberPagerState(initialPage = 0, pageCount = { pageCount }) 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 937ccfa3..d41f0735 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 @@ -148,6 +148,8 @@ fun HomePager( val lkmMode = ksuVersion?.let { if (kernelVersion.isGKI()) Natives.isLkmMode else null } + + val isKpmAvailable = rememberKpmAvailable() Column( modifier = Modifier.padding(vertical = 12.dp), @@ -175,12 +177,12 @@ fun HomePager( }, onClickSuperuser = { coroutineScope.launch { - pagerState.animateScrollToPage(1) + pagerState.animateScrollToPage(getSuperuserPageIndex(isKpmAvailable)) } }, onclickModule = { coroutineScope.launch { - pagerState.animateScrollToPage(2) + pagerState.animateScrollToPage(getModulePageIndex(isKpmAvailable)) } } ) @@ -709,3 +711,11 @@ fun getManagerVersion(context: Context): Pair { val versionCode = PackageInfoCompat.getLongVersionCode(packageInfo) return Pair(packageInfo.versionName!!, versionCode) } + +fun getSuperuserPageIndex(isKpmAvailable: Boolean): Int { + return if (isKpmAvailable) 2 else 1 +} + +fun getModulePageIndex(isKpmAvailable: Boolean): Int { + return if (isKpmAvailable) 3 else 2 +} diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Personalization.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Personalization.kt index 486a1eb5..479ea375 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Personalization.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Personalization.kt @@ -1,6 +1,5 @@ package com.sukisu.ultra.ui.screen -import android.app.Activity import android.content.Context import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.layout.WindowInsets diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt index bfeeb70d..9224e2d6 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt @@ -163,31 +163,6 @@ fun SettingPager( mutableStateOf(prefs.getBoolean("check_update", true)) } - Card( - modifier = Modifier - .padding(top = 12.dp) - .fillMaxWidth(), - ) { - val personalization = stringResource(id = R.string.personalization) - SuperArrow( - title = personalization, - summary = stringResource(id = R.string.personalization_summary), - leftAction = { - Icon( - Icons.Rounded.Palette, - modifier = Modifier.padding(end = 16.dp), - contentDescription = personalization, - tint = colorScheme.onBackground - ) - }, - onClick = { - navigator.navigate(PersonalizationDestination) { - launchSingleTop = true - } - } - ) - } - Card( modifier = Modifier .padding(top = 12.dp) @@ -238,6 +213,31 @@ fun SettingPager( } } + Card( + modifier = Modifier + .padding(top = 12.dp) + .fillMaxWidth(), + ) { + val personalization = stringResource(id = R.string.personalization) + SuperArrow( + title = personalization, + summary = stringResource(id = R.string.personalization_summary), + leftAction = { + Icon( + Icons.Rounded.Palette, + modifier = Modifier.padding(end = 16.dp), + contentDescription = personalization, + tint = colorScheme.onBackground + ) + }, + onClick = { + navigator.navigate(PersonalizationDestination) { + launchSingleTop = true + } + } + ) + } + KsuIsValid { Card( modifier = Modifier @@ -266,7 +266,6 @@ fun SettingPager( } KsuIsValid { - Card( modifier = Modifier .padding(top = 12.dp) diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/util/KsuCli.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/util/KsuCli.kt index d82f595b..b20ea8c7 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/util/KsuCli.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/util/KsuCli.kt @@ -10,6 +10,9 @@ import android.os.SystemClock import android.provider.OpenableColumns import android.system.Os import android.util.Log +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.produceState import com.topjohnwu.superuser.CallbackList import com.topjohnwu.superuser.Shell import com.topjohnwu.superuser.ShellUtils @@ -720,3 +723,18 @@ fun applyUmountConfigToKernel(): Boolean { Log.i(TAG, "apply umount config to kernel result: $result") return result } + +// 检查 KPM 版本是否可用 +@Composable +fun rememberKpmAvailable(): Boolean { + val kpmVersion by produceState(initialValue = "") { + value = withContext(Dispatchers.IO) { + try { + getKpmVersion() + } catch (_: Exception) { + "" + } + } + } + return kpmVersion.isNotEmpty() && !kpmVersion.contains("Error", ignoreCase = true) +}