summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/content/Context.java4
-rw-r--r--core/java/android/content/pm/PermissionMethod.java18
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java1
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) {