diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 71a7e2657b4f6..b0eecebc7d79d 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -3098,27 +3098,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp }); } - /** - * Returns true if the input point is within an app window. - */ - boolean pointWithinAppWindow(int x, int y) { - final int[] targetWindowType = {-1}; - final PooledConsumer fn = PooledLambda.obtainConsumer((w, nonArg) -> { - if (targetWindowType[0] != -1) { - return; - } - - if (w.isOnScreen() && w.isVisible() && w.getFrame().contains(x, y)) { - targetWindowType[0] = w.mAttrs.type; - return; - } - }, PooledLambda.__(WindowState.class), mTmpRect); - forAllWindows(fn, true /* traverseTopToBottom */); - fn.recycle(); - return FIRST_APPLICATION_WINDOW <= targetWindowType[0] - && targetWindowType[0] <= LAST_APPLICATION_WINDOW; - } - /** * Find the task whose outside touch area (for resizing) (x, y) falls within. * Returns null if the touch doesn't fall into a resizing area. diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java index 1fc061b2ca787..67fd557131e70 100644 --- a/services/core/java/com/android/server/wm/RecentTasks.java +++ b/services/core/java/com/android/server/wm/RecentTasks.java @@ -33,6 +33,8 @@ import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK; import static android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.os.Process.SYSTEM_UID; +import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW; +import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_TASKS; import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_RECENTS; @@ -215,10 +217,16 @@ class RecentTasks { int y = (int) ev.getY(); mService.mH.post(PooledLambda.obtainRunnable((nonArg) -> { synchronized (mService.mGlobalLock) { - // Unfreeze the task list once we touch down in a task final RootWindowContainer rac = mService.mRootWindowContainer; final DisplayContent dc = rac.getDisplayContent(displayId).mDisplayContent; - if (dc.pointWithinAppWindow(x, y)) { + final WindowState win = dc.getTouchableWinAtPointLocked((float) x, (float) y); + if (win == null) { + return; + } + // Unfreeze the task list once we touch down in a task + final boolean isAppWindowTouch = FIRST_APPLICATION_WINDOW <= win.mAttrs.type + && win.mAttrs.type <= LAST_APPLICATION_WINDOW; + if (isAppWindowTouch) { final Task stack = mService.getTopDisplayFocusedRootTask(); final Task topTask = stack != null ? stack.getTopMostTask() : null; resetFreezeTaskListReordering(topTask);