Check for REVIEW_REQUIRED when determining Notification Access
Fixes: 216812098 Test: PermissionHelperTest Change-Id: I91d3dcca3c8aa352353ecfcd493da9ab2ab6edf8
This commit is contained in:
@@ -19,7 +19,7 @@ package com.android.server.notification;
|
||||
import static android.content.pm.PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED;
|
||||
import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET;
|
||||
import static android.content.pm.PackageManager.GET_PERMISSIONS;
|
||||
import static android.permission.PermissionManager.PERMISSION_GRANTED;
|
||||
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.NonNull;
|
||||
@@ -77,7 +77,8 @@ public final class PermissionHelper {
|
||||
assertFlag();
|
||||
final long callingId = Binder.clearCallingIdentity();
|
||||
try {
|
||||
return mPmi.checkUidPermission(uid, NOTIFICATION_PERMISSION) == PERMISSION_GRANTED;
|
||||
return mPmi.checkPostNotificationsPermissionGrantedOrLegacyAccess(uid)
|
||||
== PERMISSION_GRANTED;
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(callingId);
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.server.pm.permission;
|
||||
|
||||
import static android.Manifest.permission.CAPTURE_AUDIO_HOTWORD;
|
||||
import static android.Manifest.permission.POST_NOTIFICATIONS;
|
||||
import static android.Manifest.permission.RECORD_AUDIO;
|
||||
import static android.Manifest.permission.UPDATE_APP_OPS_STATS;
|
||||
import static android.app.AppOpsManager.ATTRIBUTION_CHAIN_ID_NONE;
|
||||
@@ -607,6 +608,21 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
||||
return PermissionManagerService.this.checkUidPermission(uid, permissionName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int checkPostNotificationsPermissionGrantedOrLegacyAccess(int uid) {
|
||||
int granted = PermissionManagerService.this.checkUidPermission(uid,
|
||||
POST_NOTIFICATIONS);
|
||||
AndroidPackage pkg = mPackageManagerInt.getPackage(uid);
|
||||
if (granted != PermissionManager.PERMISSION_GRANTED) {
|
||||
int flags = PermissionManagerService.this.getPermissionFlags(pkg.getPackageName(),
|
||||
POST_NOTIFICATIONS, UserHandle.getUserId(uid));
|
||||
if ((flags & PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED) != 0) {
|
||||
return PermissionManager.PERMISSION_GRANTED;
|
||||
}
|
||||
}
|
||||
return granted;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startShellPermissionIdentityDelegation(int uid, @NonNull String packageName,
|
||||
@Nullable List<String> permissionNames) {
|
||||
|
||||
@@ -62,6 +62,17 @@ public interface PermissionManagerServiceInternal extends PermissionManagerInter
|
||||
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
|
||||
int checkUidPermission(int uid, @NonNull String permissionName);
|
||||
|
||||
/**
|
||||
* Check whether a particular UID has been granted the POST_NOTIFICATIONS permission, or if
|
||||
* access should be granted based on legacy access (currently symbolized by the REVIEW_REQUIRED
|
||||
* permission flag
|
||||
*
|
||||
* @param uid the UID
|
||||
* @return {@code PERMISSION_GRANTED} if the permission is granted, or legacy access is granted,
|
||||
* {@code PERMISSION_DENIED} otherwise
|
||||
*/
|
||||
int checkPostNotificationsPermissionGrantedOrLegacyAccess(int uid);
|
||||
|
||||
/**
|
||||
* Adds a listener for runtime permission state (permissions or flags) changes.
|
||||
*
|
||||
|
||||
@@ -20,8 +20,8 @@ import static android.content.pm.PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED;
|
||||
import static android.content.pm.PackageManager.FLAG_PERMISSION_SYSTEM_FIXED;
|
||||
import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET;
|
||||
import static android.content.pm.PackageManager.GET_PERMISSIONS;
|
||||
import static android.permission.PermissionManager.PERMISSION_GRANTED;
|
||||
import static android.permission.PermissionManager.PERMISSION_SOFT_DENIED;
|
||||
import static android.content.pm.PackageManager.PERMISSION_DENIED;
|
||||
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
@@ -130,13 +130,13 @@ public class PermissionHelperTest extends UiServiceTestCase {
|
||||
|
||||
@Test
|
||||
public void testHasPermission() throws Exception {
|
||||
when(mPmi.checkUidPermission(anyInt(), eq(Manifest.permission.POST_NOTIFICATIONS)))
|
||||
when(mPmi.checkPostNotificationsPermissionGrantedOrLegacyAccess(anyInt()))
|
||||
.thenReturn(PERMISSION_GRANTED);
|
||||
|
||||
assertThat(mPermissionHelper.hasPermission(1)).isTrue();
|
||||
|
||||
when(mPmi.checkUidPermission(anyInt(), eq(Manifest.permission.POST_NOTIFICATIONS)))
|
||||
.thenReturn(PERMISSION_SOFT_DENIED);
|
||||
when(mPmi.checkPostNotificationsPermissionGrantedOrLegacyAccess(anyInt()))
|
||||
.thenReturn(PERMISSION_DENIED);
|
||||
|
||||
assertThat(mPermissionHelper.hasPermission(1)).isFalse();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user