| Index: android_webview/java/src/org/chromium/android_webview/AwContents.java
|
| diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
|
| index c95137c7ec63a5d061f50cf0c56f4f90399adf86..325e6803cae5ca57d6a1ebac87ec963f82e27607 100644
|
| --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
|
| +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
|
| @@ -22,6 +22,7 @@ import android.os.Bundle;
|
| import android.os.Handler;
|
| import android.os.Message;
|
| import android.text.TextUtils;
|
| +import android.util.FloatMath;
|
| import android.util.Log;
|
| import android.util.Pair;
|
| import android.view.KeyEvent;
|
| @@ -31,6 +32,7 @@ import android.view.ViewGroup;
|
| import android.view.accessibility.AccessibilityEvent;
|
| import android.view.accessibility.AccessibilityNodeInfo;
|
| import android.view.accessibility.AccessibilityNodeProvider;
|
| +import android.view.animation.AnimationUtils;
|
| import android.view.inputmethod.EditorInfo;
|
| import android.view.inputmethod.InputConnection;
|
| import android.webkit.GeolocationPermissions;
|
| @@ -2279,14 +2281,29 @@ public class AwContents implements SmartClipProvider,
|
| }
|
|
|
| @CalledByNative
|
| - private void didOverscroll(int deltaX, int deltaY) {
|
| + private void didOverscroll(int deltaX, int deltaY, float velocityX, float velocityY,
|
| + boolean firstOverscrollX, boolean firstOverscrollY) {
|
| if (mOverScrollGlow != null) {
|
| mOverScrollGlow.setOverScrollDeltas(deltaX, deltaY);
|
| }
|
|
|
| + // TODO(jdduke): Skip this for components with non-zero velocity?
|
| mScrollOffsetManager.overScrollBy(deltaX, deltaY);
|
|
|
| - if (mOverScrollGlow != null && mOverScrollGlow.isAnimating()) {
|
| + if (mOverScrollGlow == null) return;
|
| +
|
| + if ((velocityX != 0 && firstOverscrollX) || (velocityY != 0 && firstOverscrollY)) {
|
| + final int oldX = mContainerView.getScrollX();
|
| + final int oldY = mContainerView.getScrollY();
|
| + final int x = oldX + deltaX;
|
| + final int y = oldX + deltaY;
|
| + final int scrollRangeX = mScrollOffsetManager.computeMaximumHorizontalScrollOffset();
|
| + final int scrollRangeY = mScrollOffsetManager.computeMaximumVerticalScrollOffset();
|
| + mOverScrollGlow.absorbGlow(x, y, oldX, oldY, scrollRangeX, scrollRangeY,
|
| + FloatMath.hypot(velocityX, velocityY));
|
| + }
|
| +
|
| + if (mOverScrollGlow.isAnimating()) {
|
| postInvalidateOnAnimation();
|
| }
|
| }
|
| @@ -2682,6 +2699,8 @@ public class AwContents implements SmartClipProvider,
|
|
|
| @Override
|
| public void computeScroll() {
|
| + if (isDestroyed()) return;
|
| + nativeOnComputeScroll(mNativeAwContents, AnimationUtils.currentAnimationTimeMillis());
|
| mScrollOffsetManager.computeScrollAndAbsorbGlow(mOverScrollGlow);
|
| }
|
| }
|
| @@ -2719,6 +2738,8 @@ public class AwContents implements SmartClipProvider,
|
| long nativeAwContents, String path, ValueCallback<String> callback);
|
|
|
| private native void nativeAddVisitedLinks(long nativeAwContents, String[] visitedLinks);
|
| + private native void nativeOnComputeScroll(
|
| + long nativeAwContents, long currentAnimationTimeMillis);
|
| private native boolean nativeOnDraw(long nativeAwContents, Canvas canvas,
|
| boolean isHardwareAccelerated, int scrollX, int scrollY,
|
| int visibleLeft, int visibleTop, int visibleRight, int visibleBottom);
|
|
|