Stop rejecting valid flings in quick contacts
I continue to regret basing MultiShrinkScroller off of
ScrollableViewGroup instead of directly basing it off of the
less buggy ScrollView code.
* Previously we only tracked velocity inside onTouch.
Now, we will also track it in onInterceptTouchEvent, similarly
to ViewDragHelper. This will result in double tracking of
some events. This isn't a problem: VelocityTracker.cpp considers
the timestamp when performing the velocity calculation.
* Don't dismiss vertical flings simply because they also contain
a horizontal fling
Bug: 17919260
Change-Id: Ic0e512633dd6d99b1e55adfb56a57e4f170f2e73
diff --git a/src/com/android/contacts/widget/MultiShrinkScroller.java b/src/com/android/contacts/widget/MultiShrinkScroller.java
index dfec204..cf32aa1 100644
--- a/src/com/android/contacts/widget/MultiShrinkScroller.java
+++ b/src/com/android/contacts/widget/MultiShrinkScroller.java
@@ -389,6 +389,11 @@
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
+ if (mVelocityTracker == null) {
+ mVelocityTracker = VelocityTracker.obtain();
+ }
+ mVelocityTracker.addMovement(event);
+
// The only time we want to intercept touch events is when we are being dragged.
return shouldStartDrag(event);
}
@@ -1157,11 +1162,8 @@
}
private boolean motionShouldStartDrag(MotionEvent event) {
- final float deltaX = event.getX() - mLastEventPosition[0];
final float deltaY = event.getY() - mLastEventPosition[1];
- final boolean draggedX = (deltaX > mTouchSlop || deltaX < -mTouchSlop);
- final boolean draggedY = (deltaY > mTouchSlop || deltaY < -mTouchSlop);
- return draggedY && !draggedX;
+ return deltaY > mTouchSlop || deltaY < -mTouchSlop;
}
private float updatePositionAndComputeDelta(MotionEvent event) {