manager: Add UI for uninstall permanently
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user