Eliminate haptic feedback when hitting an overscroll barrier due to a fling.

Change-Id: I434ec3edd95a19677ad9dbd1ac5ca3f3f5d091cb
diff --git a/api/current.xml b/api/current.xml
index 7cb44d1..8a9e4ce 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -177258,6 +177258,8 @@
 </parameter>
 <parameter name="maxOverscrollY" type="int">
 </parameter>
+<parameter name="isTouchEvent" type="boolean">
+</parameter>
 </method>
 <method name="performClick"
  return="boolean"
@@ -385546,7 +385548,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="text" type="java.lang.String">
+<parameter name="message" type="java.lang.String">
 </parameter>
 </method>
 </class>
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index e83b9b5..e1d9c30 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -8686,13 +8686,15 @@
      *          along the X axis.
      * @param maxOverscrollY Number of pixels to overscroll by in either direction
      *          along the Y axis.
+     * @param isTouchEvent true if this scroll operation is the result of a touch event.
      * @return true if scrolling was clamped to an overscroll boundary along either
      *          axis, false otherwise.
      */
     protected boolean overscrollBy(int deltaX, int deltaY,
             int scrollX, int scrollY,
             int scrollRangeX, int scrollRangeY,
-            int maxOverscrollX, int maxOverscrollY) {
+            int maxOverscrollX, int maxOverscrollY,
+            boolean isTouchEvent) {
         final int overscrollMode = mOverscrollMode;
         final boolean canScrollHorizontal = 
                 computeHorizontalScrollRange() > computeHorizontalScrollExtent();
@@ -8770,10 +8772,11 @@
             clampedY = true;
         }
         
-        // Bump the device with some haptic feedback if we're at the edge
-        // and didn't start there.
-        if ((overscrollHorizontal && clampedX && scrollX != left && scrollX != right) ||
-                (overscrollVertical && clampedY && scrollY != top && scrollY != bottom)) {
+        // Bump the device with some haptic feedback if we're at the edge,
+        // didn't start there, and the scroll is the result of a touch event.
+        if (isTouchEvent &&
+                ((overscrollHorizontal && clampedX && scrollX != left && scrollX != right) ||
+                (overscrollVertical && clampedY && scrollY != top && scrollY != bottom))) {
             performHapticFeedback(HapticFeedbackConstants.SCROLL_BARRIER);
         }
 
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 3a34fb4..39b87fe 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -2670,7 +2670,7 @@
             if (oldX != x || oldY != y) {
                 overscrollBy(x - oldX, y - oldY, oldX, oldY,
                         computeMaxScrollX(), computeMaxScrollY(),
-                        getViewWidth() / 3, getViewHeight() / 3);
+                        getViewWidth() / 3, getViewHeight() / 3, false);
                 onScrollChanged(mScrollX, mScrollY, oldX, oldY);
             }
         } else {
@@ -5021,7 +5021,7 @@
         if ((deltaX | deltaY) != 0) {
             overscrollBy(deltaX, deltaY, mScrollX, mScrollY,
                     computeMaxScrollX(), computeMaxScrollY(),
-                    getViewWidth() / 3, getViewHeight() / 3);
+                    getViewWidth() / 3, getViewHeight() / 3, true);
         }
         if (!getSettings().getBuiltInZoomControls()) {
             boolean showPlusMinus = mMinZoomScale < mMaxZoomScale;
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index e901cc5..a78429e 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -2133,7 +2133,7 @@
                             int overscroll = -incrementalDeltaY - 
                                     (motionViewRealTop - motionViewPrevTop);
                             overscrollBy(0, overscroll, 0, mScrollY, 0, 0,
-                                    0, getOverscrollMax());
+                                    0, getOverscrollMax(), true);
                             mTouchMode = TOUCH_MODE_OVERSCROLL;
                             invalidate();
                         }
@@ -2178,7 +2178,7 @@
                         }
                     } else {
                         overscrollBy(0, -incrementalDeltaY, 0, mScrollY, 0, 0,
-                                0, getOverscrollMax());
+                                0, getOverscrollMax(), true);
                         invalidate();
                     }
                     mLastY = y;
@@ -2674,7 +2674,8 @@
                     if (motionView != null) {
                         // Tweak the scroll for how far we overshot
                         int overshoot = -(delta - (motionView.getTop() - oldTop));
-                        overscrollBy(0, overshoot, 0, mScrollY, 0, 0, 0, getOverscrollMax());
+                        overscrollBy(0, overshoot, 0, mScrollY, 0, 0,
+                                0, getOverscrollMax(), false);
                     }
                     float vel = scroller.getCurrVelocity();
                     if (delta > 0) {
@@ -2706,7 +2707,8 @@
                 if (scroller.computeScrollOffset()) {
                     final int scrollY = mScrollY;
                     final int deltaY = scroller.getCurrY() - scrollY;
-                    if (overscrollBy(0, deltaY, 0, scrollY, 0, 0, 0, getOverscrollMax())) {
+                    if (overscrollBy(0, deltaY, 0, scrollY, 0, 0,
+                            0, getOverscrollMax(), false)) {
                         startSpringback();
                     } else {
                         invalidate();
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index d80a5e3..702ce0a 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -508,7 +508,7 @@
                     final int oldX = mScrollX;
                     final int oldY = mScrollY;                    
                     overscrollBy(deltaX, 0, mScrollX, 0, getScrollRange(), 0,
-                            getOverscrollMax(), 0);
+                            getOverscrollMax(), 0, true);
                     onScrollChanged(mScrollX, mScrollY, oldX, oldY);
                 }
                 break;
@@ -1042,7 +1042,7 @@
 
             if (oldX != x || oldY != y) {
                 overscrollBy(x - oldX, y - oldY, oldX, oldY, getScrollRange(), 0,
-                        getOverscrollMax(), 0);
+                        getOverscrollMax(), 0, false);
                 onScrollChanged(mScrollX, mScrollY, oldX, oldY);
             }
 
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index d7dfa86..68c0ff0 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -506,7 +506,7 @@
                     final int oldX = mScrollX;
                     final int oldY = mScrollY;
                     overscrollBy(0, deltaY, 0, mScrollY, 0, getScrollRange(),
-                            0, getOverscrollMax());
+                            0, getOverscrollMax(), true);
                     onScrollChanged(mScrollX, mScrollY, oldX, oldY);
                 }
                 break;
@@ -1044,7 +1044,7 @@
 
             if (oldX != x || oldY != y) {
                 overscrollBy(x - oldX, y - oldY, oldX, oldY, 0, getScrollRange(),
-                        0, getOverscrollMax());
+                        0, getOverscrollMax(), false);
                 onScrollChanged(mScrollX, mScrollY, oldX, oldY);
             }