From b0c71eb9f50ce06327fa6bb6219f0970e04fd856 Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Fri, 16 Sep 2011 21:40:49 -0700 Subject: Can't stop the fling! Bug: 5335420 Fixed a bug in VelocityTracker where the output velocity was not being set to zero when not available. Added a condition to ensure that the velocity is at least the minimum fling velocity before continuing. If not, then the user is trying to stop the fling and scroll more precisely. Change-Id: I36634b0c3f7a9a09cf20c33f71d41163a8e33eed --- core/java/android/widget/AbsListView.java | 3 ++- core/java/android/widget/OverScroller.java | 2 +- libs/ui/Input.cpp | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index cfe4cb7..ba89ef3 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -3654,7 +3654,8 @@ public abstract class AbsListView extends AdapterView implements Te vt.computeCurrentVelocity(1000, mMaximumVelocity); final float yvel = -vt.getYVelocity(activeId); - if (scroller.isScrollingInDirection(0, yvel)) { + if (Math.abs(yvel) >= mMinimumVelocity + && scroller.isScrollingInDirection(0, yvel)) { // Keep the fling alive a little longer postDelayed(this, FLYWHEEL_TIMEOUT); } else { diff --git a/core/java/android/widget/OverScroller.java b/core/java/android/widget/OverScroller.java index 542a1ef..e571998 100644 --- a/core/java/android/widget/OverScroller.java +++ b/core/java/android/widget/OverScroller.java @@ -532,7 +532,7 @@ public class OverScroller { final int dx = mScrollerX.mFinal - mScrollerX.mStart; final int dy = mScrollerY.mFinal - mScrollerY.mStart; return !isFinished() && Math.signum(xvel) == Math.signum(dx) && - Math.signum(yvel) == Math.signum(dy); + Math.signum(yvel) == Math.signum(dy); } static class SplineOverScroller { diff --git a/libs/ui/Input.cpp b/libs/ui/Input.cpp index a5ba57d..3de75ba 100644 --- a/libs/ui/Input.cpp +++ b/libs/ui/Input.cpp @@ -1020,6 +1020,8 @@ bool VelocityTracker::getVelocity(uint32_t id, float* outVx, float* outVy) const return true; } } + *outVx = 0; + *outVy = 0; return false; } -- cgit v1.1