From b6b86d38a66989c22805ca16945b1c3b5174618a Mon Sep 17 00:00:00 2001 From: weishu Date: Sat, 3 Jun 2023 15:23:35 +0800 Subject: [PATCH] manager: Add require new kernel version. --- .../main/java/me/weishu/kernelsu/Natives.kt | 7 ++++ .../me/weishu/kernelsu/ui/MainActivity.kt | 3 +- .../java/me/weishu/kernelsu/ui/screen/Home.kt | 38 ++++++++++++++++++- .../me/weishu/kernelsu/ui/screen/Module.kt | 8 +--- .../src/main/res/values-zh-rCN/strings.xml | 1 + manager/app/src/main/res/values/strings.xml | 1 + 6 files changed, 49 insertions(+), 9 deletions(-) diff --git a/manager/app/src/main/java/me/weishu/kernelsu/Natives.kt b/manager/app/src/main/java/me/weishu/kernelsu/Natives.kt index 72a7b453..7cdd2d81 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/Natives.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/Natives.kt @@ -12,6 +12,10 @@ object Natives { const val DEFAULT_ROOT_PROFILE_KEY = "_root_default_" const val DEFAULT_NON_ROOT_PROFILE_KEY = "_non_root_default_" + // minimal supported kernel version + // 10915: allowlist breaking change + const val MINIMAL_SUPPORTED_KERNEL = 10916 + init { System.loadLibrary("kernelsu") } @@ -39,6 +43,9 @@ object Natives { external fun getAppProfile(key: String?, uid: Int): Profile external fun setAppProfile(profile: Profile?): Boolean + fun requireNewKernel(): Boolean { + return version < MINIMAL_SUPPORTED_KERNEL + } @Immutable @Parcelize diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/MainActivity.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/MainActivity.kt index abb86b7e..74af1c5b 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/MainActivity.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/MainActivity.kt @@ -66,9 +66,10 @@ class MainActivity : ComponentActivity() { @Composable private fun BottomBar(navController: NavHostController) { val isManager = Natives.becomeManager(ksuApp.packageName) + val fullFeatured = isManager && !Natives.requireNewKernel() NavigationBar(tonalElevation = 8.dp) { BottomBarDestination.values().forEach { destination -> - if (!isManager && destination.rootRequired) return@forEach + if (!fullFeatured && destination.rootRequired) return@forEach val isCurrentDestOnBackStack by navController.isRouteOnBackStackAsState(destination.direction) NavigationBarItem( selected = isCurrentDestOnBackStack, diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Home.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Home.kt index a1c29338..4db36e99 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Home.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Home.kt @@ -59,6 +59,14 @@ fun HomeScreen(navigator: DestinationsNavigator) { val ksuVersion = if (isManager) Natives.version else null StatusCard(kernelVersion, ksuVersion) + if (Natives.requireNewKernel()) { + WarningCard( + stringResource(id = R.string.require_kernel_version).format( + ksuVersion, + Natives.MINIMAL_SUPPORTED_KERNEL + ) + ) + } InfoCard() DonateCard() LearnMoreCard() @@ -159,7 +167,10 @@ private fun StatusCard(kernelVersion: KernelVersion, ksuVersion: Int?) { ) Spacer(Modifier.height(4.dp)) Text( - text = stringResource(R.string.home_superuser_count, getSuperuserCount()), + text = stringResource( + R.string.home_superuser_count, + getSuperuserCount() + ), style = MaterialTheme.typography.bodyMedium ) Spacer(Modifier.height(4.dp)) @@ -169,6 +180,7 @@ private fun StatusCard(kernelVersion: KernelVersion, ksuVersion: Int?) { ) } } + kernelVersion.isGKI() -> { Icon(Icons.Outlined.Warning, stringResource(R.string.home_not_installed)) Column(Modifier.padding(start = 20.dp)) { @@ -183,6 +195,7 @@ private fun StatusCard(kernelVersion: KernelVersion, ksuVersion: Int?) { ) } } + else -> { Icon(Icons.Outlined.Block, stringResource(R.string.home_unsupported)) Column(Modifier.padding(start = 20.dp)) { @@ -203,6 +216,29 @@ private fun StatusCard(kernelVersion: KernelVersion, ksuVersion: Int?) { } } +@Composable +fun WarningCard(message: String) { + ElevatedCard( + colors = CardDefaults.elevatedCardColors( + containerColor = MaterialTheme.colorScheme.error + ) + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(24.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Column() { + Text( + text = message, + style = MaterialTheme.typography.bodyMedium + ) + } + } + } +} + @Composable fun LearnMoreCard() { val uriHandler = LocalUriHandler.current diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt index 40d81340..0dbfd370 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt @@ -51,10 +51,9 @@ fun ModuleScreen(navigator: DestinationsNavigator) { } val isSafeMode = Natives.isSafeMode - val isKSUVersionInvalid = Natives.version < 0 val hasMagisk = hasMagisk() - val hideInstallButton = isSafeMode || isKSUVersionInvalid || hasMagisk + val hideInstallButton = isSafeMode || hasMagisk Scaffold(topBar = { TopBar() @@ -93,11 +92,6 @@ fun ModuleScreen(navigator: DestinationsNavigator) { ConfirmDialog() when { - isKSUVersionInvalid -> { - Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { - Text(stringResource(R.string.require_kernel_version_8)) - } - } hasMagisk -> { Box( modifier = Modifier 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 570f6f9c..2e971db2 100644 --- a/manager/app/src/main/res/values-zh-rCN/strings.xml +++ b/manager/app/src/main/res/values-zh-rCN/strings.xml @@ -61,6 +61,7 @@ 支持开发 KernelSU 将保持免费和开源,向开发者捐赠以表示支持。 加入我们的 %2$s 频道
加入我们的 QQ 频道]]>
+ 当前内核版本: %d 过低,管理器无法正常工作,请升级内核版本至 %d 或以上! 应用 全局 白名单 diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml index fd3684b2..4161927f 100644 --- a/manager/app/src/main/res/values/strings.xml +++ b/manager/app/src/main/res/values/strings.xml @@ -78,4 +78,5 @@ Allow root request Failed to update root profile for %s Failed to update app profile for %s + The current kernel version: %d is too low for the manager to function properly. Please upgrade to version %d or higher!