summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/touch
diff options
context:
space:
mode:
authorHyunyoung Song <hyunyoungs@google.com>2017-07-14 13:34:55 -0700
committerHyunyoung Song <hyunyoungs@google.com>2017-07-18 14:59:48 -0700
commit51e224a121b1f42f86cc9e022f6ecc63461e61a5 (patch)
tree1231decf3389d8c3367a16da7be27e90665d488c /src/com/android/launcher3/touch
parent6cd0e46a8ee384a5255b6189cd46ed694fcbecac (diff)
downloadandroid_packages_apps_Trebuchet-51e224a121b1f42f86cc9e022f6ecc63461e61a5.tar.gz
android_packages_apps_Trebuchet-51e224a121b1f42f86cc9e022f6ecc63461e61a5.tar.bz2
android_packages_apps_Trebuchet-51e224a121b1f42f86cc9e022f6ecc63461e61a5.zip
SwipeDetector should work on multi touch finger points
Bug: 63815304 Change-Id: I66b0bedeed0bd3fadc5f2f73fd76e64010170c97
Diffstat (limited to 'src/com/android/launcher3/touch')
-rw-r--r--src/com/android/launcher3/touch/SwipeDetector.java43
1 files changed, 35 insertions, 8 deletions
diff --git a/src/com/android/launcher3/touch/SwipeDetector.java b/src/com/android/launcher3/touch/SwipeDetector.java
index b47065490..ec5493b6a 100644
--- a/src/com/android/launcher3/touch/SwipeDetector.java
+++ b/src/com/android/launcher3/touch/SwipeDetector.java
@@ -1,5 +1,6 @@
package com.android.launcher3.touch;
+import static android.view.MotionEvent.INVALID_POINTER_ID;
import android.content.Context;
import android.util.Log;
import android.view.MotionEvent;
@@ -24,6 +25,8 @@ public class SwipeDetector {
private static final float ANIMATION_DURATION = 1200;
private static final float FAST_FLING_PX_MS = 10;
+ protected int mActivePointerId = INVALID_POINTER_ID;
+
/**
* The minimum release velocity in pixels per millisecond that triggers fling..
*/
@@ -97,7 +100,8 @@ public class SwipeDetector {
private long mCurrentMillis;
private float mVelocity;
- private float mLastDisplacement;
+ private float mLastDisplacementX;
+ private float mLastDisplacementY;
private float mDisplacementY;
private float mDisplacementX;
@@ -149,11 +153,13 @@ public class SwipeDetector {
}
public boolean onTouchEvent(MotionEvent ev) {
- switch (ev.getAction()) {
+ switch (ev.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
mDownX = ev.getX();
mDownY = ev.getY();
- mLastDisplacement = 0;
+ mActivePointerId = ev.getPointerId(0);
+ mLastDisplacementX = 0;
+ mLastDisplacementY = 0;
mDisplacementY = 0;
mVelocity = 0;
@@ -161,9 +167,26 @@ public class SwipeDetector {
setState(ScrollState.DRAGGING);
}
break;
+ //case MotionEvent.ACTION_POINTER_DOWN:
+ case MotionEvent.ACTION_POINTER_UP:
+ int ptrIdx = (ev.getActionIndex() & MotionEvent.ACTION_POINTER_INDEX_MASK) >>
+ MotionEvent.ACTION_POINTER_INDEX_SHIFT;
+ int ptrId = ev.getPointerId(ptrIdx);
+ if (ptrId == mActivePointerId) {
+ final int newPointerIdx = ptrIdx == 0 ? 1 : 0;
+ mDownX = ev.getX(newPointerIdx) - mLastDisplacementX;
+ mDownY = ev.getY(newPointerIdx) - mLastDisplacementY;
+ mActivePointerId = ev.getPointerId(newPointerIdx);
+ }
+ break;
case MotionEvent.ACTION_MOVE:
- mDisplacementX = ev.getX() - mDownX;
- mDisplacementY = ev.getY() - mDownY;
+ int pointerIndex = ev.findPointerIndex(mActivePointerId);
+ if (pointerIndex == INVALID_POINTER_ID) {
+ break;
+ }
+ mDisplacementX = ev.getX(pointerIndex) - mDownX;
+ mDisplacementY = ev.getY(pointerIndex) - mDownY;
+
computeVelocity(ev);
// handle state and listener calls.
@@ -186,8 +209,12 @@ public class SwipeDetector {
break;
}
// Do house keeping.
- mLastDisplacement = mDisplacementY;
- mLastY = ev.getY();
+ mLastDisplacementX = mDisplacementX;
+ mLastDisplacementY = mDisplacementY;
+ int pointerIndex = ev.findPointerIndex(mActivePointerId);
+ if (pointerIndex != INVALID_POINTER_ID) {
+ mLastY = ev.getY(pointerIndex);
+ }
return true;
}
@@ -215,7 +242,7 @@ public class SwipeDetector {
}
private boolean reportDragging() {
- float delta = mDisplacementY - mLastDisplacement;
+ float delta = mDisplacementY - mLastDisplacementY;
if (delta != 0) {
if (DBG) {
Log.d(TAG, String.format("onDrag disp=%.1f, velocity=%.1f",