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

Commit 7db7100d authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[pm/uninstall] check if data still exists on any other users before...

Merge "[pm/uninstall] check if data still exists on any other users before fully uninstall" into main
parents eb0f2e31 3490df03
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -459,8 +459,8 @@ final class DeletePackageHelper {
                    // Do not uninstall the APK if an app should be cached
                    boolean keepUninstalledPackage =
                            mPm.shouldKeepUninstalledPackageLPr(packageName);
                    if (ps.isAnyInstalled(
                            mUserManagerInternal.getUserIds()) || keepUninstalledPackage) {
                    if (ps.isInstalledOrHasDataOnAnyOtherUser(
                            mUserManagerInternal.getUserIds(), userId) || keepUninstalledPackage) {
                        // Other users still have this package installed, so all
                        // we need to do is clear this user's data and save that
                        // it is uninstalled.
@@ -555,6 +555,7 @@ final class DeletePackageHelper {
            if ((flags & PackageManager.DELETE_KEEP_DATA) == 0) {
                mAppDataHelper.destroyAppDataLIF(pkg, nextUserId,
                        FLAG_STORAGE_DE | FLAG_STORAGE_CE | FLAG_STORAGE_EXTERNAL);
                ps.setCeDataInode(-1, nextUserId);
            }
            mAppDataHelper.clearKeystoreData(nextUserId, ps.getAppId());
            preferredActivityHelper.clearPackagePreferredActivities(ps.getPackageName(),
@@ -615,7 +616,9 @@ final class DeletePackageHelper {
                Slog.d(TAG, "Marking package:" + ps.getPackageName()
                        + " uninstalled for user:" + nextUserId);
            }
            ps.setUserState(nextUserId, 0, COMPONENT_ENABLED_STATE_DEFAULT,
            ps.setUserState(nextUserId,
                    ps.getCeDataInode(nextUserId),
                    COMPONENT_ENABLED_STATE_DEFAULT,
                    false /*installed*/,
                    true /*stopped*/,
                    true /*notLaunched*/,
+10 −3
Original line number Diff line number Diff line
@@ -809,9 +809,16 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
        return changed;
    }

    boolean isAnyInstalled(int[] users) {
        for (int user: users) {
            if (readUserState(user).isInstalled()) {
    boolean isInstalledOrHasDataOnAnyOtherUser(int[] allUsers, int currentUser) {
        for (int user: allUsers) {
            if (user == currentUser) {
                continue;
            }
            final PackageUserStateInternal userState = readUserState(user);
            if (userState.isInstalled()) {
                return true;
            }
            if (userState.getCeDataInode() > 0) {
                return true;
            }
        }