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

Commit 92dfab8d authored by Tony Mak's avatar Tony Mak Committed by Android (Google) Code Review
Browse files

Merge "Clear granted permission when app is uninstalled by one of the multiple users" into mnc-dev

parents 1f98e79a 8e33f630
Loading
Loading
Loading
Loading
+27 −1
Original line number Diff line number Diff line
@@ -12500,6 +12500,8 @@ public class PackageManagerService extends IPackageManager.Stub {
                if (clearPackagePreferredActivitiesLPw(packageName, removeUser)) {
                    scheduleWritePackageRestrictionsLocked(removeUser);
                }
                revokeRuntimePermissionsAndClearAllFlagsLocked(ps.getPermissionsState(),
                        removeUser);
            }
            return true;
        }
@@ -12706,13 +12708,37 @@ public class PackageManagerService extends IPackageManager.Stub {
                | PackageManager.FLAG_PERMISSION_USER_FIXED
                | PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE;
        revokeRuntimePermissionsAndClearFlagsLocked(permissionsState, userId, userSetFlags);
    }
    /**
     * Revokes granted runtime permissions and clears all flags.
     *
     * @param permissionsState The permission state to reset.
     * @param userId The device user for which to do a reset.
     */
    private void revokeRuntimePermissionsAndClearAllFlagsLocked(
            PermissionsState permissionsState, int userId) {
        revokeRuntimePermissionsAndClearFlagsLocked(permissionsState, userId,
                PackageManager.MASK_PERMISSION_FLAGS);
    }
    /**
     * Revokes granted runtime permissions and clears certain flags.
     *
     * @param permissionsState The permission state to reset.
     * @param userId The device user for which to do a reset.
     * @param flags The flags that is going to be reset.
     */
    private void revokeRuntimePermissionsAndClearFlagsLocked(
            PermissionsState permissionsState, int userId, int flags) {
        boolean needsWrite = false;
        for (PermissionState state : permissionsState.getRuntimePermissionStates(userId)) {
            BasePermission bp = mSettings.mPermissions.get(state.getName());
            if (bp != null) {
                permissionsState.revokeRuntimePermission(bp, userId);
                permissionsState.updatePermissionFlags(bp, userId, userSetFlags, 0);
                permissionsState.updatePermissionFlags(bp, userId, flags, 0);
                needsWrite = true;
            }
        }