diff --git a/services/core/java/com/android/server/pm/PermissionsState.java b/services/core/java/com/android/server/pm/PermissionsState.java index 8a427cd329e26..f4d2ad2c6eb0c 100644 --- a/services/core/java/com/android/server/pm/PermissionsState.java +++ b/services/core/java/com/android/server/pm/PermissionsState.java @@ -427,7 +427,7 @@ public final class PermissionsState { mPermissionReviewRequired.put(userId, true); } else if ((oldFlags & PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED) != 0 && (newFlags & PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED) == 0) { - if (mPermissionReviewRequired != null) { + if (mPermissionReviewRequired != null && !hasPermissionRequiringReview(userId)) { mPermissionReviewRequired.delete(userId); if (mPermissionReviewRequired.size() <= 0) { mPermissionReviewRequired = null; @@ -438,6 +438,18 @@ public final class PermissionsState { return updated; } + private boolean hasPermissionRequiringReview(int userId) { + final int permissionCount = mPermissions.size(); + for (int i = 0; i < permissionCount; i++) { + final PermissionData permission = mPermissions.valueAt(i); + if ((permission.getFlags(userId) + & PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED) != 0) { + return true; + } + } + return false; + } + public boolean updatePermissionFlagsForAllPermissions( int userId, int flagMask, int flagValues) { enforceValidUserId(userId);