Don't reset review state until no permission requires a review.

In a permission review mode we have a per user flag whether a
permission review is required for an app to avoid iteration
over all permissions on an activity start. This state was
incorrectly cleared if a permission review flag is cleared
despite the fact that there may me other permissions requiring
a review.

Test: manual

bug:63720758

Change-Id: I3391c9d7e419e2e22f7b053de8e6ed977b6eba91
This commit is contained in:
Svet Ganov
2017-07-14 20:46:43 -07:00
parent 183f9ac263
commit 587512a0cf

View File

@@ -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);