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);