Merge "Do not grant already granted permission"
diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
index 212df43..e6e2c76 100644
--- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
@@ -1089,6 +1089,8 @@
private void grantRuntimePermissions(PackageInfo pkg,
Set<String> permissionsWithoutSplits, boolean systemFixed, boolean ignoreSystemPackage,
int userId) {
+ UserHandle user = UserHandle.of(userId);
+
if (pkg == null) {
return;
}
@@ -1109,7 +1111,14 @@
}
requestedPermissions = ArrayUtils.filterNotNull(requestedPermissions, String[]::new);
- PackageManager pm = mContext.getPackageManager();
+ PackageManager pm;
+ try {
+ pm = mContext.createPackageContextAsUser(mContext.getPackageName(), 0,
+ user).getPackageManager();
+ } catch (NameNotFoundException doesNotHappen) {
+ throw new IllegalStateException(doesNotHappen);
+ }
+
final ArraySet<String> permissions = new ArraySet<>(permissionsWithoutSplits);
ApplicationInfo applicationInfo = pkg.applicationInfo;
@@ -1187,7 +1196,6 @@
}
if (permissions.contains(permission)) {
- UserHandle user = UserHandle.of(userId);
final int flags = mContext.getPackageManager().getPermissionFlags(
permission, pkg.packageName, user);
@@ -1210,8 +1218,11 @@
UserHandle.getAppId(pkg.applicationInfo.uid));
String op = AppOpsManager.permissionToOp(permission);
- mContext.getPackageManager()
- .grantRuntimePermission(pkg.packageName, permission, user);
+ if (pm.checkPermission(permission, pkg.packageName)
+ != PackageManager.PERMISSION_GRANTED) {
+ mContext.getPackageManager()
+ .grantRuntimePermission(pkg.packageName, permission, user);
+ }
mContext.getPackageManager().updatePermissionFlags(permission, pkg.packageName,
newFlags, newFlags, user);