diff options
| -rw-r--r-- | core/java/android/content/Context.java | 4 | ||||
| -rw-r--r-- | core/java/android/content/pm/PermissionMethod.java | 18 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 1 |
3 files changed, 20 insertions, 3 deletions
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index ae1f68958d0f..05beef8ce358 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -6172,7 +6172,7 @@ public abstract class Context { */ @CheckResult(suggest="#enforceCallingOrSelfPermission(String,String)") @PackageManager.PermissionResult - @PermissionMethod + @PermissionMethod(orSelf = true) public abstract int checkCallingOrSelfPermission(@NonNull @PermissionName String permission); /** @@ -6240,7 +6240,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 ba97342c5e3e..647c696b87f3 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 6394d7744645..c48fb66fe3e7 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -6141,6 +6141,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) { |