Add permission annotation to FakeIMediaProjection

All the service implementations require the annotations, even for tests.
Add the annotations and use a fake to grant the permission by default.

Bug: 285807496
Test: atest MediaProjectionTests
Change-Id: Icb90d506b1e424a85df14c0474ad6d139a8da45d
diff --git a/media/tests/projection/Android.bp b/media/tests/projection/Android.bp
index 48cd8b6..c9a8864 100644
--- a/media/tests/projection/Android.bp
+++ b/media/tests/projection/Android.bp
@@ -26,6 +26,7 @@
         "androidx.test.runner",
         "androidx.test.rules",
         "androidx.test.ext.junit",
+        "frameworks-base-testutils",
         "mockito-target-extended-minus-junit4",
         "platform-test-annotations",
         "testng",
diff --git a/media/tests/projection/src/android/media/projection/FakeIMediaProjection.java b/media/tests/projection/src/android/media/projection/FakeIMediaProjection.java
index 4952e01..774de5f 100644
--- a/media/tests/projection/src/android/media/projection/FakeIMediaProjection.java
+++ b/media/tests/projection/src/android/media/projection/FakeIMediaProjection.java
@@ -16,7 +16,11 @@
 
 package android.media.projection;
 
+import static android.Manifest.permission.MANAGE_MEDIA_PROJECTION;
+
+import android.annotation.EnforcePermission;
 import android.os.IBinder;
+import android.os.PermissionEnforcer;
 import android.os.RemoteException;
 
 /**
@@ -28,6 +32,10 @@
     IBinder mLaunchCookie = null;
     IMediaProjectionCallback mIMediaProjectionCallback = null;
 
+    FakeIMediaProjection(PermissionEnforcer enforcer) {
+        super(enforcer);
+    }
+
     @Override
     public void start(IMediaProjectionCallback callback) throws RemoteException {
         mIMediaProjectionCallback = callback;
@@ -56,7 +64,9 @@
     }
 
     @Override
+    @EnforcePermission(MANAGE_MEDIA_PROJECTION)
     public int applyVirtualDisplayFlags(int flags) throws RemoteException {
+        applyVirtualDisplayFlags_enforcePermission();
         return 0;
     }
 
@@ -69,22 +79,30 @@
     }
 
     @Override
+    @EnforcePermission(MANAGE_MEDIA_PROJECTION)
     public IBinder getLaunchCookie() throws RemoteException {
+        getLaunchCookie_enforcePermission();
         return mLaunchCookie;
     }
 
     @Override
+    @EnforcePermission(MANAGE_MEDIA_PROJECTION)
     public void setLaunchCookie(IBinder launchCookie) throws RemoteException {
+        setLaunchCookie_enforcePermission();
         mLaunchCookie = launchCookie;
     }
 
     @Override
+    @EnforcePermission(MANAGE_MEDIA_PROJECTION)
     public boolean isValid() throws RemoteException {
+        isValid_enforcePermission();
         return true;
     }
 
 
     @Override
+    @EnforcePermission(MANAGE_MEDIA_PROJECTION)
     public void notifyVirtualDisplayCreated(int displayId) throws RemoteException {
+        notifyVirtualDisplayCreated_enforcePermission();
     }
 }
diff --git a/media/tests/projection/src/android/media/projection/MediaProjectionTest.java b/media/tests/projection/src/android/media/projection/MediaProjectionTest.java
index 2a5674e..2e0396f 100644
--- a/media/tests/projection/src/android/media/projection/MediaProjectionTest.java
+++ b/media/tests/projection/src/android/media/projection/MediaProjectionTest.java
@@ -16,7 +16,7 @@
 
 package android.media.projection;
 
-
+import static android.Manifest.permission.MANAGE_MEDIA_PROJECTION;
 import static android.media.projection.MediaProjection.MEDIA_PROJECTION_REQUIRES_CALLBACK;
 import static android.view.Display.DEFAULT_DISPLAY;
 
@@ -42,6 +42,7 @@
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.RemoteException;
+import android.os.test.FakePermissionEnforcer;
 import android.platform.test.annotations.Presubmit;
 import android.testing.TestableContext;
 import android.view.Display;
@@ -80,7 +81,7 @@
 
     private final Handler mHandler = new Handler(Looper.getMainLooper());
     // Fake the connection to the system server.
-    private final FakeIMediaProjection mFakeIMediaProjection = new FakeIMediaProjection();
+    private FakeIMediaProjection mFakeIMediaProjection;
     // Callback registered by an app.
     private MediaProjection mMediaProjection;
 
@@ -112,7 +113,10 @@
                         .strictness(Strictness.LENIENT)
                         .startMocking();
 
+        FakePermissionEnforcer permissionEnforcer = new FakePermissionEnforcer();
+        permissionEnforcer.grant(MANAGE_MEDIA_PROJECTION);
         // Support the MediaProjection instance.
+        mFakeIMediaProjection = new FakeIMediaProjection(permissionEnforcer);
         mFakeIMediaProjection.setLaunchCookie(mock(IBinder.class));
         mMediaProjection = new MediaProjection(mTestableContext, mFakeIMediaProjection,
                 mDisplayManager);