diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index e7dac9dfd7273..0f4e123923b0e 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -2361,33 +2361,6 @@ class DisplayContent extends WindowContainer= 0; --stackNdx) { - final TaskStack stack = mTaskStackContainers.getChildAt(stackNdx); - if (stack.isActivityTypeHome() && !stack.inMultiWindowMode()) { - // We skip not only home stack, but also everything behind home because user can't - // see them when home stack is isn't in multi-window mode. - break; - } - final int taskId = stack.taskIdFromPoint(x, y); - if (taskId != -1) { - return taskId; - } - } - return -1; - } - /** * Returns true if the input point is within an app window. */ diff --git a/services/core/java/com/android/server/wm/TaskPositioningController.java b/services/core/java/com/android/server/wm/TaskPositioningController.java index cdcb85720724e..3929a122b6731 100644 --- a/services/core/java/com/android/server/wm/TaskPositioningController.java +++ b/services/core/java/com/android/server/wm/TaskPositioningController.java @@ -127,7 +127,6 @@ class TaskPositioningController { void handleTapOutsideTask(DisplayContent displayContent, int x, int y) { mHandler.post(() -> { - int taskId = -1; synchronized (mService.mGlobalLock) { final Task task = displayContent.findTaskForResizePoint(x, y); if (task != null) { @@ -135,15 +134,10 @@ class TaskPositioningController { task.preserveOrientationOnResize(), x, y)) { return; } - taskId = task.mTaskId; - } else { - taskId = displayContent.taskForTapOutside(x, y); - } - } - if (taskId >= 0) { - try { - mActivityManager.setFocusedTask(taskId); - } catch (RemoteException e) { + try { + mActivityManager.setFocusedTask(task.mTaskId); + } catch (RemoteException e) { + } } } }); diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index e6b8112b03457..09baf8cf11110 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -1458,31 +1458,6 @@ public class TaskStack extends WindowContainer implements return false; } - int taskIdFromPoint(int x, int y) { - getBounds(mTmpRect); - if (!mTmpRect.contains(x, y) || isAdjustedForMinimizedDockedStack()) { - return -1; - } - - for (int taskNdx = mChildren.size() - 1; taskNdx >= 0; --taskNdx) { - final Task task = mChildren.get(taskNdx); - final WindowState win = task.getTopVisibleAppMainWindow(); - if (win == null) { - continue; - } - // We need to use the task's dim bounds (which is derived from the visible bounds of its - // apps windows) for any touch-related tests. Can't use the task's original bounds - // because it might be adjusted to fit the content frame. For example, the presence of - // the IME adjusting the windows frames when the app window is the IME target. - task.getDimBounds(mTmpRect); - if (mTmpRect.contains(x, y)) { - return task.mTaskId; - } - } - - return -1; - } - void findTaskForResizePoint(int x, int y, int delta, DisplayContent.TaskForResizePointSearchResult results) { if (!getWindowConfiguration().canResizeTask()) { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 8dfb02efb5260..ce496f47be54f 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -7587,12 +7587,36 @@ public class WindowManagerService extends IWindowManager.Stub return; } - final DisplayContent displayContent = touchedWindow.getDisplayContent(); + handleTaskFocusChange(touchedWindow.getTask()); + handleDisplayFocusChange(touchedWindow); + } + + private void handleTaskFocusChange(Task task) { + if (task == null) { + return; + } + + final TaskStack stack = task.mStack; + // We ignore home stack since we don't want home stack to move to front when touched. + // Specifically, in freeform we don't want tapping on home to cause the freeform apps to go + // behind home. See b/117376413 + if (stack.isActivityTypeHome()) { + return; + } + + try { + mActivityTaskManager.setFocusedTask(task.mTaskId); + } catch (RemoteException e) { + } + } + + private void handleDisplayFocusChange(WindowState window) { + final DisplayContent displayContent = window.getDisplayContent(); if (displayContent == null) { return; } - if (!touchedWindow.canReceiveKeys()) { + if (!window.canReceiveKeys()) { // If the window that received the input event cannot receive keys, don't move the // display it's on to the top since that window won't be able to get focus anyway. return;