Add CTS for blocking an activity from launching
Add CTS for blocking an activity from launching in new task or existing
task if DWPC does not allow it.
Bug: 205811272
Test: atest ActivityBlockingTest ActivityStarterTests
Change-Id: I90ec39eae55f6954589f2778014fe66f154c5be8
diff --git a/tests/tests/virtualdevice/src/android/virtualdevice/cts/ActivityBlockingTest.java b/tests/tests/virtualdevice/src/android/virtualdevice/cts/ActivityBlockingTest.java
index 7e81b08..ab1aaf1 100644
--- a/tests/tests/virtualdevice/src/android/virtualdevice/cts/ActivityBlockingTest.java
+++ b/tests/tests/virtualdevice/src/android/virtualdevice/cts/ActivityBlockingTest.java
@@ -28,13 +28,15 @@
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
import static org.junit.Assert.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.after;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.verify;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.Activity;
import android.companion.virtual.VirtualDeviceManager;
@@ -43,8 +45,10 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.graphics.PixelFormat;
import android.hardware.display.DisplayManager;
import android.hardware.display.VirtualDisplay;
+import android.media.ImageReader;
import android.os.ResultReceiver;
import android.platform.test.annotations.AppModeFull;
import android.virtualdevice.cts.util.EmptyActivity;
@@ -115,18 +119,8 @@
@Test
public void nonTrustedDisplay_startNonEmbeddableActivity_shouldThrowSecurityException() {
- mVirtualDevice =
- mVirtualDeviceManager.createVirtualDevice(
- mFakeAssociationRule.getAssociationInfo().getId(),
- DEFAULT_VIRTUAL_DEVICE_PARAMS);
- VirtualDisplay virtualDisplay = mVirtualDevice.createVirtualDisplay(
- /* width= */ 100,
- /* height= */ 100,
- /* densityDpi= */ 240,
- /* surface= */ null,
- /* flags= */ 0,
- Runnable::run,
- mVirtualDisplayCallback);
+ VirtualDisplay virtualDisplay = createVirtualDisplay(DEFAULT_VIRTUAL_DEVICE_PARAMS,
+ /* virtualDisplayFlags= */ 0);
Intent intent = TestAppHelper.createNoEmbedIntent()
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
@@ -137,18 +131,8 @@
@Test
public void cannotDisplayOnRemoteActivity_shouldBeBlockedFromLaunching() {
- mVirtualDevice =
- mVirtualDeviceManager.createVirtualDevice(
- mFakeAssociationRule.getAssociationInfo().getId(),
- DEFAULT_VIRTUAL_DEVICE_PARAMS);
- VirtualDisplay virtualDisplay = mVirtualDevice.createVirtualDisplay(
- /* width= */ 100,
- /* height= */ 100,
- /* densityDpi= */ 240,
- /* surface= */ null,
- /* flags= */ 0,
- Runnable::run,
- mVirtualDisplayCallback);
+ VirtualDisplay virtualDisplay = createVirtualDisplay(DEFAULT_VIRTUAL_DEVICE_PARAMS,
+ /* virtualDisplayFlags= */ 0);
EmptyActivity emptyActivity = (EmptyActivity) InstrumentationRegistry.getInstrumentation()
.startActivitySync(
@@ -157,30 +141,21 @@
| Intent.FLAG_ACTIVITY_CLEAR_TASK),
createActivityOptions(virtualDisplay));
- emptyActivity.startActivity(
- TestAppHelper.createCannotDisplayOnRemoteIntent(mResultReceiver));
+ emptyActivity.startActivity(TestAppHelper.createCannotDisplayOnRemoteIntent(
+ /* newTask= */ true, mResultReceiver));
+ verify(mOnReceiveResultListener, after(3000).never())
+ .onReceiveResult(anyInt(), any());
- verify(mOnReceiveResultListener, after(3000).never()).onReceiveResult(
- eq(Activity.RESULT_OK),
- argThat(result ->
- result.getInt(TestAppHelper.EXTRA_DISPLAY)
- == virtualDisplay.getDisplay().getDisplayId()));
+ emptyActivity.startActivity(TestAppHelper.createCannotDisplayOnRemoteIntent(
+ /* newTask= */ false, mResultReceiver));
+ verify(mOnReceiveResultListener, after(3000).never())
+ .onReceiveResult(anyInt(), any());
}
@Test
public void trustedDisplay_startNonEmbeddableActivity_shouldSucceed() {
- mVirtualDevice =
- mVirtualDeviceManager.createVirtualDevice(
- mFakeAssociationRule.getAssociationInfo().getId(),
- DEFAULT_VIRTUAL_DEVICE_PARAMS);
- VirtualDisplay virtualDisplay = mVirtualDevice.createVirtualDisplay(
- /* width= */ 100,
- /* height= */ 100,
- /* densityDpi= */ 240,
- /* surface= */ null,
- /* flags= */ DisplayManager.VIRTUAL_DISPLAY_FLAG_TRUSTED,
- Runnable::run,
- mVirtualDisplayCallback);
+ VirtualDisplay virtualDisplay = createVirtualDisplay(DEFAULT_VIRTUAL_DEVICE_PARAMS,
+ DisplayManager.VIRTUAL_DISPLAY_FLAG_TRUSTED);
Intent intent = TestAppHelper.createActivityLaunchedReceiverIntent(mResultReceiver)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
@@ -198,20 +173,10 @@
public void setAllowedActivities_shouldBlockNonAllowedActivities() {
Context context = getApplicationContext();
ComponentName emptyActivityComponentName = new ComponentName(context, EmptyActivity.class);
- mVirtualDevice =
- mVirtualDeviceManager.createVirtualDevice(
- mFakeAssociationRule.getAssociationInfo().getId(),
- new VirtualDeviceParams.Builder()
- .setAllowedActivities(Set.of(emptyActivityComponentName))
- .build());
- VirtualDisplay virtualDisplay = mVirtualDevice.createVirtualDisplay(
- /* width= */ 100,
- /* height= */ 100,
- /* densityDpi= */ 240,
- /* surface= */ null,
- /* flags= */ 0,
- Runnable::run,
- mVirtualDisplayCallback);
+ VirtualDisplay virtualDisplay = createVirtualDisplay(new VirtualDeviceParams.Builder()
+ .setAllowedActivities(Set.of(emptyActivityComponentName))
+ .build(),
+ /* virtualDisplayFlags= */ 0);
EmptyActivity emptyActivity = (EmptyActivity) InstrumentationRegistry.getInstrumentation()
.startActivitySync(
@@ -223,31 +188,18 @@
emptyActivity.startActivity(
TestAppHelper.createActivityLaunchedReceiverIntent(mResultReceiver));
- verify(mOnReceiveResultListener, after(3000).never()).onReceiveResult(
- eq(Activity.RESULT_OK),
- argThat(result ->
- result.getInt(TestAppHelper.EXTRA_DISPLAY)
- == virtualDisplay.getDisplay().getDisplayId()));
+ verify(mOnReceiveResultListener, after(3000).never())
+ .onReceiveResult(anyInt(), any());
}
@Test
public void setBlockedActivities_shouldBlockActivityFromLaunching() {
Context context = getApplicationContext();
ComponentName emptyActivityComponentName = new ComponentName(context, EmptyActivity.class);
- mVirtualDevice =
- mVirtualDeviceManager.createVirtualDevice(
- mFakeAssociationRule.getAssociationInfo().getId(),
- new VirtualDeviceParams.Builder()
- .setBlockedActivities(Set.of(TestAppHelper.MAIN_ACTIVITY_COMPONENT))
- .build());
- VirtualDisplay virtualDisplay = mVirtualDevice.createVirtualDisplay(
- /* width= */ 100,
- /* height= */ 100,
- /* densityDpi= */ 240,
- /* surface= */ null,
- /* flags= */ 0,
- Runnable::run,
- mVirtualDisplayCallback);
+ VirtualDisplay virtualDisplay = createVirtualDisplay(new VirtualDeviceParams.Builder()
+ .setBlockedActivities(Set.of(TestAppHelper.MAIN_ACTIVITY_COMPONENT))
+ .build(),
+ /* virtualDisplayFlags= */ 0);
EmptyActivity emptyActivity = (EmptyActivity) InstrumentationRegistry.getInstrumentation()
.startActivitySync(
@@ -256,17 +208,27 @@
| Intent.FLAG_ACTIVITY_CLEAR_TASK),
createActivityOptions(virtualDisplay));
- EmptyActivity.Callback callback = mock(EmptyActivity.Callback.class);
- emptyActivity.setCallback(callback);
- final int requestCode = 1;
- emptyActivity.startActivityForResult(
- TestAppHelper.createActivityLaunchedReceiverIntent(mResultReceiver), requestCode);
+ emptyActivity.startActivity(
+ TestAppHelper.createActivityLaunchedReceiverIntent(mResultReceiver));
- verify(mOnReceiveResultListener, after(3000).never()).onReceiveResult(
- eq(Activity.RESULT_OK),
- argThat(result ->
- result.getInt(TestAppHelper.EXTRA_DISPLAY)
- == virtualDisplay.getDisplay().getDisplayId()));
+ verify(mOnReceiveResultListener, after(3000).never())
+ .onReceiveResult(anyInt(), any());
+ }
+
+ private VirtualDisplay createVirtualDisplay(@NonNull VirtualDeviceParams virtualDeviceParams,
+ int virtualDisplayFlags) {
+ mVirtualDevice = mVirtualDeviceManager.createVirtualDevice(
+ mFakeAssociationRule.getAssociationInfo().getId(), virtualDeviceParams);
+ ImageReader reader = ImageReader.newInstance(/* width= */ 100, /* height= */ 100,
+ PixelFormat.RGBA_8888, /* maxImages= */ 1);
+ return mVirtualDevice.createVirtualDisplay(
+ /* width= */ 100,
+ /* height= */ 100,
+ /* densityDpi= */ 240,
+ reader.getSurface(),
+ virtualDisplayFlags,
+ Runnable::run,
+ mVirtualDisplayCallback);
}
}
diff --git a/tests/tests/virtualdevice/src/android/virtualdevice/cts/util/TestAppHelper.java b/tests/tests/virtualdevice/src/android/virtualdevice/cts/util/TestAppHelper.java
index 8e3e2dc..e07323f 100644
--- a/tests/tests/virtualdevice/src/android/virtualdevice/cts/util/TestAppHelper.java
+++ b/tests/tests/virtualdevice/src/android/virtualdevice/cts/util/TestAppHelper.java
@@ -93,10 +93,15 @@
return new Intent().setClassName(PACKAGE_NAME, NO_EMBED_ACTIVITY);
}
- public static Intent createCannotDisplayOnRemoteIntent(ResultReceiver resultReceiver) {
- return new Intent(ACTION_CALL_RESULT_RECEIVER)
+ public static Intent createCannotDisplayOnRemoteIntent(boolean newTask,
+ ResultReceiver resultReceiver) {
+ Intent intent = new Intent(ACTION_CALL_RESULT_RECEIVER)
.setClassName(PACKAGE_NAME, CANNOT_DISPLAY_ON_REMOTE_ACTIVITY)
.putExtra(EXTRA_ACTIVITY_LAUNCHED_RECEIVER, resultReceiver);
+ if (newTask) {
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
+ }
+ return intent;
}
public static Intent createActivityLaunchedReceiverIntent(ResultReceiver resultReceiver) {