diff options
| author | 2023-05-12 19:37:49 +0000 | |
|---|---|---|
| committer | 2023-05-12 19:37:49 +0000 | |
| commit | 65f443a6eb3ab07563ffb63a57020bd8737bf241 (patch) | |
| tree | dc786036c0e9cc1ba02dcf2f83f073ee3d112114 | |
| parent | acf0d150697c65ccb3e8deb38c2e5dc55bd9e89d (diff) | |
| parent | d08c0ec7403fce314ed0b0d04a1b0976b56cb852 (diff) | |
Merge "Always send result code to IntentSender, if present." into udc-dev
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 |