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