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);
     }