From aaaece7a6463d60b3c676ab3f19e3f2babf0a2b7 Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Mon, 14 Mar 2022 16:51:48 +0800 Subject: [PATCH] Do not reparent task or set windowing mode when layout task #layoutTask is called while launching an activity, but the TDA and the task windowing mode should already be resolved earlier in RWC#getOrCreateRootTask. The result should not be overridden again simply based on LaunchParams. Bug: 219380819 Test: atest LaunchParamsControllerTests Test: atest RootWindowContainerTests Change-Id: I8c934a7b09d780f0d74513398decc3ac17f11b19 --- .../server/wm/LaunchParamsController.java | 12 ---- .../wm/LaunchParamsControllerTests.java | 55 ++----------------- .../server/wm/RootWindowContainerTests.java | 6 +- 3 files changed, 9 insertions(+), 64 deletions(-) diff --git a/services/core/java/com/android/server/wm/LaunchParamsController.java b/services/core/java/com/android/server/wm/LaunchParamsController.java index 8e5d73f13dfbb..7bd2a4a28e694 100644 --- a/services/core/java/com/android/server/wm/LaunchParamsController.java +++ b/services/core/java/com/android/server/wm/LaunchParamsController.java @@ -142,18 +142,6 @@ class LaunchParamsController { mService.deferWindowLayout(); try { - if (mTmpParams.mPreferredTaskDisplayArea != null - && task.getDisplayArea() != mTmpParams.mPreferredTaskDisplayArea) { - mService.mRootWindowContainer.moveRootTaskToTaskDisplayArea(task.getRootTaskId(), - mTmpParams.mPreferredTaskDisplayArea, true /* onTop */); - } - - if (mTmpParams.hasWindowingMode() && task.isRootTask() - && mTmpParams.mWindowingMode != task.getWindowingMode()) { - task.setWindowingMode(task.getDisplayArea().validateWindowingMode( - mTmpParams.mWindowingMode, activity, task)); - } - if (mTmpParams.mBounds.isEmpty()) { return false; } diff --git a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java index 0c2de5c6031b6..5265b442c968e 100644 --- a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java @@ -23,9 +23,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.view.Display.INVALID_DISPLAY; import static com.android.dx.mockito.inline.extended.ExtendedMockito.any; -import static com.android.dx.mockito.inline.extended.ExtendedMockito.anyBoolean; import static com.android.dx.mockito.inline.extended.ExtendedMockito.anyInt; -import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing; import static com.android.dx.mockito.inline.extended.ExtendedMockito.eq; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; import static com.android.dx.mockito.inline.extended.ExtendedMockito.never; @@ -278,51 +276,6 @@ public class LaunchParamsControllerTests extends WindowTestsBase { eq(source), eq(options), any(), eq(PHASE_BOUNDS), any(), any()); } - /** - * Ensures that {@link LaunchParamsModifier} requests specifying display id during - * layout are honored. - */ - @Test - public void testLayoutTaskPreferredDisplayChange() { - final LaunchParams params = new LaunchParams(); - final TestDisplayContent display = createNewDisplayContent(); - final TaskDisplayArea preferredTaskDisplayArea = display.getDefaultTaskDisplayArea(); - params.mPreferredTaskDisplayArea = preferredTaskDisplayArea; - final InstrumentedPositioner positioner = new InstrumentedPositioner(RESULT_DONE, params); - final Task task = new TaskBuilder(mAtm.mTaskSupervisor).build(); - - mController.registerModifier(positioner); - - doNothing().when(mRootWindowContainer).moveRootTaskToTaskDisplayArea(anyInt(), any(), - anyBoolean()); - mController.layoutTask(task, null /* windowLayout */); - verify(mRootWindowContainer, times(1)).moveRootTaskToTaskDisplayArea( - eq(task.getRootTaskId()), eq(preferredTaskDisplayArea), anyBoolean()); - } - - /** - * Ensures that {@link LaunchParamsModifier} requests specifying windowingMode during - * layout are honored. - */ - @Test - public void testLayoutTaskWindowingModeChange() { - final LaunchParams params = new LaunchParams(); - final int windowingMode = WINDOWING_MODE_FREEFORM; - params.mWindowingMode = windowingMode; - final InstrumentedPositioner positioner = new InstrumentedPositioner(RESULT_DONE, params); - final Task task = new TaskBuilder(mAtm.mTaskSupervisor).build(); - - mController.registerModifier(positioner); - - final int beforeWindowMode = task.getRootTask().getWindowingMode(); - assertNotEquals(windowingMode, beforeWindowMode); - - mController.layoutTask(task, null /* windowLayout */); - - final int afterWindowMode = task.getRootTask().getWindowingMode(); - assertEquals(windowingMode, afterWindowMode); - } - /** * Ensures that {@link LaunchParamsModifier} doesn't alter non-root tasks' windowingMode. */ @@ -355,10 +308,10 @@ public class LaunchParamsControllerTests extends WindowTestsBase { final Rect expected = new Rect(10, 20, 30, 40); final LaunchParams params = new LaunchParams(); - params.mWindowingMode = WINDOWING_MODE_FREEFORM; params.mBounds.set(expected); final InstrumentedPositioner positioner = new InstrumentedPositioner(RESULT_DONE, params); - final Task task = new TaskBuilder(mAtm.mTaskSupervisor).build(); + final Task task = new TaskBuilder(mAtm.mTaskSupervisor) + .setWindowingMode(WINDOWING_MODE_FREEFORM).build(); mController.registerModifier(positioner); @@ -380,10 +333,10 @@ public class LaunchParamsControllerTests extends WindowTestsBase { final Rect expected = new Rect(10, 20, 30, 40); final LaunchParams params = new LaunchParams(); - params.mWindowingMode = WINDOWING_MODE_MULTI_WINDOW; params.mBounds.set(expected); final InstrumentedPositioner positioner = new InstrumentedPositioner(RESULT_DONE, params); - final Task task = new TaskBuilder(mAtm.mTaskSupervisor).build(); + final Task task = new TaskBuilder(mAtm.mTaskSupervisor) + .setWindowingMode(WINDOWING_MODE_MULTI_WINDOW).build(); mController.registerModifier(positioner); diff --git a/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java index 99ba3b806d611..762c08f99d942 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java @@ -20,6 +20,7 @@ import static android.app.KeyguardManager.ACTION_CONFIRM_DEVICE_CREDENTIAL_WITH_ import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; +import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; @@ -945,14 +946,16 @@ public class RootWindowContainerTests extends WindowTestsBase { mWm, "TDA", FEATURE_VENDOR_FIRST); display.addChild(taskDisplayArea, POSITION_BOTTOM); - // Making sure getting the root task from the preferred TDA + // Making sure getting the root task from the preferred TDA and the preferred windowing mode LaunchParamsController.LaunchParams launchParams = new LaunchParamsController.LaunchParams(); launchParams.mPreferredTaskDisplayArea = taskDisplayArea; + launchParams.mWindowingMode = WINDOWING_MODE_FREEFORM; Task root = mRootWindowContainer.getOrCreateRootTask(null /* r */, null /* options */, null /* candidateTask */, null /* sourceTask */, true /* onTop */, launchParams, 0 /* launchParams */); assertEquals(taskDisplayArea, root.getTaskDisplayArea()); + assertEquals(WINDOWING_MODE_FREEFORM, root.getWindowingMode()); // Making sure still getting the root task from the preferred TDA when passing in a // launching activity. @@ -961,6 +964,7 @@ public class RootWindowContainerTests extends WindowTestsBase { null /* candidateTask */, null /* sourceTask */, true /* onTop */, launchParams, 0 /* launchParams */); assertEquals(taskDisplayArea, root.getTaskDisplayArea()); + assertEquals(WINDOWING_MODE_FREEFORM, root.getWindowingMode()); } @Test