diff --git a/core/java/android/os/PermissionEnforcer.java b/core/java/android/os/PermissionEnforcer.java index d772fe3bd037b..91d22698d7df7 100644 --- a/core/java/android/os/PermissionEnforcer.java +++ b/core/java/android/os/PermissionEnforcer.java @@ -34,6 +34,38 @@ import android.permission.PermissionCheckerManager; * PermissionEnforcer to validate the permissions. The methods available are * purposely similar to the AIDL annotation syntax. * + *

The constructor of the Stub generated by AIDL expects a + * PermissionEnforcer. It can be based on the current Context. For example: + * + *

{@code
+ * class MyFoo extends Foo.Stub {
+ *     MyFoo(Context context) {
+ *         super(PermissionEnforcer.fromContext(context));
+ *     }
+ *
+ *     @Override
+ *     @EnforcePermission(android.Manifest.permission.INTERNET)
+ *     public MyMethod() {
+ *         MyMethod_enforcePermission();
+ *     }
+ * }
+ * }
+ * + *

A {@link android.os.test.FakePermissionEnforcer} is available for unit + * testing. It can be attached to a mocked Context using: + *

{@code
+ * @Mock private Context mContext;
+ *
+ * @Before
+ * public setUp() {
+ *   fakeEnforcer = new FakePermissionEnforcer();
+ *   fakeEnforcer.grant(android.Manifest.permission.INTERNET);
+ *
+ *   doReturn(fakeEnforcer).when(mContext).getSystemService(
+                eq(Context.PERMISSION_ENFORCER_SERVICE));
+ * }
+ * }
+ * * @see android.permission.PermissionManager * * @hide