manager: Add tips for select boot image

This commit is contained in:
weishu
2024-03-17 12:00:44 +08:00
parent 9a4ea27e9d
commit 177ef6b634
4 changed files with 40 additions and 5 deletions

View File

@@ -6,6 +6,7 @@ import android.net.Uri
import android.widget.Toast
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.StringRes
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -46,6 +47,7 @@ import me.weishu.kernelsu.ui.util.DownloadListener
import me.weishu.kernelsu.ui.util.download
import me.weishu.kernelsu.ui.util.getLKMUrl
import me.weishu.kernelsu.ui.util.isAbDevice
import me.weishu.kernelsu.ui.util.isInitBoot
import me.weishu.kernelsu.ui.util.rootAvailable
/**
@@ -173,8 +175,11 @@ fun InstallScreen(navigator: DestinationsNavigator) {
}
sealed class InstallMethod {
data class SelectFile(val uri: Uri? = null, override val label: Int = R.string.select_file) :
InstallMethod()
data class SelectFile(
val uri: Uri? = null,
@StringRes override val label: Int = R.string.select_file,
override val summary: String?
) : InstallMethod()
object DirectInstall : InstallMethod() {
override val label: Int
@@ -187,13 +192,19 @@ sealed class InstallMethod {
}
abstract val label: Int
open val summary: String? = null
}
@Composable
private fun SelectInstallMethod(onSelected: (InstallMethod) -> Unit = {}) {
val rootAvailable = rootAvailable()
val isAbDevice = isAbDevice()
val radioOptions = mutableListOf<InstallMethod>(InstallMethod.SelectFile())
val selectFileTip = stringResource(
id = R.string.select_file_tip,
if (isInitBoot()) "init_boot" else "boot"
)
val radioOptions =
mutableListOf<InstallMethod>(InstallMethod.SelectFile(summary = selectFileTip))
if (rootAvailable) {
radioOptions.add(InstallMethod.DirectInstall)
@@ -208,7 +219,7 @@ private fun SelectInstallMethod(onSelected: (InstallMethod) -> Unit = {}) {
) {
if (it.resultCode == Activity.RESULT_OK) {
it.data?.data?.let { uri ->
val option = InstallMethod.SelectFile(uri)
val option = InstallMethod.SelectFile(uri, summary = selectFileTip)
selectedOption = option
onSelected(option)
}
@@ -255,7 +266,22 @@ private fun SelectInstallMethod(onSelected: (InstallMethod) -> Unit = {}) {
RadioButton(selected = option.javaClass == selectedOption?.javaClass, onClick = {
onClick(option)
})
Text(text = stringResource(id = option.label))
Column {
Text(
text = stringResource(id = option.label),
fontSize = MaterialTheme.typography.titleMedium.fontSize,
fontFamily = MaterialTheme.typography.titleMedium.fontFamily,
fontStyle = MaterialTheme.typography.titleMedium.fontStyle
)
option.summary?.let {
Text(
text = it,
fontSize = MaterialTheme.typography.bodySmall.fontSize,
fontFamily = MaterialTheme.typography.bodySmall.fontFamily,
fontStyle = MaterialTheme.typography.bodySmall.fontStyle
)
}
}
}
}
}

View File

@@ -1,6 +1,7 @@
package me.weishu.kernelsu.ui.util
import android.net.Uri
import android.os.Build
import android.os.Environment
import android.os.SystemClock
import android.util.Log
@@ -237,6 +238,12 @@ fun isAbDevice(): Boolean {
return ShellUtils.fastCmd(shell, "getprop ro.build.ab_update").trim().toBoolean()
}
fun isInitBoot(): Boolean {
val shell = getRootShell()
// https://source.android.com/docs/core/architecture/partitions/generic-boot
return ShellUtils.fastCmd(shell, "getprop ro.product.first_api_level").trim().toInt() >= Build.VERSION_CODES.TIRAMISU
}
fun overlayFsAvailable(): Boolean {
val shell = getRootShell()
// check /proc/filesystems

View File

@@ -115,4 +115,5 @@
<string name="install_next">下一步</string>
<string name="failed_to_fetch_lkm_url">获取 LKM 链接失败:%1$s</string>
<string name="downloading">正在下载:%1$s</string>
<string name="select_file_tip">建议选择 %1$s 分区镜像</string>
</resources>

View File

@@ -117,4 +117,5 @@
<string name="install_next">Next</string>
<string name="failed_to_fetch_lkm_url">Failed to fetch LKM url: %1$s</string>
<string name="downloading">Downloading %1$s</string>
<string name="select_file_tip">%1$s partition image is recommended</string>
</resources>