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
This commit is contained in:
Sandro Meier
2023-01-05 14:04:14 +00:00
parent f53c374684
commit 4c0c6a87c0
2 changed files with 2 additions and 10 deletions

View File

@@ -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 */);

View File

@@ -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);
}