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

Commit 5ae76b1c authored by Evan Rosky's avatar Evan Rosky
Browse files

Fix some places that inadvertently removed split root tasks

LaunchParamsController shouldn't change windowing-mode for non
root tasks. Non-root tasks either inherit their windowing mode
from the root or are being controlled in a transient state.

Also, don't remove stacks that are created-by-organizer, it's
up to the organizer to remove those.

Bug: 168770671
Test: atest AssistantStackTests#testTranslucentAssistantActivityStackVisibility
      on device with freeform display
Change-Id: Ibf1e504f04b7aa10dfe2f6976102bcf4836524f1
parent e3c1e22e
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -144,11 +144,11 @@ class LaunchParamsController {
                        mTmpParams.mPreferredTaskDisplayArea, true /* onTop */);
            }

            if (mTmpParams.hasWindowingMode()
                    && mTmpParams.mWindowingMode != task.getRootTask().getWindowingMode()) {
            if (mTmpParams.hasWindowingMode() && task.isRootTask()
                    && mTmpParams.mWindowingMode != task.getWindowingMode()) {
                final int activityType = activity != null
                        ? activity.getActivityType() : task.getActivityType();
                task.getRootTask().setWindowingMode(task.getDisplayArea().validateWindowingMode(
                task.setWindowingMode(task.getDisplayArea().validateWindowingMode(
                        mTmpParams.mWindowingMode, activity, task, activityType));
            }

+3 −4
Original line number Diff line number Diff line
@@ -1305,10 +1305,9 @@ final class TaskDisplayArea extends DisplayArea<Task> {
            final int windowingMode = windowingModes[j];
            for (int i = getStackCount() - 1; i >= 0; --i) {
                final Task stack = getStackAt(i);
                if (!stack.isActivityTypeStandardOrUndefined()) {
                    continue;
                }
                if (stack.getWindowingMode() != windowingMode) {
                if (stack.mCreatedByOrganizer
                        || !stack.isActivityTypeStandardOrUndefined()
                        || stack.getWindowingMode() != windowingMode) {
                    continue;
                }
                stacks.add(stack);
+24 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.wm;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
import static android.view.Display.INVALID_DISPLAY;

import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
@@ -318,6 +319,29 @@ public class LaunchParamsControllerTests extends WindowTestsBase {
        assertEquals(windowingMode, afterWindowMode);
    }

    /**
     * Ensures that {@link LaunchParamsModifier} doesn't alter non-root tasks' windowingMode.
     */
    @Test
    public void testLayoutNonRootTaskWindowingModeChange() {
        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.mStackSupervisor).setCreateParentTask(true).build();
        task.getRootTask().setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);

        mController.registerModifier(positioner);

        final int beforeWindowMode = task.getWindowingMode();
        assertNotEquals(windowingMode, beforeWindowMode);

        mController.layoutTask(task, null /* windowLayout */);

        final int afterWindowMode = task.getWindowingMode();
        assertEquals(afterWindowMode, beforeWindowMode);
    }

    /**
     * Ensures that {@link LaunchParamsModifier} requests specifying bounds during
     * layout are honored if window is in freeform.