Fix AbsListView scrolling behavior at edges.
Allow the user to start scrolling back into content immediately
after dragging past the end of content.
Remove some dead code.
Change-Id: Ife8f60499ac58179ba1e2500ca8745916392a4bc
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 66461a7..4aae05e 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -2059,12 +2059,6 @@
deltaY -= mMotionCorrection;
int incrementalDeltaY = mLastY != Integer.MIN_VALUE ? y - mLastY : deltaY;
- int motionViewPrevTop = 0;
- View motionView = this.getChildAt(mMotionPosition - mFirstPosition);
- if (motionView != null) {
- motionViewPrevTop = motionView.getTop();
- }
-
// No need to do all this work if we're not going to move anyway
boolean atEdge = false;
if (incrementalDeltaY != 0) {
@@ -2072,14 +2066,19 @@
}
// Check to see if we have bumped into the scroll limit
- motionView = this.getChildAt(mMotionPosition - mFirstPosition);
- if (motionView != null) {
- // Check if the top of the motion view is where it is
- // supposed to be
- final int motionViewRealTop = motionView.getTop();
- if (atEdge) {
- invalidate();
+ if (atEdge && getChildCount() > 0) {
+ // Treat this like we're starting a new scroll from the current
+ // position. This will let the user start scrolling back into
+ // content immediately rather than needing to scroll back to the
+ // point where they hit the limit first.
+ int motionPosition = findMotionRow(y);
+ if (motionPosition >= 0) {
+ final View motionView = getChildAt(motionPosition - mFirstPosition);
+ mMotionViewOriginalTop = motionView.getTop();
}
+ mMotionY = y;
+ mMotionPosition = motionPosition;
+ invalidate();
}
mLastY = y;
}