summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Brown <jeffbrown@google.com> 2011-09-16 21:40:49 -0700
committer Jeff Brown <jeffbrown@google.com> 2011-09-16 21:43:58 -0700
commitb0c71eb9f50ce06327fa6bb6219f0970e04fd856 (patch)
treed6b88ffc318ae23124c750faf2dc0f873e97e0cf
parent1afeea0f207f8b8b781f799f5d150b70495abb1a (diff)
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
-rw-r--r--core/java/android/widget/AbsListView.java3
-rw-r--r--core/java/android/widget/OverScroller.java2
-rw-r--r--libs/ui/Input.cpp2
3 files changed, 5 insertions, 2 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index cfe4cb720de7..ba89ef3e6cbd 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<ListAdapter> 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 542a1ef2acda..e5719981e648 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 a5ba57dba78f..3de75bae9404 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;
}