diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index fcdf4403902d7..9f9fd3ceb5f71 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -6201,7 +6201,7 @@ public abstract class Context { */ @CheckResult(suggest="#enforceCallingOrSelfPermission(String,String)") @PackageManager.PermissionResult - @PermissionMethod + @PermissionMethod(orSelf = true) public abstract int checkCallingOrSelfPermission(@NonNull @PermissionName String permission); /** @@ -6269,7 +6269,7 @@ public abstract class Context { * * @see #checkCallingOrSelfPermission(String) */ - @PermissionMethod + @PermissionMethod(orSelf = true) public abstract void enforceCallingOrSelfPermission( @NonNull @PermissionName String permission, @Nullable String message); diff --git a/core/java/android/content/pm/PermissionMethod.java b/core/java/android/content/pm/PermissionMethod.java index ba97342c5e3ee..647c696b87f33 100644 --- a/core/java/android/content/pm/PermissionMethod.java +++ b/core/java/android/content/pm/PermissionMethod.java @@ -33,4 +33,20 @@ import java.lang.annotation.Target; */ @Retention(CLASS) @Target({METHOD}) -public @interface PermissionMethod {} +public @interface PermissionMethod { + /** + * Hard-coded list of permissions checked by this method + */ + @PermissionName String[] value() default {}; + /** + * If true, the check passes if the caller + * has any ONE of the supplied permissions + */ + boolean anyOf() default false; + /** + * Signifies that the permission check passes if + * the calling process OR the current process has + * the permission + */ + boolean orSelf() default false; +} diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 2a6ad39222390..ea0addafd1ae2 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -6142,6 +6142,7 @@ public class ActivityManagerService extends IActivityManager.Stub /** * This can be called with or without the global lock held. */ + @PermissionMethod(anyOf = true) private void enforceCallingHasAtLeastOnePermission(String func, String... permissions) { for (String permission : permissions) { if (checkCallingPermission(permission) == PackageManager.PERMISSION_GRANTED) {