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