Fix crash

This commit is contained in:
Nullptr 2022-05-05 21:22:36 +08:00
parent 4825c85883
commit 3e4eb34819
4 changed files with 33 additions and 13 deletions

View File

@ -348,8 +348,9 @@ private fun DoPatchBody(modifier: Modifier) {
scope.launch { scope.launch {
snackbarHost.showSnackbar(shizukuUnavailable) snackbarHost.showSnackbar(shizukuUnavailable)
} }
} } else {
installing = true installing = true
}
}, },
content = { Text(stringResource(R.string.patch_install)) } content = { Text(stringResource(R.string.patch_install)) }
) )
@ -384,12 +385,12 @@ private fun InstallDialog(patchApp: AppInfo, onFinish: (Int, String?) -> Unit) {
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()
var uninstallFirst by remember { mutableStateOf(ShizukuApi.isPackageInstalled(patchApp.app.packageName)) } 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 { val doInstall = suspend {
Log.i(TAG, "Installing app ${patchApp.app.packageName}") Log.i(TAG, "Installing app ${patchApp.app.packageName}")
installing = true installing = 1
val (status, message) = LSPPackageInstaller.install() val (status, message) = LSPPackageInstaller.install()
installing = false installing = 0
Log.i(TAG, "Installation end: $status, $message") Log.i(TAG, "Installation end: $status, $message")
onFinish(status, message) onFinish(status, message)
} }
@ -402,11 +403,16 @@ private fun InstallDialog(patchApp: AppInfo, onFinish: (Int, String?) -> Unit) {
onClick = { onClick = {
scope.launch { scope.launch {
Log.i(TAG, "Uninstalling app ${patchApp.app.packageName}") 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 uninstallFirst = false
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() doInstall()
} else {
onFinish(status, message)
}
} }
}, },
content = { Text(stringResource(android.R.string.ok)) } 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( AlertDialog(
onDismissRequest = {}, onDismissRequest = {},
confirmButton = {}, confirmButton = {},
title = { title = {
Text( Text(
modifier = Modifier.fillMaxWidth(), 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, fontFamily = FontFamily.Serif,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )

View File

@ -89,7 +89,7 @@ object LSPPackageInstaller {
} ?: throw IOException("Intent is null") } ?: throw IOException("Intent is null")
}.onFailure { }.onFailure {
status = PackageInstaller.STATUS_FAILURE status = PackageInstaller.STATUS_FAILURE
message = it.message + "\n" + it.stackTraceToString() message = "Exception happened\n$it"
} }
} }
return Pair(status, message) return Pair(status, message)

View File

@ -2,6 +2,7 @@ package org.lsposed.lspatch.util
import android.content.IntentSender import android.content.IntentSender
import android.content.pm.* import android.content.pm.*
import android.os.Build
import android.os.IBinder import android.os.IBinder
import android.os.IInterface import android.os.IInterface
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@ -25,8 +26,20 @@ object ShizukuApi {
} }
private val packageInstaller: PackageInstaller by lazy { private val packageInstaller: PackageInstaller by lazy {
PackageInstaller::class.java.getConstructor(IPackageInstaller::class.java, String::class.java, Int::class.javaPrimitiveType) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
.newInstance(iPackageInstaller, "com.android.shell", 0) 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 var isBinderAvalable = false

View File

@ -47,6 +47,7 @@
<string name="patch_installing">Installing</string> <string name="patch_installing">Installing</string>
<string name="patch_uninstall">Uninstall</string> <string name="patch_uninstall">Uninstall</string>
<string name="patch_uninstall_text">Due to different signatures, you need to uninstall the original app before installing the patched one.\nMake sure you have backed up personal data.</string> <string name="patch_uninstall_text">Due to different signatures, you need to uninstall the original app before installing the patched one.\nMake sure you have backed up personal data.</string>
<string name="patch_uninstalling">Uninstalling</string>
<string name="patch_install_successfully">Install successfully</string> <string name="patch_install_successfully">Install successfully</string>
<string name="patch_install_failed">Install failed</string> <string name="patch_install_failed">Install failed</string>
<string name="patch_copy_error">Copy error</string> <string name="patch_copy_error">Copy error</string>