Step 4-1: Fixed incorrect homepage indexing after enabling KPM

- Adjusted the position of the personalized menu
This commit is contained in:
ShirkNeko
2025-11-20 13:59:40 +08:00
parent 8e7f1f1cc7
commit 404352b536
5 changed files with 57 additions and 45 deletions

View File

@@ -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 })

View File

@@ -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<String, Long> {
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
}

View File

@@ -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

View File

@@ -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)

View File

@@ -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)
}