summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWinson <winsonc@google.com>2015-08-27 10:19:48 -0700
committerWinson <winsonc@google.com>2015-08-27 10:19:48 -0700
commitec4845b3b19c1496cd67f58f1d027bcd97e1dcb0 (patch)
tree9095a7a1f4eb3a6d73ee48c1d51b4ad625cae8e7
parenta79b18ad36ca9025ac4862c492260a656f61c7cf (diff)
downloadandroid_packages_apps_Trebuchet-ec4845b3b19c1496cd67f58f1d027bcd97e1dcb0.tar.gz
android_packages_apps_Trebuchet-ec4845b3b19c1496cd67f58f1d027bcd97e1dcb0.tar.bz2
android_packages_apps_Trebuchet-ec4845b3b19c1496cd67f58f1d027bcd97e1dcb0.zip
Fixing an issue where you would inadvertently start fastscrolling.
- This would happen when you scroll near the thumb and pass through the area where the scrollbar was when the gesture started, and this CL prevents gestures that move beyond a fixed distance from the original touch position that is not already a fastscroll. Bug: 23561678 Change-Id: I66226777671456a8919503dae4e92164ee10dd6d
-rw-r--r--src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java b/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java
index f76aed7ad..fcee7e8dd 100644
--- a/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java
+++ b/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java
@@ -66,6 +66,7 @@ public class BaseRecyclerViewFastScrollBar {
private boolean mIsDragging;
private boolean mIsThumbDetached;
private boolean mCanThumbDetach;
+ private boolean mIgnoreDragGesture;
// This is the offset from the top of the scrollbar when the user first starts touching. To
// prevent jumping, this offset is applied as the user scrolls.
@@ -180,13 +181,15 @@ public class BaseRecyclerViewFastScrollBar {
int y = (int) ev.getY();
switch (action) {
case MotionEvent.ACTION_DOWN:
- if (isNearPoint(downX, downY)) {
+ if (isNearThumb(downX, downY)) {
mTouchOffset = downY - mThumbOffset.y;
}
break;
case MotionEvent.ACTION_MOVE:
- // Check if we should start scrolling
- if (!mIsDragging && isNearPoint(downX, downY) &&
+ // Check if we should start scrolling, but ignore this fastscroll gesture if we have
+ // exceeded some fixed movement
+ mIgnoreDragGesture |= Math.abs(y - downY) > config.getScaledPagingTouchSlop();
+ if (!mIsDragging && !mIgnoreDragGesture && isNearThumb(downX, lastY) &&
Math.abs(y - downY) > config.getScaledTouchSlop()) {
mRv.getParent().requestDisallowInterceptTouchEvent(true);
mIsDragging = true;
@@ -214,6 +217,7 @@ public class BaseRecyclerViewFastScrollBar {
case MotionEvent.ACTION_CANCEL:
mTouchOffset = 0;
mLastTouchY = 0;
+ mIgnoreDragGesture = false;
if (mIsDragging) {
mIsDragging = false;
mPopup.animateVisibility(false);
@@ -287,7 +291,7 @@ public class BaseRecyclerViewFastScrollBar {
/**
* Returns whether the specified points are near the scroll bar bounds.
*/
- private boolean isNearPoint(int x, int y) {
+ private boolean isNearThumb(int x, int y) {
mTmpRect.set(mThumbOffset.x, mThumbOffset.y, mThumbOffset.x + mThumbWidth,
mThumbOffset.y + mThumbHeight);
mTmpRect.inset(mTouchInset, mTouchInset);