summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java11
-rw-r--r--services/tests/servicestests/src/com/android/server/companion/virtual/GenericWindowPolicyControllerTest.java13
2 files changed, 18 insertions, 6 deletions
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 8c728f1eeffd..31766f2ec4eb 100644
--- a/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java
+++ b/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java
@@ -288,16 +288,15 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
}
final UserHandle activityUser =
UserHandle.getUserHandleForUid(activityInfo.applicationInfo.uid);
- if (!mAllowedUsers.contains(activityUser)) {
- Slog.d(TAG, "Virtual device launch disallowed from user " + activityUser);
- return false;
- }
-
final ComponentName activityComponent = activityInfo.getComponentName();
- if (BLOCKED_APP_STREAMING_COMPONENT.equals(activityComponent)) {
+ if (BLOCKED_APP_STREAMING_COMPONENT.equals(activityComponent) && activityUser.isSystem()) {
// The error dialog alerting users that streaming is blocked is always allowed.
return true;
}
+ if (!mAllowedUsers.contains(activityUser)) {
+ Slog.d(TAG, "Virtual device launch disallowed from user " + activityUser);
+ return false;
+ }
if (!activityMatchesDisplayCategory(activityInfo)) {
Slog.d(TAG, "The activity's required display category '"
+ activityInfo.requiredDisplayCategory
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 18e6f0a2cc57..132b6219977a 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
@@ -164,6 +164,19 @@ public class GenericWindowPolicyControllerTest {
}
@Test
+ public void userNotAllowlisted_systemUserCanLaunchBlockedAppStreamingActivity() {
+ GenericWindowPolicyController gwpc = createGwpcWithNoAllowedUsers();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
+
+ ActivityInfo activityInfo = getActivityInfo(
+ BLOCKED_APP_STREAMING_COMPONENT.getPackageName(),
+ BLOCKED_APP_STREAMING_COMPONENT.getClassName(),
+ /* displayOnRemoteDevices */ true,
+ /* targetDisplayCategory */ null);
+ assertActivityCanBeLaunched(gwpc, activityInfo);
+ }
+
+ @Test
public void openNonBlockedAppOnVirtualDisplay_isNotBlocked() {
GenericWindowPolicyController gwpc = createGwpc();
gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);