Fixed an overscrolling bug in AbsListView with a root in OverScroller.
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 1cc1c26..66a7631 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -1892,9 +1892,10 @@
         // Check if we have moved far enough that it looks more like a
         // scroll than a tap
         final int distance = Math.abs(deltaY);
-        if (distance > mTouchSlop) {
+        final boolean overscroll = mScrollY != 0;
+        if (overscroll || distance > mTouchSlop) {
             createScrollingCache();
-            mTouchMode = TOUCH_MODE_SCROLL;
+            mTouchMode = overscroll ? TOUCH_MODE_OVERSCROLL : TOUCH_MODE_SCROLL;
             mMotionCorrection = deltaY;
             final Handler handler = getHandler();
             // Handler should not be null unless the AbsListView is not attached to a
@@ -2097,7 +2098,6 @@
                         // Check to see if we are back in 
                         View motionView = this.getChildAt(mMotionPosition - mFirstPosition);
                         if (motionView != null) {
-                            int topOffset = motionView.getTop() - mMotionViewNewTop;
                             mTouchMode = TOUCH_MODE_SCROLL;
 
                             // We did not scroll the full amount. Treat this essentially like the
diff --git a/core/java/android/widget/OverScroller.java b/core/java/android/widget/OverScroller.java
index 44d415e..b11caa1 100644
--- a/core/java/android/widget/OverScroller.java
+++ b/core/java/android/widget/OverScroller.java
@@ -125,8 +125,8 @@
         final float durationSecs = (OVERFLING_DURATION / 1000.f);
         int dx = (int)(xvel * durationSecs) / 8;
         int dy = (int)(yvel * durationSecs) / 8;
-        scroller.startScroll(startx, starty, dx, dy, OVERFLING_DURATION);
         mCurrScroller.abortAnimation();
+        scroller.startScroll(startx, starty, dx, dy, OVERFLING_DURATION);
         mCurrScroller = scroller;
         mScrollMode = MODE_OVERFLING;
     }
@@ -164,8 +164,8 @@
         }
         
         if (xoff != 0 || yoff != 0) {
-            scroller.startScroll(startX, startY, xoff, yoff, SPRINGBACK_DURATION);
             mCurrScroller.abortAnimation();
+            scroller.startScroll(startX, startY, xoff, yoff, SPRINGBACK_DURATION);
             mCurrScroller = scroller;
             mScrollMode = MODE_SPRINGBACK;
             return true;