manager: Add UI for uninstall permanently

This commit is contained in:
weishu
2024-04-23 15:37:42 +08:00
parent 3aac979caa
commit 97dd3d9ec2
3 changed files with 42 additions and 3 deletions

View File

@@ -50,6 +50,7 @@ import me.weishu.kernelsu.ui.util.installBoot
import me.weishu.kernelsu.ui.util.installModule import me.weishu.kernelsu.ui.util.installModule
import me.weishu.kernelsu.ui.util.reboot import me.weishu.kernelsu.ui.util.reboot
import me.weishu.kernelsu.ui.util.restoreBoot import me.weishu.kernelsu.ui.util.restoreBoot
import me.weishu.kernelsu.ui.util.uninstallPermanently
import java.io.File import java.io.File
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Date import java.util.Date
@@ -174,6 +175,8 @@ sealed class FlashIt : Parcelable {
data class FlashModule(val uri: Uri) : FlashIt() data class FlashModule(val uri: Uri) : FlashIt()
data object FlashRestore : FlashIt() data object FlashRestore : FlashIt()
data object FlashUninstall : FlashIt()
} }
fun flashIt( fun flashIt(
@@ -194,6 +197,8 @@ fun flashIt(
is FlashIt.FlashModule -> installModule(flashIt.uri, onFinish, onStdout, onStderr) is FlashIt.FlashModule -> installModule(flashIt.uri, onFinish, onStdout, onStderr)
FlashIt.FlashRestore -> restoreBoot(onFinish, onStdout, onStderr) FlashIt.FlashRestore -> restoreBoot(onFinish, onStdout, onStderr)
FlashIt.FlashUninstall -> uninstallPermanently(onFinish, onStdout, onStderr)
} }
} }

View File

@@ -213,7 +213,8 @@ fun SettingScreen(navigator: DestinationsNavigator) {
} }
) )
val lkmMode = Natives.version >= Natives.MINIMAL_SUPPORTED_KERNEL_LKM && Natives.isLkmMode val lkmMode =
Natives.version >= Natives.MINIMAL_SUPPORTED_KERNEL_LKM && Natives.isLkmMode
if (lkmMode) { if (lkmMode) {
UninstallItem(navigator) { UninstallItem(navigator) {
loadingDialog.withLoading(it) loadingDialog.withLoading(it)
@@ -258,10 +259,14 @@ fun UninstallItem(
withLoading { withLoading {
when (uninstallType) { when (uninstallType) {
UninstallType.TEMPORARY -> showTodo() UninstallType.TEMPORARY -> showTodo()
UninstallType.PERMANENT -> showTodo() UninstallType.PERMANENT -> navigator.navigate(
FlashScreenDestination(FlashIt.FlashUninstall)
)
UninstallType.RESTORE_STOCK_IMAGE -> navigator.navigate( UninstallType.RESTORE_STOCK_IMAGE -> navigator.navigate(
FlashScreenDestination(FlashIt.FlashRestore) FlashScreenDestination(FlashIt.FlashRestore)
) )
UninstallType.NONE -> Unit UninstallType.NONE -> Unit
} }
} }

View File

@@ -191,6 +191,33 @@ fun restoreBoot(
return result.isSuccess return result.isSuccess
} }
fun uninstallPermanently(
onFinish: (Boolean, Int) -> Unit, onStdout: (String) -> Unit, onStderr: (String) -> Unit
): Boolean {
val magiskboot = File(ksuApp.applicationInfo.nativeLibraryDir, "libmagiskboot.so")
val stdoutCallback: CallbackList<String?> = object : CallbackList<String?>() {
override fun onAddElement(s: String?) {
onStdout(s ?: "")
}
}
val stderrCallback: CallbackList<String?> = object : CallbackList<String?>() {
override fun onAddElement(s: String?) {
onStderr(s ?: "")
}
}
val result = withNewRootShell {
newJob().add("${getKsuDaemonPath()} uninstall --magiskboot $magiskboot")
.to(stdoutCallback, stderrCallback)
.exec()
}
onFinish(result.isSuccess, result.code)
return result.isSuccess
}
suspend fun shrinkModules(): Boolean = withContext(Dispatchers.IO) { suspend fun shrinkModules(): Boolean = withContext(Dispatchers.IO) {
execKsud("module shrink", true) execKsud("module shrink", true)
} }
@@ -414,7 +441,9 @@ fun launchApp(packageName: String) {
val shell = getRootShell() val shell = getRootShell()
val result = val result =
shell.newJob().add("cmd package resolve-activity --brief $packageName | tail -n 1 | xargs cmd activity start-activity -n").exec() shell.newJob()
.add("cmd package resolve-activity --brief $packageName | tail -n 1 | xargs cmd activity start-activity -n")
.exec()
Log.i(TAG, "launch $packageName result: $result") Log.i(TAG, "launch $packageName result: $result")
} }