[manager]: show status of kernel

This commit is contained in:
tiann
2022-12-10 21:54:34 +08:00
parent 1c1c7e0352
commit c90e9fcc95
5 changed files with 107 additions and 9 deletions

View File

@@ -0,0 +1,44 @@
package me.weishu.kernelsu
import android.system.Os
/**
* @author weishu
* @date 2022/12/10.
*/
data class KernelVersion(val major: Int, val patchLevel: Int, val subLevel: Int) {
override fun toString(): String {
return "$major.$patchLevel.$subLevel"
}
fun isGKI(): Boolean {
// kernel 6.x
if (major > 5) {
return true
}
// kernel 5.10.x
if (major == 5) {
return patchLevel >= 10
}
return false
}
}
fun parseKernelVersion(version: String): KernelVersion {
val find = "(\\d+)\\.(\\d+)\\.(\\d+)".toRegex().find(version)
return if (find != null) {
KernelVersion(find.groupValues[1].toInt(), find.groupValues[2].toInt(), find.groupValues[3].toInt())
} else {
KernelVersion(-1, -1, -1)
}
}
fun getKernelVersion(): KernelVersion {
Os.uname().release.let {
return parseKernelVersion(it)
}
}

View File

@@ -1,15 +1,16 @@
import android.os.Build import android.os.Build
import android.system.Os import android.system.Os
import android.widget.Toast
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Done
import androidx.compose.material.icons.filled.Warning
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.Snackbar
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
@@ -17,6 +18,8 @@ import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import me.weishu.kernelsu.Natives import me.weishu.kernelsu.Natives
import me.weishu.kernelsu.R
import me.weishu.kernelsu.getKernelVersion
@Composable @Composable
fun Info(label: String, value: String) { fun Info(label: String, value: String) {
@@ -37,15 +40,46 @@ fun Info(label: String, value: String) {
@Composable @Composable
fun Home() { fun Home() {
val statusIcon: Int
val statusText: String
val secondaryText: String
val kernelVersion = getKernelVersion()
val isManager = Natives.becomeManager() val isManager = Natives.becomeManager()
Column(modifier = Modifier.fillMaxWidth()) { if (kernelVersion.isGKI()) {
// GKI kernel
if (isManager) {
statusIcon = R.drawable.ic_status_working
statusText = "Working"
secondaryText = "Version: ${Natives.getVersion()}"
} else {
statusIcon = R.drawable.ic_status_supported
statusText = "Not installed"
secondaryText = "Click to install"
}
} else {
statusIcon = R.drawable.ic_status_unsupported
statusText = "Unsupported kernel"
secondaryText = "KernelSU only supports GKI kernels now"
}
val context = LocalContext.current
Column(modifier = Modifier.fillMaxWidth()) {
Card( Card(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(6.dp) .padding(6.dp)
.clickable { }, .clickable {
if (kernelVersion.isGKI() && !isManager) {
Toast.makeText(
context,
"Unimplemented",
Toast.LENGTH_SHORT
).show()
}
},
) { ) {
Row( Row(
modifier = Modifier modifier = Modifier
@@ -53,7 +87,7 @@ fun Home() {
.padding(10.dp) .padding(10.dp)
) { ) {
Image( Image(
if (isManager) Icons.Filled.Done else Icons.Filled.Warning, painter = painterResource(id = statusIcon),
null, null,
modifier = Modifier modifier = Modifier
.size(64.dp) .size(64.dp)
@@ -64,13 +98,13 @@ fun Home() {
.padding(start = 10.dp), .padding(start = 10.dp),
) { ) {
Text( Text(
text = if (isManager) "Installed" else "Not Installed", text = statusText,
fontSize = 20.sp, fontSize = 20.sp,
fontWeight = FontWeight.Bold fontWeight = FontWeight.Bold
) )
Text( Text(
text = if (isManager) "Version: ${Natives.getVersion()}" else "Click to Install", text = secondaryText,
fontSize = 15.sp, fontSize = 15.sp,
fontWeight = FontWeight.Normal fontWeight = FontWeight.Normal
) )
@@ -104,7 +138,6 @@ fun Home() {
} }
} }
} }
} }

View File

@@ -0,0 +1,7 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M13,13H11V7H13M13,17H11V15H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" />
</vector>

View File

@@ -0,0 +1,7 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M12 2C17.5 2 22 6.5 22 12S17.5 22 12 22 2 17.5 2 12 6.5 2 12 2M12 4C10.1 4 8.4 4.6 7.1 5.7L18.3 16.9C19.3 15.5 20 13.8 20 12C20 7.6 16.4 4 12 4M16.9 18.3L5.7 7.1C4.6 8.4 4 10.1 4 12C4 16.4 7.6 20 12 20C13.9 20 15.6 19.4 16.9 18.3Z" />
</vector>

View File

@@ -0,0 +1,7 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M10,17L5,12L6.41,10.58L10,14.17L17.59,6.58L19,8M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" />
</vector>