Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aaaece7a authored by Louis Chang's avatar Louis Chang
Browse files

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
parent 9675d3b8
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -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;
            }
+4 −51
Original line number Diff line number Diff line
@@ -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);

+5 −1
Original line number Diff line number Diff line
@@ -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