diff --git a/manager/src/main/java/org/lsposed/lspatch/ui/page/NewPatchPage.kt b/manager/src/main/java/org/lsposed/lspatch/ui/page/NewPatchPage.kt
index 3593bd5..5adb0f5 100644
--- a/manager/src/main/java/org/lsposed/lspatch/ui/page/NewPatchPage.kt
+++ b/manager/src/main/java/org/lsposed/lspatch/ui/page/NewPatchPage.kt
@@ -348,8 +348,9 @@ private fun DoPatchBody(modifier: Modifier) {
scope.launch {
snackbarHost.showSnackbar(shizukuUnavailable)
}
+ } else {
+ installing = true
}
- installing = true
},
content = { Text(stringResource(R.string.patch_install)) }
)
@@ -384,12 +385,12 @@ private fun InstallDialog(patchApp: AppInfo, onFinish: (Int, String?) -> Unit) {
val scope = rememberCoroutineScope()
var uninstallFirst by remember { mutableStateOf(ShizukuApi.isPackageInstalled(patchApp.app.packageName)) }
- var installing by remember { mutableStateOf(false) }
+ var installing by remember { mutableStateOf(0) }
val doInstall = suspend {
Log.i(TAG, "Installing app ${patchApp.app.packageName}")
- installing = true
+ installing = 1
val (status, message) = LSPPackageInstaller.install()
- installing = false
+ installing = 0
Log.i(TAG, "Installation end: $status, $message")
onFinish(status, message)
}
@@ -402,11 +403,16 @@ private fun InstallDialog(patchApp: AppInfo, onFinish: (Int, String?) -> Unit) {
onClick = {
scope.launch {
Log.i(TAG, "Uninstalling app ${patchApp.app.packageName}")
- val (status, message) = LSPPackageInstaller.uninstall(patchApp.app.packageName)
- Log.i(TAG, "Uninstallation end: $status, $message")
- if (status != PackageInstaller.STATUS_SUCCESS) onFinish(status, message)
uninstallFirst = false
- doInstall()
+ installing = 2
+ val (status, message) = LSPPackageInstaller.uninstall(patchApp.app.packageName)
+ installing = 0
+ Log.i(TAG, "Uninstallation end: $status, $message")
+ if (status == PackageInstaller.STATUS_SUCCESS) {
+ doInstall()
+ } else {
+ onFinish(status, message)
+ }
}
},
content = { Text(stringResource(android.R.string.ok)) }
@@ -429,14 +435,14 @@ private fun InstallDialog(patchApp: AppInfo, onFinish: (Int, String?) -> Unit) {
)
}
- if (installing) {
+ if (installing != 0) {
AlertDialog(
onDismissRequest = {},
confirmButton = {},
title = {
Text(
modifier = Modifier.fillMaxWidth(),
- text = stringResource(R.string.patch_installing),
+ text = stringResource(if (installing == 1) R.string.patch_installing else R.string.patch_uninstalling),
fontFamily = FontFamily.Serif,
textAlign = TextAlign.Center
)
diff --git a/manager/src/main/java/org/lsposed/lspatch/util/LSPPackageInstaller.kt b/manager/src/main/java/org/lsposed/lspatch/util/LSPPackageInstaller.kt
index f7a7cca..d8fd033 100644
--- a/manager/src/main/java/org/lsposed/lspatch/util/LSPPackageInstaller.kt
+++ b/manager/src/main/java/org/lsposed/lspatch/util/LSPPackageInstaller.kt
@@ -89,7 +89,7 @@ object LSPPackageInstaller {
} ?: throw IOException("Intent is null")
}.onFailure {
status = PackageInstaller.STATUS_FAILURE
- message = it.message + "\n" + it.stackTraceToString()
+ message = "Exception happened\n$it"
}
}
return Pair(status, message)
diff --git a/manager/src/main/java/org/lsposed/lspatch/util/ShizukuApi.kt b/manager/src/main/java/org/lsposed/lspatch/util/ShizukuApi.kt
index 2ce4ad6..699a34d 100644
--- a/manager/src/main/java/org/lsposed/lspatch/util/ShizukuApi.kt
+++ b/manager/src/main/java/org/lsposed/lspatch/util/ShizukuApi.kt
@@ -2,6 +2,7 @@ package org.lsposed.lspatch.util
import android.content.IntentSender
import android.content.pm.*
+import android.os.Build
import android.os.IBinder
import android.os.IInterface
import androidx.compose.runtime.getValue
@@ -25,8 +26,20 @@ object ShizukuApi {
}
private val packageInstaller: PackageInstaller by lazy {
- PackageInstaller::class.java.getConstructor(IPackageInstaller::class.java, String::class.java, Int::class.javaPrimitiveType)
- .newInstance(iPackageInstaller, "com.android.shell", 0)
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ PackageInstaller::class.java.getConstructor(
+ IPackageInstaller::class.java,
+ String::class.java,
+ String::class.java,
+ Int::class.javaPrimitiveType
+ ).newInstance(iPackageInstaller, "com.android.shell", null, 0)
+ } else {
+ PackageInstaller::class.java.getConstructor(
+ IPackageInstaller::class.java,
+ String::class.java,
+ Int::class.javaPrimitiveType
+ ).newInstance(iPackageInstaller, "com.android.shell", 0)
+ }
}
var isBinderAvalable = false
diff --git a/manager/src/main/res/values/strings.xml b/manager/src/main/res/values/strings.xml
index 62fa942..d48278f 100644
--- a/manager/src/main/res/values/strings.xml
+++ b/manager/src/main/res/values/strings.xml
@@ -47,6 +47,7 @@
Installing
Uninstall
Due to different signatures, you need to uninstall the original app before installing the patched one.\nMake sure you have backed up personal data.
+ Uninstalling
Install successfully
Install failed
Copy error