Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 65f443a6 authored by Alex Buynytskyy's avatar Alex Buynytskyy Committed by Android (Google) Code Review
Browse files

Merge "Always send result code to IntentSender, if present." into udc-dev

parents acf0d150 d08c0ec7
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -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));
+9 −2
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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