WebViewChromium.java revision 6ef347a29d692df672aaf59ee4926a476288476a
146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)/* 246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Copyright (C) 2012 The Android Open Source Project 346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * 446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License"); 546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * you may not use this file except in compliance with the License. 646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * You may obtain a copy of the License at 746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * 846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * 1046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, software 1146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS, 1246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * See the License for the specific language governing permissions and 1446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * limitations under the License. 1546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) */ 1646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)package com.android.webview.chromium; 1846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.content.res.Configuration; 2046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Bitmap; 2146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Canvas; 2246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Paint; 2346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Picture; 2446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Rect; 2546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.drawable.Drawable; 2646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.net.http.SslCertificate; 2746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.os.Build; 2846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.os.Bundle; 2946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.os.Message; 30e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixonimport android.util.Log; 31a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixonimport android.view.HardwareCanvas; 3246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.KeyEvent; 3346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.MotionEvent; 3446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.View; 353411fdf2737f3f0dd0c1fa20045356cf89f34eddBo Liuimport android.view.View.MeasureSpec; 3646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.ViewGroup; 3746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.accessibility.AccessibilityEvent; 3846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.accessibility.AccessibilityNodeInfo; 395c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdochimport android.view.accessibility.AccessibilityNodeProvider; 4046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.EditorInfo; 4146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.InputConnection; 4246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.DownloadListener; 436d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdochimport android.webkit.FindActionModeCallback; 447db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixonimport android.webkit.JavascriptInterface; 4546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.ValueCallback; 4646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebBackForwardList; 4746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebChromeClient; 4846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebSettings; 4946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebView; 5046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewClient; 5146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewProvider; 5246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 53aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsenimport org.chromium.android_webview.AwBrowserContext; 5446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.android_webview.AwContents; 5546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.content.browser.LoadUrlParams; 5646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.net.NetworkChangeNotifier; 5746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 5846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.BufferedWriter; 5946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.File; 60ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixonimport java.lang.annotation.Annotation; 6146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.util.Map; 6246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 6346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)/** 6446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * This class is the delegate to which WebViewProxy forwards all API calls. 6546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * 661cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * Most of the actual functionality is implemented by AwContents (or ContentViewCore within 671cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * it). This class also contains WebView-specific APIs that require the creation of other 681cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * adapters (otherwise org.chromium.content would depend on the webview.chromium package) 691cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * and a small set of no-op deprecated APIs. 7046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) */ 7146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)class WebViewChromium implements WebViewProvider, 7246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) WebViewProvider.ScrollDelegate, WebViewProvider.ViewDelegate { 73e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon 74e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon private static final String TAG = WebViewChromium.class.getSimpleName(); 75e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon 7646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // The WebView that this WebViewChromium is the provider for. 7746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) WebView mWebView; 7846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // Lets us access protected View-derived methods on the WebView instance we're backing. 7946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) WebView.PrivateAccess mWebViewPrivate; 8046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // The client adapter class. 8146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) private WebViewContentsClientAdapter mContentsClientAdapter; 8246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 8346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // Variables for functionality provided by this adapter --------------------------------------- 8446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebSettings adapter, lazily initialized in the getter 8546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) private WebSettings mWebSettings; 863949435b480cb71106f65b237025da359cf8a8caBen Murdoch // The WebView wrapper for ContentViewCore and required browser compontents. 8746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) private AwContents mAwContents; 88a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon // Non-null if this webview is using the GL accelerated draw path. 89a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon private DrawGLFunctor mGLfunctor; 9046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 91aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen private AwBrowserContext mBrowserContext; 92aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen 93c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu private final WebView.HitTestResult mHitTestResult; 94c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu 956ef347a29d692df672aaf59ee4926a476288476aBen Murdoch private final int mAppTargetSdkVersion; 966ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 97aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen public WebViewChromium(WebView webView, WebView.PrivateAccess webViewPrivate, 98aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen AwBrowserContext browserContext) { 9946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebView = webView; 10046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebViewPrivate = webViewPrivate; 101c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mHitTestResult = new WebView.HitTestResult(); 102aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen mBrowserContext = browserContext; 1036ef347a29d692df672aaf59ee4926a476288476aBen Murdoch mAppTargetSdkVersion = mWebView.getContext().getApplicationInfo().targetSdkVersion; 10446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 10546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1061ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch static void completeWindowCreation(WebView parent, WebView child) { 1071ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch AwContents parentContents = ((WebViewChromium) parent.getWebViewProvider()).mAwContents; 108bbfef40e5fc625f4821f012fae7f16468b7308cfJonathan Dixon AwContents childContents = 109bbfef40e5fc625f4821f012fae7f16468b7308cfJonathan Dixon child == null ? null : ((WebViewChromium) child.getWebViewProvider()).mAwContents; 1101ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch parentContents.supplyContentsForPopup(childContents); 11146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 11246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 11346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider methods -------------------------------------------------------------------- 11446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 11546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 11646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void init(Map<String, Object> javaScriptInterfaces, boolean privateBrowsing) { 1174dcabaef9151384b571327b62234409b31caef38Jonathan Dixon // BUG=6790250 |javaScriptInterfaces| was only ever used by the obsolete DumpRenderTree 1184dcabaef9151384b571327b62234409b31caef38Jonathan Dixon // so is ignored. TODO: remove it from WebViewProvider. 11946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) final boolean isAccessFromFileURLsGrantedByDefault = 1206ef347a29d692df672aaf59ee4926a476288476aBen Murdoch mAppTargetSdkVersion < Build.VERSION_CODES.JELLY_BEAN; 12146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter = new WebViewContentsClientAdapter(mWebView); 122aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen mAwContents = new AwContents(mBrowserContext, mWebView, new InternalAccessAdapter(), 123aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen mContentsClientAdapter, isAccessFromFileURLsGrantedByDefault); 1244dcabaef9151384b571327b62234409b31caef38Jonathan Dixon 1254dcabaef9151384b571327b62234409b31caef38Jonathan Dixon if (privateBrowsing) { 1264dcabaef9151384b571327b62234409b31caef38Jonathan Dixon final String msg = "Private browsing is not supported in WebView."; 1276ef347a29d692df672aaf59ee4926a476288476aBen Murdoch if (mAppTargetSdkVersion >= Build.VERSION_CODES.KEY_LIME_PIE) { 1284dcabaef9151384b571327b62234409b31caef38Jonathan Dixon throw new IllegalArgumentException(msg); 1294dcabaef9151384b571327b62234409b31caef38Jonathan Dixon } else { 1304dcabaef9151384b571327b62234409b31caef38Jonathan Dixon Log.w(TAG, msg); 1314dcabaef9151384b571327b62234409b31caef38Jonathan Dixon // Intentionally irreversibly disable the webview instance, so that private 1324dcabaef9151384b571327b62234409b31caef38Jonathan Dixon // user data cannot leak through misuse of a non-privateBrowing WebView instance. 1334dcabaef9151384b571327b62234409b31caef38Jonathan Dixon // Can't just null out mAwContents as we never null-check it before use. 1344dcabaef9151384b571327b62234409b31caef38Jonathan Dixon mAwContents.destroy(); 1354dcabaef9151384b571327b62234409b31caef38Jonathan Dixon } 1364dcabaef9151384b571327b62234409b31caef38Jonathan Dixon } 1374dcabaef9151384b571327b62234409b31caef38Jonathan Dixon 13846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 13946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 14046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 14146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setHorizontalScrollbarOverlay(boolean overlay) { 14246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 14346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 14446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 14546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 14646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setVerticalScrollbarOverlay(boolean overlay) { 14746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 14846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 14946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 15046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 15146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean overlayHorizontalScrollbar() { 15246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 15346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 15446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 15546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 15646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 15746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean overlayVerticalScrollbar() { 15846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 15946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 16046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 16146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 16246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 16346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getVisibleTitleHeight() { 16446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // This is deprecated in WebView and should always return 0. 16546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return 0; 16646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 16746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 16846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 16946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public SslCertificate getCertificate() { 17046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mAwContents.getCertificate(); 17146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 17246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 17346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 17446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setCertificate(SslCertificate certificate) { 17546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 17646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 17746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 17846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 17946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void savePassword(String host, String username, String password) { 180adc6c4d74c77a617100bdfeb174ab0c314b24ea8Selim Gurun // This is a deprecated API: intentional no-op. 18146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 18246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 18346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 18446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setHttpAuthUsernamePassword(String host, String realm, String username, 18546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) String password) { 18646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.setHttpAuthUsernamePassword(host, realm, username, password); 18746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 18846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 18946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 19046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String[] getHttpAuthUsernamePassword(String host, String realm) { 19146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mAwContents.getHttpAuthUsernamePassword(host, realm); 19246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 19346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 19446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 19546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void destroy() { 1963949435b480cb71106f65b237025da359cf8a8caBen Murdoch mAwContents.destroy(); 197a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon if (mGLfunctor != null) { 198a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon mGLfunctor.destroy(); 199a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon mGLfunctor = null; 200a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon } 20146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 20246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 20346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 20446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setNetworkAvailable(boolean networkUp) { 20546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) NetworkChangeNotifier.forceConnectivityState(networkUp); 20646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 20746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 20846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 20946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebBackForwardList saveState(Bundle outState) { 210a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (outState == null) return null; 211a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (!mAwContents.saveState(outState)) return null; 212a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu return copyBackForwardList(); 21346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 21446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 21546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 21646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean savePicture(Bundle b, File dest) { 2179405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon // Intentional no-op: hidden method on WebView. 21846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 21946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 22046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 22146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 22246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean restorePicture(Bundle b, File src) { 2239405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon // Intentional no-op: hidden method on WebView. 22446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 22546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 22646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 22746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 22846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebBackForwardList restoreState(Bundle inState) { 229a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (inState == null) return null; 230a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (!mAwContents.restoreState(inState)) return null; 231a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu return copyBackForwardList(); 23246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 23346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 23446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 23546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void loadUrl(String url, Map<String, String> additionalHttpHeaders) { 23646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // TODO: We may actually want to do some sanity checks here (like filter about://chrome). 2376ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 2386ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // For backwards compatibility, apps targeting less than K will have JS URLs evaluated 2396ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // directly and any result of the evaluation will not replace the current page content. 2406ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // Matching Chrome behavior more closely; apps targetting >= K that load a JS URL will 2416ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // have the result of that URL replace the content of the current page. 2426ef347a29d692df672aaf59ee4926a476288476aBen Murdoch final String JAVASCRIPT_SCHEME = "javascript:"; 2436ef347a29d692df672aaf59ee4926a476288476aBen Murdoch if (mAppTargetSdkVersion < Build.VERSION_CODES.KEY_LIME_PIE && 2446ef347a29d692df672aaf59ee4926a476288476aBen Murdoch url.startsWith(JAVASCRIPT_SCHEME)) { 2456ef347a29d692df672aaf59ee4926a476288476aBen Murdoch evaluateJavaScript(url.substring(JAVASCRIPT_SCHEME.length()), null); 2466ef347a29d692df672aaf59ee4926a476288476aBen Murdoch return; 2476ef347a29d692df672aaf59ee4926a476288476aBen Murdoch } 2486ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 24946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) LoadUrlParams params = new LoadUrlParams(url); 25046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) if (additionalHttpHeaders != null) params.setExtraHeaders(additionalHttpHeaders); 25146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.loadUrl(params); 25246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 25346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 25446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 25546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void loadUrl(String url) { 25646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) loadUrl(url, null); 25746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 25846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 25946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 26046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void postUrl(String url, byte[] postData) { 26146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.loadUrl(LoadUrlParams.createLoadHttpPostParams( 26246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) url, postData)); 26346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 26446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 26546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) private static boolean isBase64Encoded(String encoding) { 26646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return "base64".equals(encoding); 26746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 26846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 26946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 27046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void loadData(String data, String mimeType, String encoding) { 27146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.loadUrl(LoadUrlParams.createLoadDataParams( 27246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) data, mimeType, isBase64Encoded(encoding))); 27346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 27446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 27546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 27646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, 27746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) String historyUrl) { 27846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) if (baseUrl == null || baseUrl.length() == 0) baseUrl = "about:blank"; 2791127e126a25f26d7d255c73e19d2e07f1c854781Ben Murdoch boolean isBase64 = isBase64Encoded(encoding); 2801127e126a25f26d7d255c73e19d2e07f1c854781Ben Murdoch // For backwards compatibility with WebViewClassic, we use the value of |encoding| 2811127e126a25f26d7d255c73e19d2e07f1c854781Ben Murdoch // as the charset, as long as it's not "base64". 28246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.loadUrl(LoadUrlParams.createLoadDataParamsWithBaseUrl( 2831127e126a25f26d7d255c73e19d2e07f1c854781Ben Murdoch data, mimeType, isBase64, baseUrl, historyUrl, isBase64 ? null : encoding)); 28446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 28546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 2866ef347a29d692df672aaf59ee4926a476288476aBen Murdoch public void evaluateJavaScript(String script, ValueCallback<String> resultCallback) { 2876ef347a29d692df672aaf59ee4926a476288476aBen Murdoch mAwContents.evaluateJavaScript(script, resultCallback); 2886ef347a29d692df672aaf59ee4926a476288476aBen Murdoch } 2896ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 29046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 29146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void saveWebArchive(String filename) { 29246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) saveWebArchive(filename, false, null); 29346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 29446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 29546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 29646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void saveWebArchive(String basename, boolean autoname, ValueCallback<String> callback) { 29746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.saveWebArchive(basename, autoname, callback); 29846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 29946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 30046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 30146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void stopLoading() { 3027cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.stopLoading(); 30346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 30446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 30546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 30646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void reload() { 3077cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.reload(); 30846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 30946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 31046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 31146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canGoBack() { 3127cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canGoBack(); 31346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 31446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 31546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 31646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void goBack() { 3177cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.goBack(); 31846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 31946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 32046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 32146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canGoForward() { 3227cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canGoForward(); 32346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 32446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 32546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 32646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void goForward() { 3277cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.goForward(); 32846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 32946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 33046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 33146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canGoBackOrForward(int steps) { 3327cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canGoBackOrForward(steps); 33346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 33446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 33546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 33646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void goBackOrForward(int steps) { 3377cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.goBackOrForward(steps); 33846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 33946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 34046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 34146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean isPrivateBrowsingEnabled() { 3426d58f78e7fc0412a58b163559cb8e9c4af5c6fe1Jonathan Dixon // Not supported in this WebView implementation. 34346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 34446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 34546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 34646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 34746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean pageUp(boolean top) { 3487cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.pageUp(top); 34946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 35046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 35146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 35246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean pageDown(boolean bottom) { 3537cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.pageDown(bottom); 35446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 35546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 35646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 35746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearView() { 35846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 35946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 36046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 36146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 36246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public Picture capturePicture() { 3639c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil return mAwContents.capturePicture(); 36446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 36546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 36646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 36746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public float getScale() { 3683520eb778d668dc76ca4541c69abd568b9d02691Mikhail Naganov return mAwContents.getScale(); 36946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 37046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 37146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 37246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setInitialScale(int scaleInPercent) { 3733520eb778d668dc76ca4541c69abd568b9d02691Mikhail Naganov mAwContents.getSettings().setInitialPageScale(scaleInPercent); 37446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 37546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 37646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 37746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void invokeZoomPicker() { 3787cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.invokeZoomPicker(); 37946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 38046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 38146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 38246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebView.HitTestResult getHitTestResult() { 383c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu AwContents.HitTestData data = mAwContents.getLastHitTestResult(); 384c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mHitTestResult.setType(data.hitTestResultType); 385c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mHitTestResult.setExtra(data.hitTestResultExtraData); 386c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mHitTestResult; 38746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 38846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 38946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 39046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void requestFocusNodeHref(Message hrefMsg) { 391c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mAwContents.requestFocusNodeHref(hrefMsg); 39246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 39346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 39446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 39546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void requestImageRef(Message msg) { 396c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mAwContents.requestImageRef(msg); 39746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 39846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 39946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 40046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getUrl() { 4017cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba String url = mAwContents.getUrl(); 40246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) if (url == null || url.trim().isEmpty()) return null; 40346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return url; 40446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 40546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 40646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 40746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getOriginalUrl() { 40846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) String url = mAwContents.getOriginalUrl(); 40946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) if (url == null || url.trim().isEmpty()) return null; 41046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return url; 41146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 41246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 41346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 41446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getTitle() { 4157cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.getTitle(); 41646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 41746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 41846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 41946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public Bitmap getFavicon() { 4209405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon return mAwContents.getFavicon(); 42146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 42246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 42346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 42446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getTouchIconUrl() { 4259405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon // Intentional no-op: hidden method on WebView. 42646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return null; 42746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 42846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 42946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 43046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getProgress() { 43146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mAwContents.getMostRecentProgress(); 43246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 43346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 43446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 43546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getContentHeight() { 4366b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba return mAwContents.getContentHeightCss(); 43746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 43846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 43946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 44046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getContentWidth() { 4416b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba return mAwContents.getContentWidthCss(); 44246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 44346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 44446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 44546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void pauseTimers() { 446531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch mAwContents.pauseTimers(); 44746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 44846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 44946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 45046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void resumeTimers() { 451531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch mAwContents.resumeTimers(); 45246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 45346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 45446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 45546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onPause() { 4561cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onPause(); 45746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 45846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 45946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 46046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onResume() { 4611cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onResume(); 46246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 46346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 46446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 46546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean isPaused() { 4661cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon return mAwContents.isPaused(); 46746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 46846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 46946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 47046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void freeMemory() { 47146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 47246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 47346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 47446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 47546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearCache(boolean includeDiskFiles) { 47646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.clearCache(includeDiskFiles); 47746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 47846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 479bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun /** 480bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun * This is a poorly named method, but we keep it for historical reasons. 481bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun */ 48246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 48346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearFormData() { 484bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun mAwContents.hideAutofillPopup(); 48546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 48646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 48746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 48846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearHistory() { 4897cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.clearHistory(); 49046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 49146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 49246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 49346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearSslPreferences() { 4947cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.clearSslPreferences(); 49546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 49646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 49746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 49846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebBackForwardList copyBackForwardList() { 49908a5e00cdfb74f4ffd843d2d0a9b0b40b86b107aBo Liu return new WebBackForwardListChromium( 5007cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.getNavigationHistory()); 50146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 50246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 50346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 50446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setFindListener(WebView.FindListener listener) { 50546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setFindListener(listener); 50646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 50746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 50846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 50946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void findNext(boolean forwards) { 51046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.findNext(forwards); 51146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 51246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 51346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 51446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int findAll(String searchString) { 515f37548d6d8e2a73c65d675a26706a38f52960800Jonathan Dixon mAwContents.findAllAsync(searchString); 516f37548d6d8e2a73c65d675a26706a38f52960800Jonathan Dixon return 0; 51746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 51846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 51946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 52046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void findAllAsync(String searchString) { 52146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.findAllAsync(searchString); 52246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 52346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 52446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 52546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean showFindDialog(String text, boolean showIme) { 5266d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (mWebView.getParent() == null) { 5276d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch return false; 5286d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 5296d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 5306d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch FindActionModeCallback findAction = new FindActionModeCallback(mWebView.getContext()); 5316d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (findAction == null) { 5326d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch return false; 5336d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 5346d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 5356d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch mWebView.startActionMode(findAction); 5366d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.setWebView(mWebView); 5376d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (showIme) { 5386d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.showSoftInput(); 5396d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 5406d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 5416d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (text != null) { 5426d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.setText(text); 5436d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.findAll(); 5446d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 5456d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 5466d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch return true; 54746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 54846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 5496d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch @Override 550fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch public void notifyFindDialogDismissed() { 5516d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch clearMatches(); 552fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch } 553fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch 55446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 55546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearMatches() { 55646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.clearMatches(); 55746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 55846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 55946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 56046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void documentHasImages(Message response) { 56146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.documentHasImages(response); 56246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 56346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 56446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 56546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setWebViewClient(WebViewClient client) { 56646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setWebViewClient(client); 56746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 56846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 56946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 57046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setDownloadListener(DownloadListener listener) { 5714320e428efc3bf69387f3b9d5a0589b2b8746409Bo Liu mContentsClientAdapter.setDownloadListener(listener); 57246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 57346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 57446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 57546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setWebChromeClient(WebChromeClient client) { 57646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setWebChromeClient(client); 57746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 57846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 57946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 58046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setPictureListener(WebView.PictureListener listener) { 58146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setPictureListener(listener); 5829c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil mAwContents.enableOnNewPicture(listener != null, 5836ef347a29d692df672aaf59ee4926a476288476aBen Murdoch mAppTargetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR2); 58446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 58546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 58646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 58746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void addJavascriptInterface(Object obj, String interfaceName) { 588ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixon Class<? extends Annotation> requiredAnnotation = null; 5896ef347a29d692df672aaf59ee4926a476288476aBen Murdoch if (mAppTargetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 5907db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon requiredAnnotation = JavascriptInterface.class; 5917db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon } 5927cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.addPossiblyUnsafeJavascriptInterface(obj, interfaceName, requiredAnnotation); 59346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 59446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 59546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 59646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void removeJavascriptInterface(String interfaceName) { 5977cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.removeJavascriptInterface(interfaceName); 59846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 59946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 60046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 60146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebSettings getSettings() { 60246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) if (mWebSettings == null) { 603420c0da3a4e06e1ac5574091e7c9c286ef012369Mikhail Naganov mWebSettings = new ContentSettingsAdapter(mAwContents.getSettings()); 60446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 60546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebSettings; 60646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 60746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 60846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 60946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setMapTrackballToArrowKeys(boolean setMap) { 61046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // This is a deprecated API: intentional no-op. 61146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 61246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 61346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 61446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void flingScroll(int vx, int vy) { 6157cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.flingScroll(vx, vy); 61646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 61746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 61846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 61946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public View getZoomControls() { 620e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon // This was deprecated in 2009 and hidden in JB MR1, so just provide the minimum needed 621e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon // to stop very out-dated applications from crashing. 622e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon Log.w(TAG, "WebView doesn't support getZoomControls"); 623420c0da3a4e06e1ac5574091e7c9c286ef012369Mikhail Naganov return mAwContents.getSettings().supportZoom() ? new View(mWebView.getContext()) : null; 62446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 62546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 62646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 62746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canZoomIn() { 6287cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canZoomIn(); 62946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 63046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 63146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 63246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canZoomOut() { 6337cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canZoomOut(); 63446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 63546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 63646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 63746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean zoomIn() { 6387cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.zoomIn(); 63946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 64046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 64146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 64246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean zoomOut() { 6437cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.zoomOut(); 64446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 64546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 646d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon @Override 64746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void dumpViewHierarchyWithProperties(BufferedWriter out, int level) { 64846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 64946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 65046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 651d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon @Override 65246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public View findHierarchyView(String className, int hashCode) { 65346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 65446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return null; 65546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 65646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 65746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider glue methods --------------------------------------------------------------- 65846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 65946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 66046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebViewProvider.ViewDelegate getViewDelegate() { 66146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return this; 66246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 66346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 66446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 66546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebViewProvider.ScrollDelegate getScrollDelegate() { 66646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return this; 66746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 66846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 66946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 67046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider.ViewDelegate implementation ------------------------------------------------ 67146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 672a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch // TODO: remove from WebViewProvider and use default implementation from 673a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch // ViewGroup. 674a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch // @Override 67546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean shouldDelayChildPressedState() { 676a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch return true; 67746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 67846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 6795c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch// @Override 6805c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch public AccessibilityNodeProvider getAccessibilityNodeProvider() { 6815c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch return mAwContents.getAccessibilityNodeProvider(); 6825c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch } 6835c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch 68446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 68546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { 6867cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.onInitializeAccessibilityNodeInfo(info); 68746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 68846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 68946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 69046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onInitializeAccessibilityEvent(AccessibilityEvent event) { 6917cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.onInitializeAccessibilityEvent(event); 69246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 69346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 69446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 69546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean performAccessibilityAction(int action, Bundle arguments) { 696b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch if (mAwContents.supportsAccessibilityAction(action)) { 697b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch return mAwContents.performAccessibilityAction(action, arguments); 698b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch } 699b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch return mWebViewPrivate.super_performAccessibilityAction(action, arguments); 70046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 70146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 70246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 70346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setOverScrollMode(int mode) { 70446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 70546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 70646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 70746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 70846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setScrollBarStyle(int style) { 70946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 71046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 71146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 71246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 71346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar, 71446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) int l, int t, int r, int b) { 71546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 71646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 71746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 71846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 71946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) { 7203951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba mAwContents.onContainerViewOverScrolled(scrollX, scrollY, clampedX, clampedY); 72146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 72246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 72346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 72446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onWindowVisibilityChanged(int visibility) { 7251cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onWindowVisibilityChanged(visibility); 72646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 72746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 72846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 72946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onDraw(Canvas canvas) { 7307ab33360e331e04f515d532064670e210d174a7aTao Bai mAwContents.onDraw(canvas); 73146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 73246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 73346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 73446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setLayoutParams(ViewGroup.LayoutParams layoutParams) { 73546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // TODO: This is the minimum implementation for HTMLViewer 73646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // bringup. Likely will need to go up to ContentViewCore for 73746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // a complete implementation. 73846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebViewPrivate.super_setLayoutParams(layoutParams); 73946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 74046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 74146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 74246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean performLongClick() { 743decc147cebc8f73d355c024d92c60d3f727cab31Bo Liu return mWebViewPrivate.super_performLongClick(); 74446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 74546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 74646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 74746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onConfigurationChanged(Configuration newConfig) { 7481cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onConfigurationChanged(newConfig); 74946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 75046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 75146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 75246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 7537cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.onCreateInputConnection(outAttrs); 75446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 75546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 75646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 75746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) { 75846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 75946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 76046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 76146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 76246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 76346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onKeyDown(int keyCode, KeyEvent event) { 76446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 76546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 76646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 76746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 76846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 76946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onKeyUp(int keyCode, KeyEvent event) { 7707cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.onKeyUp(keyCode, event); 77146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 77246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 77346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 77446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onAttachedToWindow() { 7751cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onAttachedToWindow(); 77646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 77746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 77846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 77946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onDetachedFromWindow() { 7801cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onDetachedFromWindow(); 781a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon if (mGLfunctor != null) { 782a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon mGLfunctor.detach(); 783a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon } 78446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 78546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 78646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 78746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onVisibilityChanged(View changedView, int visibility) { 788c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba // The AwContents will find out the container view visibility before the first draw so we 789c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba // can safely ignore onVisibilityChanged callbacks that happen before init(). 790c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba if (mAwContents != null) { 791c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba mAwContents.onVisibilityChanged(changedView, visibility); 792c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba } 79346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 79446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 79546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 79646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onWindowFocusChanged(boolean hasWindowFocus) { 7971cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onWindowFocusChanged(hasWindowFocus); 79846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 79946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 80046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 80146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { 8021cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onFocusChanged(focused, direction, previouslyFocusedRect); 80346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 80446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 80546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 80646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean setFrame(int left, int top, int right, int bottom) { 8071cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon // TODO(joth): This is the minimum implementation for initial 8081cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon // bringup. Likely will need to go up to AwContents for a complete 8091cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon // implementation, e.g. setting the compositor visible region (to 8101cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon // avoid painting tiles that are offscreen due to the view's position). 81146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebViewPrivate.super_setFrame(left, top, right, bottom); 81246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 81346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 81446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 81546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onSizeChanged(int w, int h, int ow, int oh) { 8161cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onSizeChanged(w, h, ow, oh); 81746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 81846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 81946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 82046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onScrollChanged(int l, int t, int oldl, int oldt) { 82146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 82246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 82346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 82446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean dispatchKeyEvent(KeyEvent event) { 8257cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.dispatchKeyEvent(event); 82646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 82746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 82846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 82946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onTouchEvent(MotionEvent ev) { 830c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mAwContents.onTouchEvent(ev); 83146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 83246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 83346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 83446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onHoverEvent(MotionEvent event) { 835c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mAwContents.onHoverEvent(event); 83646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 83746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 83846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 83946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onGenericMotionEvent(MotionEvent event) { 840c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mAwContents.onGenericMotionEvent(event); 84146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 84246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 84346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 84446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onTrackballEvent(MotionEvent ev) { 84546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // Trackball event not handled, which eventually gets converted to DPAD keyevents 84646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 84746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 84846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 84946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 85046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean requestFocus(int direction, Rect previouslyFocusedRect) { 8514cee3bf50c125a52a49323aa999f4b619fa18c10Ben Murdoch mAwContents.requestFocus(); 85246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebViewPrivate.super_requestFocus(direction, previouslyFocusedRect); 85346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 85446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 85546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 85646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 857d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba mAwContents.onMeasure(widthMeasureSpec, heightMeasureSpec); 85846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 85946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 86046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 86146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean requestChildRectangleOnScreen(View child, Rect rect, boolean immediate) { 86246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 86346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 86446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 86546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 86646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 86746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setBackgroundColor(int color) { 86846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 86946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 87046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 87146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 87246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setLayerType(int layerType, Paint paint) { 87346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 87446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 87546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 8760b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil @Override 87746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void preDispatchDraw(Canvas canvas) { 8780b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil // TODO(leandrogracia): remove this method from WebViewProvider if we think 8790b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil // we won't need it again. 88046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 88146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 88246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider.ScrollDelegate implementation ---------------------------------------------- 88346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 88446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 88546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeHorizontalScrollRange() { 8867cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeHorizontalScrollRange(); 88746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 88846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 88946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 89046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeHorizontalScrollOffset() { 8917cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeHorizontalScrollOffset(); 89246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 89346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 89446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 89546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeVerticalScrollRange() { 8967cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeVerticalScrollRange(); 89746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 89846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 89946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 90046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeVerticalScrollOffset() { 9017cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeVerticalScrollOffset(); 90246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 90346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 90446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 90546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeVerticalScrollExtent() { 9067cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeVerticalScrollExtent(); 90746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 90846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 90946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 91046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void computeScroll() { 91146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // BUG=http://b/6029133 9124a0a38f783cb93f6a600da3ab296b72499239ffbJonathan Dixon // Too much log spam: UnimplementedWebViewApi.invoke(); 91346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 91446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 9154702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba // AwContents.InternalAccessDelegate implementation -------------------------------------- 9164702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba private class InternalAccessAdapter implements AwContents.InternalAccessDelegate { 91746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 91846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean drawChild(Canvas arg0, View arg1, long arg2) { 91946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 92046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 92146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 92246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 92346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 92446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_onKeyUp(int arg0, KeyEvent arg1) { 92546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 92646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 92746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 92846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 92946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 93046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_dispatchKeyEventPreIme(KeyEvent arg0) { 93146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 93246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 93346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 93446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 93546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 93646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_dispatchKeyEvent(KeyEvent event) { 93746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebViewPrivate.super_dispatchKeyEvent(event); 93846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 93946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 94046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 94146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_onGenericMotionEvent(MotionEvent arg0) { 94246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 94346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 94446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 94546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 94646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 94746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void super_onConfigurationChanged(Configuration arg0) { 94846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 94946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 95046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 95146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 95246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean awakenScrollBars() { 95346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebViewPrivate.awakenScrollBars(0); 95446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // TODO: modify the WebView.PrivateAccess to provide a return value. 95546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return true; 95646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 95746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 95846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 95946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_awakenScrollBars(int arg0, boolean arg1) { 96046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // TODO: need method on WebView.PrivateAccess? 96146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 96246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 96346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 9644702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba 965d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba @Override 9662a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba public void onScrollChanged(int l, int t, int oldl, int oldt) { 9672a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.setScrollXRaw(l); 9682a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.setScrollYRaw(t); 9692a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.onScrollChanged(l, t, oldl, oldt); 9702a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba } 9712a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba 9723951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba @Override 9732a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba public void overScrollBy(int deltaX, int deltaY, 9742a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba int scrollX, int scrollY, 9752a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba int scrollRangeX, int scrollRangeY, 9762a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba int maxOverScrollX, int maxOverScrollY, 9772a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba boolean isTouchEvent) { 9782a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.overScrollBy(deltaX, deltaY, scrollX, scrollY, 9792a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent); 9802a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba } 9812a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba 9823951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba @Override 9832a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba public void super_scrollTo(int scrollX, int scrollY) { 9842a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.super_scrollTo(scrollX, scrollY); 9852a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba } 9862a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba 9872a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba @Override 9884702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba public void setMeasuredDimension(int measuredWidth, int measuredHeight) { 9894702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba mWebViewPrivate.setMeasuredDimension(measuredWidth, measuredHeight); 9904702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba } 99151f7cf16cd02f14050bb723175a2a57570e8486dTao Bai 9927ab33360e331e04f515d532064670e210d174a7aTao Bai @Override 99351f7cf16cd02f14050bb723175a2a57570e8486dTao Bai public boolean requestDrawGL(Canvas canvas) { 9947ab33360e331e04f515d532064670e210d174a7aTao Bai if (mGLfunctor == null) { 9957ab33360e331e04f515d532064670e210d174a7aTao Bai mGLfunctor = new DrawGLFunctor(mAwContents.getAwDrawGLViewContext()); 9967ab33360e331e04f515d532064670e210d174a7aTao Bai } 99751f7cf16cd02f14050bb723175a2a57570e8486dTao Bai return mGLfunctor.requestDrawGL((HardwareCanvas)canvas, mWebView.getViewRootImpl()); 99851f7cf16cd02f14050bb723175a2a57570e8486dTao Bai } 99946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 100046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)} 1001