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

Commit d08c0ec7 authored by Alex Buynytskyy's avatar Alex Buynytskyy
Browse files

Always send result code to IntentSender, if present.

Bug: 276185613
Fixes: 276185613
Test: atest CtsPackageInstallTestCases
Change-Id: Ic3bc9acbab68fa5f0dce6e11cd718973a4c53406
parent 90c01a2a
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -613,8 +613,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) {
@@ -639,7 +639,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();
@@ -655,7 +655,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
@@ -668,7 +668,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)) {
@@ -726,14 +726,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);
@@ -742,10 +745,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
@@ -1292,8 +1292,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
@@ -5342,7 +5342,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