Always allow the system to launch stuff on VDs.
This fixes AAOS tests that think that user 0 is disallowed.
Also fixing a bunch of logs in GWPC test like:
"Timed out while waiting for GWPC displayId to be set."
Fix: 330922390
Test: atest GenericWindowPolicyControllerTest w/ cf_x86_64_only_auto_md-trunk_staging-userdebug
Change-Id: I3960f396b752ec1044538830aec9bbc7d2f71ead
diff --git a/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java b/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java
index 9e3f5ce..f38d772b 100644
--- a/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java
+++ b/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java
@@ -334,7 +334,7 @@
// The error dialog alerting users that streaming is blocked is always allowed.
return true;
}
- if (!mAllowedUsers.contains(activityUser)) {
+ if (!activityUser.isSystem() && !mAllowedUsers.contains(activityUser)) {
Slog.d(TAG, "Virtual device launch disallowed from user " + activityUser);
return false;
}
diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/GenericWindowPolicyControllerTest.java b/services/tests/servicestests/src/com/android/server/companion/virtual/GenericWindowPolicyControllerTest.java
index ec3e97b..0678140 100644
--- a/services/tests/servicestests/src/com/android/server/companion/virtual/GenericWindowPolicyControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/companion/virtual/GenericWindowPolicyControllerTest.java
@@ -123,6 +123,7 @@
@Test
public void containsUid() {
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
assertThat(gwpc.containsUid(TEST_UID)).isFalse();
@@ -136,6 +137,7 @@
@Test
public void isEnteringPipAllowed_falseByDefault() {
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
assertThat(gwpc.isEnteringPipAllowed(TEST_UID)).isFalse();
verify(mPipBlockedCallback, timeout(TIMEOUT_MILLIS)).onEnteringPipBlocked(TEST_UID);
@@ -144,6 +146,7 @@
@Test
public void isEnteringPipAllowed_dpcSupportsPinned_allowed() {
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
gwpc.setSupportedWindowingModes(new HashSet<>(
Arrays.asList(WindowConfiguration.WINDOWING_MODE_FULLSCREEN,
WindowConfiguration.WINDOWING_MODE_PINNED)));
@@ -160,11 +163,25 @@
NONBLOCKED_APP_PACKAGE_NAME,
NONBLOCKED_APP_PACKAGE_NAME,
/* displayOnRemoteDevices */ true,
- /* targetDisplayCategory */ null);
+ /* targetDisplayCategory */ null,
+ /* uid */ UserHandle.PER_USER_RANGE + 1);
assertActivityIsBlocked(gwpc, activityInfo);
}
@Test
+ public void userNotAllowlisted_systemUser_isNotBlocked() {
+ GenericWindowPolicyController gwpc = createGwpcWithNoAllowedUsers();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
+
+ ActivityInfo activityInfo = getActivityInfo(
+ NONBLOCKED_APP_PACKAGE_NAME,
+ NONBLOCKED_APP_PACKAGE_NAME,
+ /* displayOnRemoteDevices */ true,
+ /* targetDisplayCategory */ null);
+ assertActivityCanBeLaunched(gwpc, activityInfo);
+ }
+
+ @Test
public void userNotAllowlisted_systemUserCanLaunchBlockedAppStreamingActivity() {
GenericWindowPolicyController gwpc = createGwpcWithNoAllowedUsers();
gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
@@ -521,6 +538,7 @@
public void registerRunningAppsChangedListener_onRunningAppsChanged_listenersNotified() {
ArraySet<Integer> uids = new ArraySet<>(Arrays.asList(TEST_UID));
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
gwpc.registerRunningAppsChangedListener(mRunningAppsChangedListener);
gwpc.onRunningAppsChanged(uids);
@@ -545,6 +563,7 @@
public void noRunningAppsChangedListener_onRunningAppsChanged_doesNotThrowException() {
ArraySet<Integer> uids = new ArraySet<>(Arrays.asList(TEST_UID));
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
gwpc.onRunningAppsChanged(uids);
@@ -557,6 +576,7 @@
public void registerUnregisterRunningAppsChangedListener_onRunningAppsChanged_doesNotThrowException() {
ArraySet<Integer> uids = new ArraySet<>(Arrays.asList(TEST_UID));
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
gwpc.registerRunningAppsChangedListener(mRunningAppsChangedListener);
gwpc.unregisterRunningAppsChangedListener(mRunningAppsChangedListener);
@@ -579,6 +599,7 @@
doReturn(interceptor).when(interceptor).queryLocalInterface(anyString());
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
ActivityInfo activityInfo = getActivityInfo(
NONBLOCKED_APP_PACKAGE_NAME,
NONBLOCKED_APP_PACKAGE_NAME,
@@ -603,6 +624,7 @@
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("testing"));
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
ActivityInfo activityInfo = getActivityInfo(
NONBLOCKED_APP_PACKAGE_NAME,
NONBLOCKED_APP_PACKAGE_NAME,
@@ -621,6 +643,7 @@
@Test
public void onTopActivitychanged_null_noCallback() {
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
gwpc.onTopActivityChanged(null, 0, 0);
verify(mActivityListener, after(TIMEOUT_MILLIS).never())
@@ -697,6 +720,7 @@
@Test
public void getCustomHomeComponent_noneSet() {
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
assertThat(gwpc.getCustomHomeComponent()).isNull();
}
@@ -705,6 +729,7 @@
public void getCustomHomeComponent_returnsHomeComponent() {
GenericWindowPolicyController gwpc = createGwpcWithCustomHomeComponent(
NONBLOCKED_COMPONENT);
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
assertThat(gwpc.getCustomHomeComponent()).isEqualTo(NONBLOCKED_COMPONENT);
}