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