diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/permission/PermissionManagerService.java | 11 | ||||
| -rw-r--r-- | services/core/java/com/android/server/policy/PermissionPolicyService.java | 5 |
2 files changed, 13 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index 89908f04a6b3..b232b7e968bd 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -53,6 +53,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.ActivityManager; +import android.app.AppOpsManager; import android.app.ApplicationPackageManager; import android.app.IActivityManager; import android.content.Context; @@ -1541,6 +1542,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } }; + final AppOpsManager appOpsManager = mContext.getSystemService(AppOpsManager.class); for (int i = 0; i < permissionCount; i++) { final String permName = pkg.requestedPermissions.get(i); final BasePermission bp; @@ -1606,9 +1608,16 @@ public class PermissionManagerService extends IPermissionManager.Stub { // If this permission was granted by default, make sure it is. if ((oldFlags & FLAG_PERMISSION_GRANTED_BY_DEFAULT) != 0) { - // PermissionPolicyService will handle the app op for runtime permissions later. grantRuntimePermissionInternal(permName, packageName, false, Process.SYSTEM_UID, userId, delayingPermCallback); + // Allow app op later as we are holding mPackages + // PermissionPolicyService will handle the app op for foreground/background + // permissions. + String appOp = AppOpsManager.permissionToOp(permName); + if (appOp != null) { + mHandler.post(() -> appOpsManager.setUidMode(appOp, uid, + AppOpsManager.MODE_ALLOWED)); + } // If permission review is enabled the permissions for a legacy apps // are represented as constantly granted runtime ones, so don't revoke. } else if ((flags & FLAG_PERMISSION_REVIEW_REQUIRED) == 0) { diff --git a/services/core/java/com/android/server/policy/PermissionPolicyService.java b/services/core/java/com/android/server/policy/PermissionPolicyService.java index df2b3caaacce..b892360ed61e 100644 --- a/services/core/java/com/android/server/policy/PermissionPolicyService.java +++ b/services/core/java/com/android/server/policy/PermissionPolicyService.java @@ -152,7 +152,7 @@ public final class PermissionPolicyService extends SystemService { for (int i = 0; i < numDangerousPerms; i++) { PermissionInfo perm = dangerousPerms.get(i); - if (perm.isRuntime()) { + if (perm.isRestricted() || perm.backgroundPermission != null) { appOpsService.startWatchingMode(getSwitchOp(perm.name), null, appOpsListener); } if (perm.isSoftRestricted()) { @@ -499,7 +499,8 @@ public final class PermissionPolicyService extends SystemService { private void addPermissionAppOp(@NonNull PackageInfo packageInfo, @NonNull PermissionInfo permissionInfo) { - if (!permissionInfo.isRuntime()) { + // TODO: Sync all permissions in the future. + if (!permissionInfo.isRestricted() && permissionInfo.backgroundPermission == null) { return; } |