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

Commit d0f4400f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Cleanup omissions when adding app ID migration to PMS"

parents 33d1c2a2 37f4c472
Loading
Loading
Loading
Loading
+11 −13
Original line number Diff line number Diff line
@@ -431,10 +431,9 @@ final class DeletePackageHelper {
            if (DEBUG_REMOVE) Slog.d(TAG, "Removing system package: " + ps.getPackageName());
            // When an updated system application is deleted we delete the existing resources
            // as well and fall back to existing code in system partition
            PackageSetting disabledPs = deleteInstalledSystemPackage(action, ps, allUserHandles,
                    flags, outInfo, writeSettings);
            deleteInstalledSystemPackage(action, allUserHandles, writeSettings);
            new InstallPackageHelper(mPm).restoreDisabledSystemPackageLIF(
                    action, ps, allUserHandles, outInfo, writeSettings, disabledPs);
                    action, allUserHandles, writeSettings);
        } else {
            if (DEBUG_REMOVE) Slog.d(TAG, "Removing non-system package: " + ps.getPackageName());
            deleteInstalledPackageLIF(ps, deleteCodeAndResources, flags, allUserHandles,
@@ -561,10 +560,11 @@ final class DeletePackageHelper {
        mPm.mSettings.writeKernelMappingLPr(ps);
    }

    private PackageSetting deleteInstalledSystemPackage(DeletePackageAction action,
            PackageSetting deletedPs,
            @NonNull int[] allUserHandles, int flags, @Nullable PackageRemovedInfo outInfo,
            boolean writeSettings) {
    private void deleteInstalledSystemPackage(DeletePackageAction action,
            @NonNull int[] allUserHandles, boolean writeSettings) {
        int flags = action.mFlags;
        final PackageSetting deletedPs = action.mDeletingPs;
        final PackageRemovedInfo outInfo = action.mRemovedInfo;
        final boolean applyUserRestrictions = outInfo != null && (outInfo.mOrigUsers != null);
        final AndroidPackage deletedPkg = deletedPs.getPkg();
        // Confirm if the system package has been updated
@@ -593,18 +593,16 @@ final class DeletePackageHelper {
            outInfo.mIsRemovedPackageSystemUpdate = true;
        }

        if (disabledPs.getVersionCode() < deletedPs.getVersionCode()) {
            // Delete data for downgrades
        if (disabledPs.getVersionCode() < deletedPs.getVersionCode()
                || disabledPs.getAppId() != deletedPs.getAppId()) {
            // Delete data for downgrades, or when the system app changed appId
            flags &= ~PackageManager.DELETE_KEEP_DATA;
        } else {
            // Preserve data by setting flag
            flags |= PackageManager.DELETE_KEEP_DATA;
        }

        deleteInstalledPackageLIF(deletedPs, true, flags, allUserHandles,
                outInfo, writeSettings);

        return disabledPs;
        deleteInstalledPackageLIF(deletedPs, true, flags, allUserHandles, outInfo, writeSettings);
    }

    public void deletePackageVersionedInternal(VersionedPackage versionedPackage,
+31 −25
Original line number Diff line number Diff line
@@ -494,7 +494,13 @@ final class InstallPackageHelper {
        if (request.mPkgSetting != null && request.mPkgSetting.getSharedUser() != null
                && request.mPkgSetting.getSharedUser() != result.mPkgSetting.getSharedUser()) {
            // shared user changed, remove from old shared user
            request.mPkgSetting.getSharedUser().removePackage(request.mPkgSetting);
            final SharedUserSetting sus = request.mPkgSetting.getSharedUser();
            sus.removePackage(request.mPkgSetting);
            // Prune unused SharedUserSetting
            if (mPm.mSettings.checkAndPruneSharedUserLPw(sus, false)) {
                // Set the app ID in removed info for UID_REMOVED broadcasts
                reconciledPkg.mInstallResult.mRemovedInfo.mRemovedAppId = sus.userId;
            }
        }
        if (result.mExistingSettingCopied) {
            pkgSetting = request.mPkgSetting;
@@ -3455,14 +3461,12 @@ final class InstallPackageHelper {
    /**
     * Tries to restore the disabled system package after an update has been deleted.
     */
    @GuardedBy({"mPm.mLock", "mPm.mInstallLock"})
    public void restoreDisabledSystemPackageLIF(DeletePackageAction action,
            PackageSetting deletedPs, @NonNull int[] allUserHandles,
            @Nullable PackageRemovedInfo outInfo,
            boolean writeSettings,
            PackageSetting disabledPs)
            throws SystemDeleteException {
        // writer
            @NonNull int[] allUserHandles, boolean writeSettings) throws SystemDeleteException {
        final PackageSetting deletedPs = action.mDeletingPs;
        final PackageRemovedInfo outInfo = action.mRemovedInfo;
        final PackageSetting disabledPs = action.mDisabledPs;

        synchronized (mPm.mLock) {
            // NOTE: The system package always needs to be enabled; even if it's for
            // a compressed stub. If we don't, installing the system package fails
@@ -3472,13 +3476,14 @@ final class InstallPackageHelper {
            mPm.mSettings.enableSystemPackageLPw(disabledPs.getPkg().getPackageName());
            // Remove any native libraries from the upgraded package.
            removeNativeBinariesLI(deletedPs);
        }

            // Install the system package
            if (DEBUG_REMOVE) Slog.d(TAG, "Re-installing system package: " + disabledPs);
            try {
                synchronized (mPm.mInstallLock) {
                    installPackageFromSystemLIF(disabledPs.getPathString(), allUserHandles,
                            outInfo == null ? null : outInfo.mOrigUsers, writeSettings);
                }
            } catch (PackageManagerException e) {
                Slog.w(TAG, "Failed to restore system package:" + deletedPs.getPackageName() + ": "
                        + e.getMessage());
@@ -3493,6 +3498,7 @@ final class InstallPackageHelper {
                }
            }
        }
    }

    @GuardedBy("mPm.mLock")
    private void disableStubPackage(DeletePackageAction action, PackageSetting deletedPs,
+9 −4
Original line number Diff line number Diff line
@@ -1254,11 +1254,14 @@ public final class Settings implements Watchable, Snappable {
        }
    }

    private void checkAndPruneSharedUserLPw(SharedUserSetting s, boolean skipCheck) {
    boolean checkAndPruneSharedUserLPw(SharedUserSetting s, boolean skipCheck) {
        if (skipCheck || (s.packages.isEmpty() && s.mDisabledPackages.isEmpty())) {
            mSharedUsers.remove(s.name);
            if (mSharedUsers.remove(s.name) != null) {
                removeAppIdLPw(s.userId);
                return true;
            }
        }
        return false;
    }

    int removePackageLPw(String name) {
@@ -1267,7 +1270,9 @@ public final class Settings implements Watchable, Snappable {
            removeInstallerPackageStatus(name);
            if (p.getSharedUser() != null) {
                p.getSharedUser().removePackage(p);
                checkAndPruneSharedUserLPw(p.getSharedUser(), false);
                if (checkAndPruneSharedUserLPw(p.getSharedUser(), false)) {
                    return p.getSharedUser().userId;
                }
            } else {
                removeAppIdLPw(p.getAppId());
                return p.getAppId();