Disallow launching non-embedded Activity in virtual display only for new task.
- In case of new task, LaunchParamsModifier will get 'null' task parameter.
- Tides up the argument comments.
Bug: 171219415
Test: atest CarLaunchParamsModifierTest
Test: check the scenario in the bug.
Change-Id: I61156a32f7907e866cec781cf91e172c984a44aa
diff --git a/src/com/android/server/wm/CarLaunchParamsModifier.java b/src/com/android/server/wm/CarLaunchParamsModifier.java
index 932c5a8..78bba9b 100644
--- a/src/com/android/server/wm/CarLaunchParamsModifier.java
+++ b/src/com/android/server/wm/CarLaunchParamsModifier.java
@@ -311,6 +311,7 @@
targetDisplayArea = source.noDisplay ? source.mHandoverTaskDisplayArea
: source.getDisplayArea();
} else if (originalDisplayArea == null
+ && task == null // launching as a new task
&& source != null && !source.getDisplayContent().isTrusted()
&& ((activity.info.flags & ActivityInfo.FLAG_ALLOW_EMBEDDED) == 0)) {
if (DBG) {
diff --git a/tests/src/com/android/server/wm/CarLaunchParamsModifierTest.java b/tests/src/com/android/server/wm/CarLaunchParamsModifierTest.java
index 53fd7ee..ae6fa06 100644
--- a/tests/src/com/android/server/wm/CarLaunchParamsModifierTest.java
+++ b/tests/src/com/android/server/wm/CarLaunchParamsModifierTest.java
@@ -166,15 +166,15 @@
mColorDisplayServiceInternal);
when(mActivityOptions.getLaunchDisplayId()).thenReturn(INVALID_DISPLAY);
mockDisplay(mDisplay0ForDriver, mDisplayArea0ForDriver, DEFAULT_DISPLAY,
- FLAG_TRUSTED, /* type */ 0);
+ FLAG_TRUSTED, /* type= */ 0);
mockDisplay(mDisplay10ForPassenger, mDisplayArea10ForPassenger, PASSENGER_DISPLAY_ID_10,
- FLAG_TRUSTED, /* type */ 0);
+ FLAG_TRUSTED, /* type= */ 0);
mockDisplay(mDisplay11ForPassenger, mDisplayArea11ForPassenger, PASSENGER_DISPLAY_ID_11,
- FLAG_TRUSTED, /* type */ 0);
+ FLAG_TRUSTED, /* type= */ 0);
mockDisplay(mDisplay1Private, mDisplayArea1Private, 1,
- FLAG_TRUSTED | FLAG_PRIVATE, /* type */ 0);
+ FLAG_TRUSTED | FLAG_PRIVATE, /* type= */ 0);
mockDisplay(mDisplay2Virtual, mDisplayArea2Virtual, VIRTUAL_DISPLAY_ID_2,
- /* no-trusted */ FLAG_PRIVATE, /* type */ 0);
+ FLAG_PRIVATE, /* type= */ 0);
DisplayContent defaultDc = mRootWindowContainer.getDisplayContentOrCreate(DEFAULT_DISPLAY);
when(mActivityRecordSource.getDisplayContent()).thenReturn(defaultDc);
@@ -214,7 +214,9 @@
private void assertDisplayIsAssigned(
@UserIdInt int userId, TaskDisplayArea expectedDisplayArea) {
- mTask.mUserId = userId;
+ if (mTask != null) {
+ mTask.mUserId = userId;
+ }
mCurrentParams.mPreferredTaskDisplayArea = null;
assertThat(mModifier.onCalculate(mTask, mWindowLayout, mActivityRecordActivity,
mActivityRecordSource, mActivityOptions, 0, mCurrentParams, mOutParams))
@@ -523,11 +525,24 @@
}
@Test
- public void testNonEmbeddedActivityMoviesToDefaultDisplay() {
+ public void testNonEmbeddedActivityWithExistingTaskDoesNotChangeDisplay() {
// The launch request comes from the Activity in Virtual display.
DisplayContent dc = mRootWindowContainer.getDisplayContentOrCreate(VIRTUAL_DISPLAY_ID_2);
when(mActivityRecordSource.getDisplayContent()).thenReturn(dc);
mActivityRecordActivity = buildActivityRecord("testPackage", "testActivity");
+ // No setting of FLAG_ALLOW_EMBEDDED and mTask.
+
+ assertNoDisplayIsAssigned(UserHandle.USER_SYSTEM);
+ }
+
+ @Test
+ public void testNonEmbeddedActivityWithNewTaskMoviesToDefaultDisplay() {
+ // The launch request comes from the Activity in Virtual display.
+ DisplayContent dc = mRootWindowContainer.getDisplayContentOrCreate(VIRTUAL_DISPLAY_ID_2);
+ when(mActivityRecordSource.getDisplayContent()).thenReturn(dc);
+ mActivityRecordActivity = buildActivityRecord("testPackage", "testActivity");
+ // No setting of FLAG_ALLOW_EMBEDDED.
+ mTask = null; // ATM will assign 'null' to 'task' argument for new task case.
assertDisplayIsAssigned(UserHandle.USER_SYSTEM, mDisplayArea0ForDriver);
}