summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Kwan <mkwan@google.com>2017-02-14 12:04:38 -0800
committerMichael Kwan <mkwan@google.com>2017-02-14 12:04:38 -0800
commit390120b925398c754b4f785fc12a8def0d09c09b (patch)
treea7b665f3e49f81fecd55b0679c470a58294f17a4
parent5758a9a94c7ca1a196b3d1c51b05ec2d937f0b59 (diff)
downloadbase-390120b925398c754b4f785fc12a8def0d09c09b.tar.gz
Fix incorrect values for VelocityTracker in SwipeDismissLayout.
The offset used to adjust MotionEvents for swipe velocity tracking was incorrect, and caused issues when touch points where close together. Fixed the offset used, which resolved swiping issues. Bug: 34673753 Change-Id: Ide6060b511510bcf299e3db778e6ffc6afda5e19
-rw-r--r--core/java/com/android/internal/widget/SwipeDismissLayout.java17
1 files changed, 10 insertions, 7 deletions
diff --git a/core/java/com/android/internal/widget/SwipeDismissLayout.java b/core/java/com/android/internal/widget/SwipeDismissLayout.java
index 261fa4327494..6d814bf14bc0 100644
--- a/core/java/com/android/internal/widget/SwipeDismissLayout.java
+++ b/core/java/com/android/internal/widget/SwipeDismissLayout.java
@@ -79,7 +79,6 @@ public class SwipeDismissLayout extends FrameLayout {
private boolean mDismissed;
private boolean mDiscardIntercept;
private VelocityTracker mVelocityTracker;
- private float mTranslationX;
private boolean mBlockGesture = false;
private boolean mActivityTranslucencyConverted = false;
@@ -166,8 +165,10 @@ public class SwipeDismissLayout extends FrameLayout {
return super.onInterceptTouchEvent(ev);
}
- // offset because the view is translated during swipe
- ev.offsetLocation(mTranslationX, 0);
+ // Offset because the view is translated during swipe, match X with raw X. Active touch
+ // coordinates are mostly used by the velocity tracker, so offset it to match the raw
+ // coordinates which is what is primarily used elsewhere.
+ ev.offsetLocation(ev.getRawX() - ev.getX(), 0);
switch (ev.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
@@ -232,8 +233,12 @@ public class SwipeDismissLayout extends FrameLayout {
if (mVelocityTracker == null || !mDismissable) {
return super.onTouchEvent(ev);
}
- // offset because the view is translated during swipe
- ev.offsetLocation(mTranslationX, 0);
+
+ // Offset because the view is translated during swipe, match X with raw X. Active touch
+ // coordinates are mostly used by the velocity tracker, so offset it to match the raw
+ // coordinates which is what is primarily used elsewhere.
+ ev.offsetLocation(ev.getRawX() - ev.getX(), 0);
+
switch (ev.getActionMasked()) {
case MotionEvent.ACTION_UP:
updateDismiss(ev);
@@ -266,7 +271,6 @@ public class SwipeDismissLayout extends FrameLayout {
}
private void setProgress(float deltaX) {
- mTranslationX = deltaX;
if (mProgressListener != null && deltaX >= 0) {
mProgressListener.onSwipeProgressChanged(
this, progressToAlpha(deltaX / getWidth()), deltaX);
@@ -300,7 +304,6 @@ public class SwipeDismissLayout extends FrameLayout {
mVelocityTracker.recycle();
}
mVelocityTracker = null;
- mTranslationX = 0;
mDownX = 0;
mLastX = Integer.MIN_VALUE;
mDownY = 0;