From 4a7d3f9e1c0dce81235e33ca267b4f21bdad7499 Mon Sep 17 00:00:00 2001 From: Muntashir Al-Islam Date: Thu, 5 Dec 2024 12:12:48 -0800 Subject: [PATCH] [Backup] Include the reason for a failed APK installation during restore Signed-off-by: Muntashir Al-Islam --- .../AppManager/backup/RestoreOp.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/backup/RestoreOp.java b/app/src/main/java/io/github/muntashirakon/AppManager/backup/RestoreOp.java index f1030660b7b..dec72ca4cc1 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/backup/RestoreOp.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/backup/RestoreOp.java @@ -32,6 +32,7 @@ import java.util.List; import java.util.Locale; import java.util.Objects; +import java.util.concurrent.atomic.AtomicReference; import io.github.muntashirakon.AppManager.apk.ApkFile; import io.github.muntashirakon.AppManager.apk.installer.InstallerOptions; @@ -348,6 +349,7 @@ private void restoreApkFiles() throws BackupException { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { options.setInstallScenario(PackageManager.INSTALL_SCENARIO_BULK); } + AtomicReference status = new AtomicReference<>(); PackageInstallerCompat packageInstaller = PackageInstallerCompat.getNewInstance(); packageInstaller.setOnInstallListener(new PackageInstallerCompat.OnInstallListener() { @Override @@ -363,11 +365,22 @@ public void onAnotherAttemptInMiui(@Nullable ApkFile apkFile) { @Override public void onFinishedInstall(int sessionId, String packageName, int result, @Nullable String blockingPackage, @Nullable String statusMessage) { + status.set(statusMessage); } }); try { if (!packageInstaller.install(allApks, mPackageName, options)) { - throw new BackupException("A (re)install was necessary but couldn't perform it."); + String statusMessage; + if (!isVerified) { + // Previously installed app was uninstalled. + statusMessage = "Couldn't perform a re-installation"; + } else { + statusMessage = "Couldn't perform an installation"; + } + if (status.get() != null) { + statusMessage += ": " + status.get(); + } else statusMessage += "."; + throw new BackupException(statusMessage); } } finally { deleteFiles(allApks); // Clean up apk files