[manager]: show status of kernel
This commit is contained in:
44
manager/app/src/main/java/me/weishu/kernelsu/Kernels.kt
Normal file
44
manager/app/src/main/java/me/weishu/kernelsu/Kernels.kt
Normal 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)
|
||||
}
|
||||
}
|
||||
@@ -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() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
7
manager/app/src/main/res/drawable/ic_status_working.xml
Normal file
7
manager/app/src/main/res/drawable/ic_status_working.xml
Normal 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>
|
||||
Reference in New Issue
Block a user