summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorMindy Pereira <mindyp@google.com>2010-10-13 16:34:27 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-10-13 16:34:27 -0700
commitbaf5608941ae4de2bb5620fc81291f33da9d57ac (patch)
tree680f059fd5c7007cb3b8f513127f06f5c9bbdb48 /core/java
parent7d73b7066867368ebb30dd67a1649ae9db04b93e (diff)
parent998c67774aa2260ed05a39df45d983feb72e683c (diff)
am 998c6777: Merge "Never show overscroll if the page scrolls at all." into gingerbread
Merge commit '998c67774aa2260ed05a39df45d983feb72e683c' into gingerbread-plus-aosp * commit '998c67774aa2260ed05a39df45d983feb72e683c': Never show overscroll if the page scrolls at all.
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/webkit/WebView.java89
1 files changed, 55 insertions, 34 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 4d979823e64a..d4cdb70bb513 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -788,6 +788,11 @@ public class WebView extends AbsoluteLayout
private EdgeGlow mEdgeGlowBottom;
private EdgeGlow mEdgeGlowLeft;
private EdgeGlow mEdgeGlowRight;
+ /*
+ * These manage the delta the user has pulled beyond the edges.
+ */
+ private int mOverscrollDeltaX;
+ private int mOverscrollDeltaY;
// Used to match key downs and key ups
private boolean mGotKeyDown;
@@ -2577,17 +2582,59 @@ public class WebView extends AbsoluteLayout
boolean clampedY) {
mInOverScrollMode = false;
int maxX = computeMaxScrollX();
+ int maxY = computeMaxScrollY();
if (maxX == 0) {
// do not over scroll x if the page just fits the screen
scrollX = pinLocX(scrollX);
} else if (scrollX < 0 || scrollX > maxX) {
mInOverScrollMode = true;
}
- if (scrollY < 0 || scrollY > computeMaxScrollY()) {
+ if (scrollY < 0 || scrollY > maxY) {
mInOverScrollMode = true;
}
+ int oldX = mScrollX;
+ int oldY = mScrollY;
+
super.scrollTo(scrollX, scrollY);
+
+ // Only show overscroll bars if there was no movement in any direction
+ // as a result of scrolling.
+ if (mEdgeGlowTop != null && oldY == mScrollY && oldX == mScrollX) {
+ // Don't show left/right glows if we fit the whole content.
+ // Also don't show if there was vertical movement.
+ if (maxX > 0) {
+ final int pulledToX = oldX + mOverscrollDeltaX;
+ if (pulledToX < 0) {
+ mEdgeGlowLeft.onPull((float) mOverscrollDeltaX / getWidth());
+ if (!mEdgeGlowRight.isFinished()) {
+ mEdgeGlowRight.onRelease();
+ }
+ } else if (pulledToX > maxX) {
+ mEdgeGlowRight.onPull((float) mOverscrollDeltaX / getWidth());
+ if (!mEdgeGlowLeft.isFinished()) {
+ mEdgeGlowLeft.onRelease();
+ }
+ }
+ mOverscrollDeltaX = 0;
+ }
+
+ if (maxY > 0 || getOverScrollMode() == OVER_SCROLL_ALWAYS) {
+ final int pulledToY = oldY + mOverscrollDeltaY;
+ if (pulledToY < 0) {
+ mEdgeGlowTop.onPull((float) mOverscrollDeltaY / getHeight());
+ if (!mEdgeGlowBottom.isFinished()) {
+ mEdgeGlowBottom.onRelease();
+ }
+ } else if (pulledToY > maxY) {
+ mEdgeGlowBottom.onPull((float) mOverscrollDeltaY / getHeight());
+ if (!mEdgeGlowTop.isFinished()) {
+ mEdgeGlowTop.onRelease();
+ }
+ }
+ mOverscrollDeltaY = 0;
+ }
+ }
}
/**
@@ -5580,42 +5627,16 @@ public class WebView extends AbsoluteLayout
final int oldY = mScrollY;
final int rangeX = computeMaxScrollX();
final int rangeY = computeMaxScrollY();
- overScrollBy(deltaX, deltaY, oldX, oldY,
- rangeX, rangeY,
- mOverscrollDistance, mOverscrollDistance, true);
if (mEdgeGlowTop != null) {
- // Don't show left/right glows if we fit the whole content.
- if (rangeX > 0) {
- final int pulledToX = oldX + deltaX;
- if (pulledToX < 0) {
- mEdgeGlowLeft.onPull((float) deltaX / getWidth());
- if (!mEdgeGlowRight.isFinished()) {
- mEdgeGlowRight.onRelease();
- }
- } else if (pulledToX > rangeX) {
- mEdgeGlowRight.onPull((float) deltaX / getWidth());
- if (!mEdgeGlowLeft.isFinished()) {
- mEdgeGlowLeft.onRelease();
- }
- }
- }
-
- if (rangeY > 0 || getOverScrollMode() == OVER_SCROLL_ALWAYS) {
- final int pulledToY = oldY + deltaY;
- if (pulledToY < 0) {
- mEdgeGlowTop.onPull((float) deltaY / getHeight());
- if (!mEdgeGlowBottom.isFinished()) {
- mEdgeGlowBottom.onRelease();
- }
- } else if (pulledToY > rangeY) {
- mEdgeGlowBottom.onPull((float) deltaY / getHeight());
- if (!mEdgeGlowTop.isFinished()) {
- mEdgeGlowTop.onRelease();
- }
- }
- }
+ // Save the deltas for overscroll glow.
+ mOverscrollDeltaX = deltaX;
+ mOverscrollDeltaY = deltaY;
}
+
+ overScrollBy(deltaX, deltaY, oldX, oldY,
+ rangeX, rangeY,
+ mOverscrollDistance, mOverscrollDistance, true);
}
if (!getSettings().getBuiltInZoomControls()) {
boolean showPlusMinus = mMinZoomScale < mMaxZoomScale;