From d1bf6f87ea32737483e5bb9432aa53b10b003ca0 Mon Sep 17 00:00:00 2001 From: Garfield Tan Date: Tue, 8 Sep 2020 16:43:48 -0700 Subject: [PATCH] Use cursor position from mouse events for hit test Otherwise user may accidentally trigger task resizing when performing multi-finger gestures on touchpads. Bug: 166337994 Test: handleTapOutsideTask() is skipped on touchpad gestures. Change-Id: I5251623addb3d10af4c1735ce2a6b919a511460f --- .../server/wm/TaskTapPointerEventListener.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java b/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java index 06c2b1687fa43..523b484269c0a 100644 --- a/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java +++ b/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java @@ -25,6 +25,7 @@ import static android.view.PointerIcon.TYPE_VERTICAL_DOUBLE_ARROW; import android.graphics.Rect; import android.graphics.Region; import android.hardware.input.InputManager; +import android.view.InputDevice; import android.view.MotionEvent; import android.view.WindowManagerPolicyConstants.PointerEventListener; @@ -62,8 +63,15 @@ public class TaskTapPointerEventListener implements PointerEventListener { public void onPointerEvent(MotionEvent motionEvent) { switch (motionEvent.getActionMasked()) { case MotionEvent.ACTION_DOWN: { - final int x = (int) motionEvent.getX(); - final int y = (int) motionEvent.getY(); + final int x; + final int y; + if (motionEvent.getSource() == InputDevice.SOURCE_MOUSE) { + x = (int) motionEvent.getXCursorPosition(); + y = (int) motionEvent.getYCursorPosition(); + } else { + x = (int) motionEvent.getX(); + y = (int) motionEvent.getY(); + } synchronized (this) { if (!mTouchExcludeRegion.contains(x, y)) {