diff options
| author | 2020-08-20 09:53:58 +0800 | |
|---|---|---|
| committer | 2020-08-25 12:30:48 +0800 | |
| commit | a67afd3c0192f2cdfd890f4dfb8f3ec9b6d0e96c (patch) | |
| tree | a72d7cd88467484b28d3af1237b1a9d1e2b15c81 | |
| parent | db02000f83e9637a3d51d26a0e34ba8d3872c2c5 (diff) | |
Fix hardly to perform 3-finger swipe from the bottom
We accidentky checked invalid pointers down position.
In stead of checking all pointers, we check the pointer ids
from the motion event.
Bug: 165576902
Test: manually test
atest TouchExplorerTest
Change-Id: Id530bf4b760351215726b2afd781433b590f57ce
| -rw-r--r-- | services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java index d127172c3aa6..adccf6cfc99c 100644 --- a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java +++ b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java @@ -644,18 +644,9 @@ public class TouchExplorer extends BaseEventStreamTransformation if (mGestureDetector.isMultiFingerGesturesEnabled()) { if (mGestureDetector.isTwoFingerPassthroughEnabled()) { if (event.getPointerCount() == 3) { - boolean isOnBottomEdge = true; // If three fingers went down on the bottom edge of the screen, delegate // immediately. - final long screenHeight = - mContext.getResources().getDisplayMetrics().heightPixels; - for (int i = 0; i < TouchState.MAX_POINTER_COUNT; ++i) { - if (mReceivedPointerTracker.getReceivedPointerDownY(i) - < (screenHeight - mEdgeSwipeHeightPixels)) { - isOnBottomEdge = false; - } - } - if (isOnBottomEdge) { + if (allPointersDownOnBottomEdge(event)) { if (DEBUG) { Slog.d(LOG_TAG, "Three-finger edge swipe detected."); } @@ -1063,6 +1054,22 @@ public class TouchExplorer extends BaseEventStreamTransformation return downEvent; } + private boolean allPointersDownOnBottomEdge(MotionEvent event) { + final long screenHeight = + mContext.getResources().getDisplayMetrics().heightPixels; + for (int i = 0; i < event.getPointerCount(); ++i) { + final int pointerId = event.getPointerId(i); + final float pointerDownY = mReceivedPointerTracker.getReceivedPointerDownY(pointerId); + if (pointerDownY < (screenHeight - mEdgeSwipeHeightPixels)) { + if (DEBUG) { + Slog.d(LOG_TAG, "The pointer is not on the bottom edge" + pointerDownY); + } + return false; + } + } + return true; + } + public TouchState getState() { return mState; } |