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

Commit 6e1df0e1 authored by Toshiki Kikuchi's avatar Toshiki Kikuchi
Browse files

Keep windowing mode by default when removing TDA

This CL lets a task in to-be-removed TDA keep its windowing mode if it’s
reparented to new TDA and  the task is set to FULLSCREEN explicitly.
If it’s reparented to non-TDA launch root (e.g. split root) or the task
isn't set to FULLSCREEN explicitly, we still clear the windowing mode.

For example, let’s say we have two freeform-first displays, launch a
fullscreen task in the display A and remove the display A, which results
in reparenting the task to the display B.
In this case, we want to keep the task in fullscreen even on the new
display B. If we clear the windowing mode, the task shows up in freeform
by inheriting the display B’s windowing mode.

Bug: 290567729
Test: atest MultiDisplayPolicyTests
Test: Launch app in external display, make it fullscreen, and disconnect the display
Change-Id: I124d97948c4b7e0dff47aed2944858d4c03ad384
parent dc1091c8
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -1851,9 +1851,17 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
                                        0 /* launchFlags */);
                task.reparent(launchRoot == null ? toDisplayArea : launchRoot, POSITION_TOP);

                // Set the windowing mode to undefined by default to let the root task inherited the
                // If the task is going to be reparented to the non-fullscreen root TDA and the task
                // is set to FULLSCREEN explicitly, we keep the windowing mode as is. Otherwise, the
                // task will inherit the display windowing mode unexpectedly.
                final boolean keepWindowingMode = launchRoot == null
                        && task.getRequestedOverrideWindowingMode() == WINDOWING_MODE_FULLSCREEN
                        && toDisplayArea.getWindowingMode() != WINDOWING_MODE_FULLSCREEN;
                if (!keepWindowingMode) {
                    // Set the windowing mode to undefined to let the root task inherited the
                    // windowing mode.
                    task.setWindowingMode(WINDOWING_MODE_UNDEFINED);
                }
                lastReparentedRootTask = task;
            }
            // Root task may be removed from this display. Ensure each root task will be processed