summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/policy/PermissionPolicyService.java17
1 files changed, 10 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/policy/PermissionPolicyService.java b/services/core/java/com/android/server/policy/PermissionPolicyService.java
index 70ef3d364277..bd9e8923e984 100644
--- a/services/core/java/com/android/server/policy/PermissionPolicyService.java
+++ b/services/core/java/com/android/server/policy/PermissionPolicyService.java
@@ -153,9 +153,10 @@ public final class PermissionPolicyService extends SystemService {
private List<String> mAppOpPermissions;
- private Context mContext;
- private Handler mHandler;
+ private final Context mContext;
+ private final Handler mHandler;
private PackageManagerInternal mPackageManagerInternal;
+ private PermissionManagerServiceInternal mPermissionManagerInternal;
private NotificationManagerInternal mNotificationManager;
private final KeyguardManager mKeyguardManager;
private final PackageManager mPackageManager;
@@ -174,7 +175,7 @@ public final class PermissionPolicyService extends SystemService {
public void onStart() {
mPackageManagerInternal = LocalServices.getService(
PackageManagerInternal.class);
- PermissionManagerServiceInternal permissionManagerInternal = LocalServices.getService(
+ mPermissionManagerInternal = LocalServices.getService(
PermissionManagerServiceInternal.class);
final IAppOpsService appOpsService = IAppOpsService.Stub.asInterface(
ServiceManager.getService(Context.APP_OPS_SERVICE));
@@ -206,7 +207,7 @@ public final class PermissionPolicyService extends SystemService {
}
});
- permissionManagerInternal.addOnRuntimePermissionStateChangedListener(
+ mPermissionManagerInternal.addOnRuntimePermissionStateChangedListener(
this::synchronizePackagePermissionsAndAppOpsAsyncForUser);
mAppOpsCallback = new IAppOpsCallback.Stub() {
@@ -218,7 +219,7 @@ public final class PermissionPolicyService extends SystemService {
};
final ArrayList<PermissionInfo> dangerousPerms =
- permissionManagerInternal.getAllPermissionsWithProtection(
+ mPermissionManagerInternal.getAllPermissionsWithProtection(
PermissionInfo.PROTECTION_DANGEROUS);
try {
int numDangerousPerms = dangerousPerms.size();
@@ -243,7 +244,7 @@ public final class PermissionPolicyService extends SystemService {
}
final List<PermissionInfo> appOpPermissionInfos =
- permissionManagerInternal.getAllPermissionsWithProtectionFlags(
+ mPermissionManagerInternal.getAllPermissionsWithProtectionFlags(
PermissionInfo.PROTECTION_FLAG_APPOP);
mAppOpPermissions = new ArrayList<>();
final int appOpPermissionInfosSize = appOpPermissionInfos.size();
@@ -1283,10 +1284,12 @@ public final class PermissionPolicyService extends SystemService {
}
boolean hasCreatedNotificationChannels = mNotificationManager
.getNumNotificationChannelsForPackage(pkgName, uid, true) > 0;
+ boolean granted = mPermissionManagerInternal.checkUidPermission(uid, POST_NOTIFICATIONS)
+ == PackageManager.PERMISSION_GRANTED;
int flags = mPackageManager.getPermissionFlags(POST_NOTIFICATIONS, pkgName, user);
boolean explicitlySet = (flags & PermissionManager.EXPLICIT_SET_FLAGS) != 0;
boolean needsReview = (flags & FLAG_PERMISSION_REVIEW_REQUIRED) != 0;
- return hasCreatedNotificationChannels && (needsReview || !explicitlySet);
+ return !granted && hasCreatedNotificationChannels && (needsReview || !explicitlySet);
}
}
}