[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.system.Os
import android.widget.Toast
import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable
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.Snackbar
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
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.buildAnnotatedString
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.sp
import me.weishu.kernelsu.Natives
import me.weishu.kernelsu.R
import me.weishu.kernelsu.getKernelVersion
@Composable
fun Info(label: String, value: String) {
@@ -37,15 +40,46 @@ fun Info(label: String, value: String) {
@Composable
fun Home() {
val statusIcon: Int
val statusText: String
val secondaryText: String
val kernelVersion = getKernelVersion()
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(
modifier = Modifier
.fillMaxWidth()
.padding(6.dp)
.clickable { },
.clickable {
if (kernelVersion.isGKI() && !isManager) {
Toast.makeText(
context,
"Unimplemented",
Toast.LENGTH_SHORT
).show()
}
},
) {
Row(
modifier = Modifier
@@ -53,7 +87,7 @@ fun Home() {
.padding(10.dp)
) {
Image(
if (isManager) Icons.Filled.Done else Icons.Filled.Warning,
painter = painterResource(id = statusIcon),
null,
modifier = Modifier
.size(64.dp)
@@ -64,13 +98,13 @@ fun Home() {
.padding(start = 10.dp),
) {
Text(
text = if (isManager) "Installed" else "Not Installed",
text = statusText,
fontSize = 20.sp,
fontWeight = FontWeight.Bold
)
Text(
text = if (isManager) "Version: ${Natives.getVersion()}" else "Click to Install",
text = secondaryText,
fontSize = 15.sp,
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>