summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alex Buynytskyy <alexbuy@google.com> 2023-05-12 19:37:49 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-05-12 19:37:49 +0000
commit65f443a6eb3ab07563ffb63a57020bd8737bf241 (patch)
treedc786036c0e9cc1ba02dcf2f83f073ee3d112114
parentacf0d150697c65ccb3e8deb38c2e5dc55bd9e89d (diff)
parentd08c0ec7403fce314ed0b0d04a1b0976b56cb852 (diff)
Merge "Always send result code to IntentSender, if present." into udc-dev
-rw-r--r--services/core/java/com/android/server/pm/InstallPackageHelper.java23
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerService.java11
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java2
3 files changed, 23 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java
index e18b2e87222d..38d662aaf906 100644
--- a/services/core/java/com/android/server/pm/InstallPackageHelper.java
+++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java
@@ -606,8 +606,8 @@ final class InstallPackageHelper {
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
}
- public int installExistingPackageAsUser(@Nullable String packageName, @UserIdInt int userId,
- @PackageManager.InstallFlags int installFlags,
+ public Pair<Integer, IntentSender> installExistingPackageAsUser(@Nullable String packageName,
+ @UserIdInt int userId, @PackageManager.InstallFlags int installFlags,
@PackageManager.InstallReason int installReason,
@Nullable List<String> allowlistedRestrictedPermissions,
@Nullable IntentSender intentSender) {
@@ -632,7 +632,7 @@ final class InstallPackageHelper {
true /* requireFullPermission */, true /* checkShell */,
"installExistingPackage for user " + userId);
if (mPm.isUserRestricted(userId, UserManager.DISALLOW_INSTALL_APPS)) {
- return PackageManager.INSTALL_FAILED_USER_RESTRICTED;
+ return Pair.create(PackageManager.INSTALL_FAILED_USER_RESTRICTED, intentSender);
}
final long callingId = Binder.clearCallingIdentity();
@@ -648,7 +648,7 @@ final class InstallPackageHelper {
final Computer snapshot = mPm.snapshotComputer();
pkgSetting = mPm.mSettings.getPackageLPr(packageName);
if (pkgSetting == null || pkgSetting.getPkg() == null) {
- return PackageManager.INSTALL_FAILED_INVALID_URI;
+ return Pair.create(PackageManager.INSTALL_FAILED_INVALID_URI, intentSender);
}
if (!snapshot.canViewInstantApps(callingUid, UserHandle.getUserId(callingUid))) {
// only allow the existing package to be used if it's installed as a full
@@ -661,7 +661,7 @@ final class InstallPackageHelper {
}
}
if (!installAllowed) {
- return PackageManager.INSTALL_FAILED_INVALID_URI;
+ return Pair.create(PackageManager.INSTALL_FAILED_INVALID_URI, intentSender);
}
}
if (!pkgSetting.getInstalled(userId)) {
@@ -719,14 +719,17 @@ final class InstallPackageHelper {
}
// start async restore with no post-install since we finish install here
+ final IntentSender onCompleteSender = intentSender;
+ intentSender = null;
+
InstallRequest request = new InstallRequest(userId,
PackageManager.INSTALL_SUCCEEDED, pkgSetting.getPkg(), new int[]{ userId },
() -> {
mPm.restorePermissionsAndUpdateRolesForNewUserInstall(packageName,
userId);
- if (intentSender != null) {
- onRestoreComplete(PackageManager.INSTALL_SUCCEEDED, mContext,
- intentSender);
+ if (onCompleteSender != null) {
+ onInstallComplete(PackageManager.INSTALL_SUCCEEDED, mContext,
+ onCompleteSender);
}
});
restoreAndPostInstall(request);
@@ -735,10 +738,10 @@ final class InstallPackageHelper {
Binder.restoreCallingIdentity(callingId);
}
- return PackageManager.INSTALL_SUCCEEDED;
+ return Pair.create(PackageManager.INSTALL_SUCCEEDED, intentSender);
}
- private static void onRestoreComplete(int returnCode, Context context, IntentSender target) {
+ static void onInstallComplete(int returnCode, Context context, IntentSender target) {
Intent fillIn = new Intent();
fillIn.putExtra(PackageInstaller.EXTRA_STATUS,
PackageManager.installStatusToPublicStatus(returnCode));
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index 1641d61af437..6491fd1b1f98 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -1293,8 +1293,15 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
public void installExistingPackage(String packageName, int installFlags, int installReason,
IntentSender statusReceiver, int userId, List<String> allowListedPermissions) {
final InstallPackageHelper installPackageHelper = new InstallPackageHelper(mPm);
- installPackageHelper.installExistingPackageAsUser(packageName, userId, installFlags,
- installReason, allowListedPermissions, statusReceiver);
+
+ var result = installPackageHelper.installExistingPackageAsUser(packageName, userId,
+ installFlags, installReason, allowListedPermissions, statusReceiver);
+
+ int returnCode = result.first;
+ IntentSender onCompleteSender = result.second;
+ if (onCompleteSender != null) {
+ InstallPackageHelper.onInstallComplete(returnCode, mContext, onCompleteSender);
+ }
}
@Override
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 0c52bb5e7ead..ae520c00d977 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -5350,7 +5350,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
public int installExistingPackageAsUser(String packageName, int userId, int installFlags,
int installReason, List<String> whiteListedPermissions) {
return mInstallPackageHelper.installExistingPackageAsUser(packageName, userId, installFlags,
- installReason, whiteListedPermissions, null);
+ installReason, whiteListedPermissions, null).first;
}
@Override