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;
                 }