Merge "Do not launch legacy notification dialog if permission is granted" into tm-dev am: c5026d4236
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17263317 Change-Id: I481d98754c36785b3c5d7fbf6ecb9079cefb7b45
This commit is contained in:
@@ -153,9 +153,10 @@ public final class PermissionPolicyService extends SystemService {
|
|||||||
|
|
||||||
private List<String> mAppOpPermissions;
|
private List<String> mAppOpPermissions;
|
||||||
|
|
||||||
private Context mContext;
|
private final Context mContext;
|
||||||
private Handler mHandler;
|
private final Handler mHandler;
|
||||||
private PackageManagerInternal mPackageManagerInternal;
|
private PackageManagerInternal mPackageManagerInternal;
|
||||||
|
private PermissionManagerServiceInternal mPermissionManagerInternal;
|
||||||
private NotificationManagerInternal mNotificationManager;
|
private NotificationManagerInternal mNotificationManager;
|
||||||
private final KeyguardManager mKeyguardManager;
|
private final KeyguardManager mKeyguardManager;
|
||||||
private final PackageManager mPackageManager;
|
private final PackageManager mPackageManager;
|
||||||
@@ -174,7 +175,7 @@ public final class PermissionPolicyService extends SystemService {
|
|||||||
public void onStart() {
|
public void onStart() {
|
||||||
mPackageManagerInternal = LocalServices.getService(
|
mPackageManagerInternal = LocalServices.getService(
|
||||||
PackageManagerInternal.class);
|
PackageManagerInternal.class);
|
||||||
PermissionManagerServiceInternal permissionManagerInternal = LocalServices.getService(
|
mPermissionManagerInternal = LocalServices.getService(
|
||||||
PermissionManagerServiceInternal.class);
|
PermissionManagerServiceInternal.class);
|
||||||
final IAppOpsService appOpsService = IAppOpsService.Stub.asInterface(
|
final IAppOpsService appOpsService = IAppOpsService.Stub.asInterface(
|
||||||
ServiceManager.getService(Context.APP_OPS_SERVICE));
|
ServiceManager.getService(Context.APP_OPS_SERVICE));
|
||||||
@@ -206,7 +207,7 @@ public final class PermissionPolicyService extends SystemService {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
permissionManagerInternal.addOnRuntimePermissionStateChangedListener(
|
mPermissionManagerInternal.addOnRuntimePermissionStateChangedListener(
|
||||||
this::synchronizePackagePermissionsAndAppOpsAsyncForUser);
|
this::synchronizePackagePermissionsAndAppOpsAsyncForUser);
|
||||||
|
|
||||||
mAppOpsCallback = new IAppOpsCallback.Stub() {
|
mAppOpsCallback = new IAppOpsCallback.Stub() {
|
||||||
@@ -218,7 +219,7 @@ public final class PermissionPolicyService extends SystemService {
|
|||||||
};
|
};
|
||||||
|
|
||||||
final ArrayList<PermissionInfo> dangerousPerms =
|
final ArrayList<PermissionInfo> dangerousPerms =
|
||||||
permissionManagerInternal.getAllPermissionsWithProtection(
|
mPermissionManagerInternal.getAllPermissionsWithProtection(
|
||||||
PermissionInfo.PROTECTION_DANGEROUS);
|
PermissionInfo.PROTECTION_DANGEROUS);
|
||||||
try {
|
try {
|
||||||
int numDangerousPerms = dangerousPerms.size();
|
int numDangerousPerms = dangerousPerms.size();
|
||||||
@@ -243,7 +244,7 @@ public final class PermissionPolicyService extends SystemService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final List<PermissionInfo> appOpPermissionInfos =
|
final List<PermissionInfo> appOpPermissionInfos =
|
||||||
permissionManagerInternal.getAllPermissionsWithProtectionFlags(
|
mPermissionManagerInternal.getAllPermissionsWithProtectionFlags(
|
||||||
PermissionInfo.PROTECTION_FLAG_APPOP);
|
PermissionInfo.PROTECTION_FLAG_APPOP);
|
||||||
mAppOpPermissions = new ArrayList<>();
|
mAppOpPermissions = new ArrayList<>();
|
||||||
final int appOpPermissionInfosSize = appOpPermissionInfos.size();
|
final int appOpPermissionInfosSize = appOpPermissionInfos.size();
|
||||||
@@ -1283,10 +1284,12 @@ public final class PermissionPolicyService extends SystemService {
|
|||||||
}
|
}
|
||||||
boolean hasCreatedNotificationChannels = mNotificationManager
|
boolean hasCreatedNotificationChannels = mNotificationManager
|
||||||
.getNumNotificationChannelsForPackage(pkgName, uid, true) > 0;
|
.getNumNotificationChannelsForPackage(pkgName, uid, true) > 0;
|
||||||
|
boolean granted = mPermissionManagerInternal.checkUidPermission(uid, POST_NOTIFICATIONS)
|
||||||
|
== PackageManager.PERMISSION_GRANTED;
|
||||||
int flags = mPackageManager.getPermissionFlags(POST_NOTIFICATIONS, pkgName, user);
|
int flags = mPackageManager.getPermissionFlags(POST_NOTIFICATIONS, pkgName, user);
|
||||||
boolean explicitlySet = (flags & PermissionManager.EXPLICIT_SET_FLAGS) != 0;
|
boolean explicitlySet = (flags & PermissionManager.EXPLICIT_SET_FLAGS) != 0;
|
||||||
boolean needsReview = (flags & FLAG_PERMISSION_REVIEW_REQUIRED) != 0;
|
boolean needsReview = (flags & FLAG_PERMISSION_REVIEW_REQUIRED) != 0;
|
||||||
return hasCreatedNotificationChannels && (needsReview || !explicitlySet);
|
return !granted && hasCreatedNotificationChannels && (needsReview || !explicitlySet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user