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

Commit 4c0c6a87 authored by Sandro Meier's avatar Sandro Meier
Browse files

Align moving display to top behavior

The behavior of moving a display to top was different based on
perDisplayFocusEnabled. In the perDisplayFocusEnabled=true case only a
tap on the screen, but not a targeted key would move the display to the
top. To simplify the logic this change makes
the behavior the same for both cases: A targeted key, as well as a touch
on a display moves that display to top.

See also b/121057974, which introduced the behavior.
Note that this change does not affect the window focus behavior.
Displays have a window focus anyway with perDisplayFocusEnabled=true.
Note that the behavior for perDisplayFocusEnabled=false stays unchanged.

Bug: 254161477
Test: atest "CtsWindowManagerDeviceTestCases:android.server.wm.WindowFocusTests"
Test: atest "CtsWindowManagerDeviceTestCases:android.server.wm.MultiDisplayPolicyTests"
Change-Id: I52467f028b012ac2abdcb1838d4752e5e4bc4693
parent f53c3746
Loading
Loading
Loading
Loading
+2 −9
Original line number Diff line number Diff line
@@ -3174,7 +3174,8 @@ public class WindowManagerService extends IWindowManager.Stub

    /**
     * Moves the given display to the top. If it cannot be moved to the top this method does
     * nothing.
     * nothing (e.g. if the display has the flag FLAG_STEAL_TOP_FOCUS_DISABLED set).
     * @param displayId The display to move to the top.
     */
    void moveDisplayToTopInternal(int displayId) {
        synchronized (mGlobalLock) {
@@ -3189,14 +3190,6 @@ public class WindowManagerService extends IWindowManager.Stub
                    return;
                }

                if (mPerDisplayFocusEnabled) {
                    ProtoLog.i(WM_DEBUG_FOCUS_LIGHT,
                            "Not moving display (displayId=%d) to top. Top focused displayId=%d. "
                                    + "Reason: config_perDisplayFocusEnabled", displayId,
                            mRoot.getTopFocusedDisplayContent().getDisplayId());
                    return;
                }

                // Nothing prevented us from moving the display to the top. Let's do it!
                displayContent.getParent().positionChildAt(WindowContainer.POSITION_TOP,
                        displayContent, true /* includingParents */);
+0 −1
Original line number Diff line number Diff line
@@ -6241,7 +6241,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP

    @Override
    public void handleTapOutsideFocusInsideSelf() {
        final DisplayContent displayContent = getDisplayContent();
        mWmService.moveDisplayToTopInternal(getDisplayId());
        mWmService.handleTaskFocusChange(getTask(), mActivityRecord);
    }