Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Side by Side Diff: android_webview/java/src/org/chromium/android_webview/AwContents.java

Issue 1063853005: Unify Android Webview and Chrome's fling (Closed) Base URL: https://chromium.googlesource.com/a/chromium/src.git@master
Patch Set: comments Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.android_webview; 5 package org.chromium.android_webview;
6 6
7 import android.annotation.SuppressLint; 7 import android.annotation.SuppressLint;
8 import android.app.Activity; 8 import android.app.Activity;
9 import android.content.ComponentCallbacks2; 9 import android.content.ComponentCallbacks2;
10 import android.content.Context; 10 import android.content.Context;
11 import android.content.res.Configuration; 11 import android.content.res.Configuration;
12 import android.graphics.Bitmap; 12 import android.graphics.Bitmap;
13 import android.graphics.Canvas; 13 import android.graphics.Canvas;
14 import android.graphics.Color; 14 import android.graphics.Color;
15 import android.graphics.Paint; 15 import android.graphics.Paint;
16 import android.graphics.Picture; 16 import android.graphics.Picture;
17 import android.graphics.Rect; 17 import android.graphics.Rect;
18 import android.net.Uri; 18 import android.net.Uri;
19 import android.net.http.SslCertificate; 19 import android.net.http.SslCertificate;
20 import android.os.AsyncTask; 20 import android.os.AsyncTask;
21 import android.os.Build; 21 import android.os.Build;
22 import android.os.Bundle; 22 import android.os.Bundle;
23 import android.os.Handler; 23 import android.os.Handler;
24 import android.os.Message; 24 import android.os.Message;
25 import android.os.SystemClock;
25 import android.text.TextUtils; 26 import android.text.TextUtils;
26 import android.util.Base64; 27 import android.util.Base64;
28 import android.util.FloatMath;
27 import android.util.Log; 29 import android.util.Log;
28 import android.util.Pair; 30 import android.util.Pair;
29 import android.view.KeyEvent; 31 import android.view.KeyEvent;
30 import android.view.MotionEvent; 32 import android.view.MotionEvent;
31 import android.view.View; 33 import android.view.View;
32 import android.view.ViewGroup; 34 import android.view.ViewGroup;
33 import android.view.accessibility.AccessibilityEvent; 35 import android.view.accessibility.AccessibilityEvent;
34 import android.view.accessibility.AccessibilityNodeInfo; 36 import android.view.accessibility.AccessibilityNodeInfo;
35 import android.view.accessibility.AccessibilityNodeProvider; 37 import android.view.accessibility.AccessibilityNodeProvider;
38 import android.view.animation.AnimationUtils;
36 import android.view.inputmethod.EditorInfo; 39 import android.view.inputmethod.EditorInfo;
37 import android.view.inputmethod.InputConnection; 40 import android.view.inputmethod.InputConnection;
38 import android.webkit.GeolocationPermissions; 41 import android.webkit.GeolocationPermissions;
39 import android.webkit.JavascriptInterface; 42 import android.webkit.JavascriptInterface;
40 import android.webkit.ValueCallback; 43 import android.webkit.ValueCallback;
41 import android.widget.OverScroller; 44 import android.widget.OverScroller;
42 45
43 import org.chromium.android_webview.permission.AwPermissionRequest; 46 import org.chromium.android_webview.permission.AwPermissionRequest;
44 import org.chromium.base.CalledByNative; 47 import org.chromium.base.CalledByNative;
45 import org.chromium.base.JNINamespace; 48 import org.chromium.base.JNINamespace;
(...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 public void onPinchEnded() { 570 public void onPinchEnded() {
568 mLayoutSizer.unfreezeLayoutRequests(); 571 mLayoutSizer.unfreezeLayoutRequests();
569 } 572 }
570 573
571 @Override 574 @Override
572 public void onFlingCancelGesture() { 575 public void onFlingCancelGesture() {
573 mScrollOffsetManager.onFlingCancelGesture(); 576 mScrollOffsetManager.onFlingCancelGesture();
574 } 577 }
575 578
576 @Override 579 @Override
577 public void onUnhandledFlingStartEvent(int velocityX, int velocityY) {
578 mScrollOffsetManager.onUnhandledFlingStartEvent(velocityX, velocityY );
579 }
580
581 @Override
582 public void onScrollUpdateGestureConsumed() { 580 public void onScrollUpdateGestureConsumed() {
583 mScrollAccessibilityHelper.postViewScrolledAccessibilityEventCallbac k(); 581 mScrollAccessibilityHelper.postViewScrolledAccessibilityEventCallbac k();
584 } 582 }
585 } 583 }
586 584
587 //-------------------------------------------------------------------------- ------------------ 585 //-------------------------------------------------------------------------- ------------------
588 private class AwComponentCallbacks implements ComponentCallbacks2 { 586 private class AwComponentCallbacks implements ComponentCallbacks2 {
589 @Override 587 @Override
590 public void onTrimMemory(final int level) { 588 public void onTrimMemory(final int level) {
591 if (isDestroyed()) return; 589 if (isDestroyed()) return;
(...skipping 1280 matching lines...) Expand 10 before | Expand all | Expand 10 after
1872 */ 1870 */
1873 public float getScale() { 1871 public float getScale() {
1874 return (float) (mPageScaleFactor * mDIPScale); 1872 return (float) (mPageScaleFactor * mDIPScale);
1875 } 1873 }
1876 1874
1877 /** 1875 /**
1878 * @see android.webkit.WebView#flingScroll(int, int) 1876 * @see android.webkit.WebView#flingScroll(int, int)
1879 */ 1877 */
1880 public void flingScroll(int velocityX, int velocityY) { 1878 public void flingScroll(int velocityX, int velocityY) {
1881 if (TRACE) Log.d(TAG, "flingScroll"); 1879 if (TRACE) Log.d(TAG, "flingScroll");
1882 mScrollOffsetManager.flingScroll(velocityX, velocityY); 1880 mContentViewCore.fling(SystemClock.uptimeMillis(), 0, 0, -velocityX, -ve locityY);
1883 } 1881 }
1884 1882
1885 /** 1883 /**
1886 * @see android.webkit.WebView#pageUp(boolean) 1884 * @see android.webkit.WebView#pageUp(boolean)
1887 */ 1885 */
1888 public boolean pageUp(boolean top) { 1886 public boolean pageUp(boolean top) {
1889 if (TRACE) Log.d(TAG, "pageUp"); 1887 if (TRACE) Log.d(TAG, "pageUp");
1890 return mScrollOffsetManager.pageUp(top); 1888 return mScrollOffsetManager.pageUp(top);
1891 } 1889 }
1892 1890
(...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after
2483 // This change notification comes from the renderer thread, not from the cc/ impl thread. 2481 // This change notification comes from the renderer thread, not from the cc/ impl thread.
2484 mLayoutSizer.onContentSizeChanged(widthCss, heightCss); 2482 mLayoutSizer.onContentSizeChanged(widthCss, heightCss);
2485 } 2483 }
2486 2484
2487 @CalledByNative 2485 @CalledByNative
2488 private void scrollContainerViewTo(int x, int y) { 2486 private void scrollContainerViewTo(int x, int y) {
2489 mScrollOffsetManager.scrollContainerViewTo(x, y); 2487 mScrollOffsetManager.scrollContainerViewTo(x, y);
2490 } 2488 }
2491 2489
2492 @CalledByNative 2490 @CalledByNative
2493 public boolean isFlingActive() { 2491 public boolean isSmoothScrollingActive() {
2494 return mScrollOffsetManager.isFlingActive(); 2492 return mScrollOffsetManager.isSmoothScrollingActive();
2495 } 2493 }
2496 2494
2497 @CalledByNative 2495 @CalledByNative
2498 private void updateScrollState(int maxContainerViewScrollOffsetX, 2496 private void updateScrollState(int maxContainerViewScrollOffsetX,
2499 int maxContainerViewScrollOffsetY, int contentWidthDip, int contentH eightDip, 2497 int maxContainerViewScrollOffsetY, int contentWidthDip, int contentH eightDip,
2500 float pageScaleFactor, float minPageScaleFactor, float maxPageScaleF actor) { 2498 float pageScaleFactor, float minPageScaleFactor, float maxPageScaleF actor) {
2501 mContentWidthDip = contentWidthDip; 2499 mContentWidthDip = contentWidthDip;
2502 mContentHeightDip = contentHeightDip; 2500 mContentHeightDip = contentHeightDip;
2503 mScrollOffsetManager.setMaxScrollOffset(maxContainerViewScrollOffsetX, 2501 mScrollOffsetManager.setMaxScrollOffset(maxContainerViewScrollOffsetX,
2504 maxContainerViewScrollOffsetY); 2502 maxContainerViewScrollOffsetY);
2505 setPageScaleFactorAndLimits(pageScaleFactor, minPageScaleFactor, maxPage ScaleFactor); 2503 setPageScaleFactorAndLimits(pageScaleFactor, minPageScaleFactor, maxPage ScaleFactor);
2506 } 2504 }
2507 2505
2508 @CalledByNative 2506 @CalledByNative
2509 private void setAwAutofillClient(AwAutofillClient client) { 2507 private void setAwAutofillClient(AwAutofillClient client) {
2510 mAwAutofillClient = client; 2508 mAwAutofillClient = client;
2511 client.init(mContentViewCore); 2509 client.init(mContentViewCore);
2512 } 2510 }
2513 2511
2514 @CalledByNative 2512 @CalledByNative
2515 private void didOverscroll(int deltaX, int deltaY) { 2513 private void didOverscroll(int deltaX, int deltaY, float velocityX, float ve locityY,
2516 if (mOverScrollGlow != null) { 2514 boolean firstOverscrollX, boolean firstOverscrollY) {
2517 mOverScrollGlow.setOverScrollDeltas(deltaX, deltaY); 2515 if (mOverScrollGlow == null) return;
2516
2517 mOverScrollGlow.setOverScrollDeltas(deltaX, deltaY);
2518
2519 // TODO(jdduke): Skip this for components with non-zero velocity?
jdduke (slow) 2015/05/12 20:46:06 It's quite possible we don't even need these check
hush (inactive) 2015/05/13 23:26:20 OverScrollGlow class has all the information it ne
2520 if ((velocityX != 0 && firstOverscrollX) || (velocityY != 0 && firstOver scrollY)) {
aelias_OOO_until_Jul13 2015/05/09 03:32:04 Could you explain why the first overscroll needs t
hush (inactive) 2015/05/12 19:08:45 I guess the original idea to absorb the glow if it
jdduke (slow) 2015/05/12 19:34:11 I would love for this to be the case, but Chrome's
hush (inactive) 2015/05/13 23:26:20 Okay.. I will just continue using WebView's custom
2521 final int oldX = mContainerView.getScrollX();
2522 final int oldY = mContainerView.getScrollY();
2523 final int x = oldX + deltaX;
2524 final int y = oldX + deltaY;
hush (inactive) 2015/05/13 23:26:20 It should have been oldY + deltaY.
2525 final int scrollRangeX = mScrollOffsetManager.computeMaximumHorizont alScrollOffset();
2526 final int scrollRangeY = mScrollOffsetManager.computeMaximumVertical ScrollOffset();
2527 mOverScrollGlow.absorbGlow(x, y, oldX, oldY, scrollRangeX, scrollRan geY,
2528 FloatMath.hypot(velocityX, velocityY));
2529 } else {
2530 mScrollOffsetManager.overScrollBy(deltaX, deltaY);
2518 } 2531 }
2519 2532
2520 mScrollOffsetManager.overScrollBy(deltaX, deltaY); 2533 if (mOverScrollGlow.isAnimating()) {
2521
2522 if (mOverScrollGlow != null && mOverScrollGlow.isAnimating()) {
2523 postInvalidateOnAnimation(); 2534 postInvalidateOnAnimation();
2524 } 2535 }
2525 } 2536 }
2526 2537
2527 // ------------------------------------------------------------------------- ------------------ 2538 // ------------------------------------------------------------------------- ------------------
2528 // Helper methods 2539 // Helper methods
2529 // ------------------------------------------------------------------------- ------------------ 2540 // ------------------------------------------------------------------------- ------------------
2530 2541
2531 private void setPageScaleFactorAndLimits( 2542 private void setPageScaleFactorAndLimits(
2532 float pageScaleFactor, float minPageScaleFactor, float maxPageScaleF actor) { 2543 float pageScaleFactor, float minPageScaleFactor, float maxPageScaleF actor) {
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
2916 return mScrollOffsetManager.computeVerticalScrollOffset(); 2927 return mScrollOffsetManager.computeVerticalScrollOffset();
2917 } 2928 }
2918 2929
2919 @Override 2930 @Override
2920 public int computeVerticalScrollExtent() { 2931 public int computeVerticalScrollExtent() {
2921 return mScrollOffsetManager.computeVerticalScrollExtent(); 2932 return mScrollOffsetManager.computeVerticalScrollExtent();
2922 } 2933 }
2923 2934
2924 @Override 2935 @Override
2925 public void computeScroll() { 2936 public void computeScroll() {
2926 mScrollOffsetManager.computeScrollAndAbsorbGlow(mOverScrollGlow); 2937 if (mScrollOffsetManager.willComputeScroll()) {
2938 mScrollOffsetManager.computeScrollAndAbsorbGlow(mOverScrollGlow) ;
2939 } else {
2940 if (isDestroyed()) return;
2941 nativeOnComputeScroll(
2942 mNativeAwContents, AnimationUtils.currentAnimationTimeMi llis());
2943 }
2927 } 2944 }
2928 } 2945 }
2929 2946
2930 // Return true if the GeolocationPermissionAPI should be used. 2947 // Return true if the GeolocationPermissionAPI should be used.
2931 @CalledByNative 2948 @CalledByNative
2932 private boolean useLegacyGeolocationPermissionAPI() { 2949 private boolean useLegacyGeolocationPermissionAPI() {
2933 // Always return true since we are not ready to swap the geolocation yet . 2950 // Always return true since we are not ready to swap the geolocation yet .
2934 // TODO: If we decide not to migrate the geolocation, there are some unr eachable 2951 // TODO: If we decide not to migrate the geolocation, there are some unr eachable
2935 // code need to remove. http://crbug.com/396184. 2952 // code need to remove. http://crbug.com/396184.
2936 return true; 2953 return true;
(...skipping 16 matching lines...) Expand all
2953 AwContentsClientBridge contentsClientBridge, 2970 AwContentsClientBridge contentsClientBridge,
2954 AwContentsIoThreadClient ioThreadClient, 2971 AwContentsIoThreadClient ioThreadClient,
2955 InterceptNavigationDelegate navigationInterceptionDelegate); 2972 InterceptNavigationDelegate navigationInterceptionDelegate);
2956 private native WebContents nativeGetWebContents(long nativeAwContents); 2973 private native WebContents nativeGetWebContents(long nativeAwContents);
2957 2974
2958 private native void nativeDocumentHasImages(long nativeAwContents, Message m essage); 2975 private native void nativeDocumentHasImages(long nativeAwContents, Message m essage);
2959 private native void nativeGenerateMHTML( 2976 private native void nativeGenerateMHTML(
2960 long nativeAwContents, String path, ValueCallback<String> callback); 2977 long nativeAwContents, String path, ValueCallback<String> callback);
2961 2978
2962 private native void nativeAddVisitedLinks(long nativeAwContents, String[] vi sitedLinks); 2979 private native void nativeAddVisitedLinks(long nativeAwContents, String[] vi sitedLinks);
2980 private native void nativeOnComputeScroll(
2981 long nativeAwContents, long currentAnimationTimeMillis);
2963 private native boolean nativeOnDraw(long nativeAwContents, Canvas canvas, 2982 private native boolean nativeOnDraw(long nativeAwContents, Canvas canvas,
2964 boolean isHardwareAccelerated, int scrollX, int scrollY, 2983 boolean isHardwareAccelerated, int scrollX, int scrollY,
2965 int visibleLeft, int visibleTop, int visibleRight, int visibleBottom ); 2984 int visibleLeft, int visibleTop, int visibleRight, int visibleBottom );
2966 private native void nativeFindAllAsync(long nativeAwContents, String searchS tring); 2985 private native void nativeFindAllAsync(long nativeAwContents, String searchS tring);
2967 private native void nativeFindNext(long nativeAwContents, boolean forward); 2986 private native void nativeFindNext(long nativeAwContents, boolean forward);
2968 private native void nativeClearMatches(long nativeAwContents); 2987 private native void nativeClearMatches(long nativeAwContents);
2969 private native void nativeClearCache(long nativeAwContents, boolean includeD iskFiles); 2988 private native void nativeClearCache(long nativeAwContents, boolean includeD iskFiles);
2970 private native byte[] nativeGetCertificate(long nativeAwContents); 2989 private native byte[] nativeGetCertificate(long nativeAwContents);
2971 2990
2972 // Coordinates in desity independent pixels. 2991 // Coordinates in desity independent pixels.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
3012 private native void nativeCreatePdfExporter(long nativeAwContents, AwPdfExpo rter awPdfExporter); 3031 private native void nativeCreatePdfExporter(long nativeAwContents, AwPdfExpo rter awPdfExporter);
3013 3032
3014 private native void nativePreauthorizePermission(long nativeAwContents, Stri ng origin, 3033 private native void nativePreauthorizePermission(long nativeAwContents, Stri ng origin,
3015 long resources); 3034 long resources);
3016 3035
3017 private native void nativePostMessageToFrame(long nativeAwContents, String f rameId, 3036 private native void nativePostMessageToFrame(long nativeAwContents, String f rameId,
3018 String message, String targetOrigin, int[] msgPorts); 3037 String message, String targetOrigin, int[] msgPorts);
3019 3038
3020 private native void nativeCreateMessageChannel(long nativeAwContents, AwMess agePort[] ports); 3039 private native void nativeCreateMessageChannel(long nativeAwContents, AwMess agePort[] ports);
3021 } 3040 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698