diff options
author | Winson <winsonc@google.com> | 2015-08-27 10:19:48 -0700 |
---|---|---|
committer | Winson <winsonc@google.com> | 2015-08-27 10:19:48 -0700 |
commit | ec4845b3b19c1496cd67f58f1d027bcd97e1dcb0 (patch) | |
tree | 9095a7a1f4eb3a6d73ee48c1d51b4ad625cae8e7 /src/com/android | |
parent | a79b18ad36ca9025ac4862c492260a656f61c7cf (diff) | |
download | android_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
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java | 12 |
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); |