ContentView.java revision ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.chromium.content.browser; 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.app.Activity; 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.Context; 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.res.Configuration; 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.graphics.Bitmap; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.graphics.Canvas; 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.graphics.Rect; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.os.Build; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.util.AttributeSet; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.view.KeyEvent; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.view.MotionEvent; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.view.View; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.view.accessibility.AccessibilityEvent; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.view.accessibility.AccessibilityNodeInfo; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.view.inputmethod.EditorInfo; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.view.inputmethod.InputConnection; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.widget.FrameLayout; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import com.google.common.annotations.VisibleForTesting; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.common.TraceEvent; 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import org.chromium.ui.WindowAndroid; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The containing view for {@link ContentViewCore} that exists in the Android UI hierarchy and 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * exposes the various {@link View} functionality to it. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * TODO(joth): Remove any methods overrides from this class that were added for WebView 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * compatibility. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)public class ContentView extends FrameLayout 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) implements ContentViewCore.InternalAccessDelegate, PageInfo { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private final ContentViewCore mContentViewCore; 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private float mCurrentTouchOffsetX; 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private float mCurrentTouchOffsetY; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates an instance of a ContentView. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param context The Context the view is running in, through which it can 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * access the current theme, resources, etc. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param nativeWebContents A pointer to the native web contents. 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param windowAndroid An instance of the WindowAndroid. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return A ContentView instance. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static ContentView newInstance(Context context, int nativeWebContents, 53b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) WindowAndroid windowAndroid) { 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return newInstance(context, nativeWebContents, windowAndroid, null, 55b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) android.R.attr.webViewStyle); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates an instance of a ContentView. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param context The Context the view is running in, through which it can 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * access the current theme, resources, etc. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param nativeWebContents A pointer to the native web contents. 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param windowAndroid An instance of the WindowAndroid. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param attrs The attributes of the XML tag that is inflating the view. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return A ContentView instance. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static ContentView newInstance(Context context, int nativeWebContents, 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WindowAndroid windowAndroid, AttributeSet attrs) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(klobag): use the WebViewStyle as the default style for now. It enables scrollbar. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When ContentView is moved to framework, we can define its own style in the res. 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return newInstance(context, nativeWebContents, windowAndroid, attrs, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) android.R.attr.webViewStyle); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates an instance of a ContentView. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param context The Context the view is running in, through which it can 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * access the current theme, resources, etc. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param nativeWebContents A pointer to the native web contents. 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param windowAndroid An instance of the WindowAndroid. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param attrs The attributes of the XML tag that is inflating the view. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param defStyle The default style to apply to this view. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return A ContentView instance. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static ContentView newInstance(Context context, int nativeWebContents, 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WindowAndroid windowAndroid, AttributeSet attrs, int defStyle) { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { 88b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return new ContentView(context, nativeWebContents, windowAndroid, attrs, defStyle); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new JellyBeanContentView(context, nativeWebContents, windowAndroid, attrs, 91b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) defStyle); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected ContentView(Context context, int nativeWebContents, WindowAndroid windowAndroid, 96b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) AttributeSet attrs, int defStyle) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super(context, attrs, defStyle); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 99ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (getScrollBarStyle() == View.SCROLLBARS_INSIDE_OVERLAY) { 100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch setHorizontalScrollBarEnabled(false); 101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch setVerticalScrollBarEnabled(false); 102ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 104b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) mContentViewCore = new ContentViewCore(context); 105b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) mContentViewCore.initialize(this, this, nativeWebContents, windowAndroid, 106b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN ? 107b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ContentViewCore.INPUT_EVENTS_DELIVERED_AT_VSYNC : 108b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ContentViewCore.INPUT_EVENTS_DELIVERED_IMMEDIATELY); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // PageInfo implementation. 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public String getUrl() { 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mContentViewCore.getUrl(); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public String getTitle() { 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mContentViewCore.getTitle(); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public boolean isReadyForSnapshot() { 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return !isCrashed() && isReady(); 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public Bitmap getBitmap() { 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return getBitmap(getWidth(), getHeight()); 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public Bitmap getBitmap(int width, int height) { 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mContentViewCore.getBitmap(width, height); 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public int getBackgroundColor() { 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mContentViewCore.getBackgroundColor(); 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public View getView() { 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return this; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return The core component of the ContentView that handles JNI communication. Should only be 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * used for passing to native. 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ContentViewCore getContentViewCore() { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @return The cache of scales and positions used to convert coordinates from/to CSS. 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public RenderCoordinates getRenderCoordinates() { 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return mContentViewCore.getRenderCoordinates(); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns true if the given Activity has hardware acceleration enabled 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * in its manifest, or in its foreground window. 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * TODO(husky): Remove when ContentViewCore.initialize() is refactored (see TODO there) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * TODO(dtrainor) This is still used by other classes. Make sure to pull some version of this 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * out before removing it. 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static boolean hasHardwareAcceleration(Activity activity) { 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ContentViewCore.hasHardwareAcceleration(activity); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Destroy the internal state of the WebView. This method may only be called 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * after the WebView has been removed from the view system. No other methods 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * may be called on this WebView after this method has been called. 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void destroy() { 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.destroy(); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns true initially, false after destroy() has been called. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * It is illegal to call any other public method after destroy(). 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean isAlive() { 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.isAlive(); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * For internal use. Throws IllegalStateException if mNativeContentView is 0. 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use this to ensure we get a useful Java stack trace, rather than a native 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * crash dump, from use-after-destroy bugs in Java code. 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void checkIsAlive() throws IllegalStateException { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.checkIsAlive(); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void setContentViewClient(ContentViewClient client) { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.setContentViewClient(client); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @VisibleForTesting 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public ContentViewClient getContentViewClient() { 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.getContentViewClient(); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Load url without fixing up the url string. Consumers of ContentView are responsible for 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ensuring the URL passed in is properly formatted (i.e. the scheme has been added if left 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * off during user input). 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param params Parameters for this load. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void loadUrl(LoadUrlParams params) { 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.loadUrl(params); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Stops loading the current web contents. 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void stopLoading() { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.stopLoading(); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return Whether the current WebContents has a previous navigation entry. 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean canGoBack() { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.canGoBack(); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return Whether the current WebContents has a navigation entry after the current one. 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean canGoForward() { 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.canGoForward(); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param offset The offset into the navigation history. 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return Whether we can move in history by given offset 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean canGoToOffset(int offset) { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.canGoToOffset(offset); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Navigates to the specified offset from the "current entry". Does nothing if the offset is out 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of bounds. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param offset The offset into the navigation history. 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void goToOffset(int offset) { 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.goToOffset(offset); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Goes to the navigation entry before the current one. 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void goBack() { 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.goBack(); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Goes to the navigation entry following the current one. 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void goForward() { 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.goForward(); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Reload the current page. 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void reload() { 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.reload(); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Clears the WebView's page history in both the backwards and forwards 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * directions. 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void clearHistory() { 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.clearHistory(); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String getSelectedText() { 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.getSelectedText(); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Start profiling the update speed. You must call {@link #stopFpsProfiling} 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * to stop profiling. 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @VisibleForTesting 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void startFpsProfiling() { 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(nileshagrawal): Implement this. 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Stop profiling the update speed. 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @VisibleForTesting 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public float stopFpsProfiling() { 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(nileshagrawal): Implement this. 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0.0f; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Fling the ContentView from the current position. 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param x Fling touch starting position 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param y Fling touch starting position 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param velocityX Initial velocity of the fling (X) measured in pixels per second. 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param velocityY Initial velocity of the fling (Y) measured in pixels per second. 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @VisibleForTesting 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void fling(long timeMs, int x, int y, int velocityX, int velocityY) { 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.getContentViewGestureHandler().fling(timeMs, x, y, velocityX, velocityY); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Start pinch zoom. You must call {@link #pinchEnd} to stop. 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @VisibleForTesting 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void pinchBegin(long timeMs, int x, int y) { 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.getContentViewGestureHandler().pinchBegin(timeMs, x, y); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Stop pinch zoom. 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @VisibleForTesting 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void pinchEnd(long timeMs) { 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.getContentViewGestureHandler().pinchEnd(timeMs); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void setIgnoreSingleTap(boolean value) { 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.getContentViewGestureHandler().setIgnoreSingleTap(value); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Modify the ContentView magnification level. The effect of calling this 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * method is exactly as after "pinch zoom". 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param timeMs The event time in milliseconds. 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param delta The ratio of the new magnification level over the current 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * magnification level. 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param anchorX The magnification anchor (X) in the current view 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * coordinate. 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param anchorY The magnification anchor (Y) in the current view 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * coordinate. 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @VisibleForTesting 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void pinchBy(long timeMs, int anchorX, int anchorY, float delta) { 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.getContentViewGestureHandler().pinchBy(timeMs, anchorX, anchorY, delta); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Injects the passed JavaScript code in the current page and evaluates it. 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws IllegalStateException If the ContentView has been destroyed. 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void evaluateJavaScript(String script) throws IllegalStateException { 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mContentViewCore.evaluateJavaScript(script, null); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This method should be called when the containing activity is paused. 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) **/ 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void onActivityPause() { 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onActivityPause(); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This method should be called when the containing activity is resumed. 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) **/ 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void onActivityResume() { 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onActivityResume(); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * To be called when the ContentView is shown. 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) **/ 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void onShow() { 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onShow(); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * To be called when the ContentView is hidden. 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) **/ 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void onHide() { 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onHide(); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 397b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) * Return the ContentSettings object used to retrieve the settings for this 398b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) * ContentView. 399b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) * @return A ContentSettings object that can be used to retrieve this ContentView's 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * settings. 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ContentSettings getContentSettings() { 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.getContentSettings(); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Hides the select action bar. 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void hideSelectActionBar() { 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.hideSelectActionBar(); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FrameLayout overrides. 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Needed by ContentViewCore.InternalAccessDelegate 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean drawChild(Canvas canvas, View child, long drawingTime) { 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return super.drawChild(canvas, child, drawingTime); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void onSizeChanged(int w, int h, int ow, int oh) { 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TraceEvent.begin(); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onSizeChanged(w, h, ow, oh); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onSizeChanged(w, h, ow, oh); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TraceEvent.end(); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.onCreateInputConnection(outAttrs); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean onCheckIsTextEditor() { 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.onCheckIsTextEditor(); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) { 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TraceEvent.begin(); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); 44390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) mContentViewCore.onFocusChanged(gainFocus); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TraceEvent.end(); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean onKeyUp(int keyCode, KeyEvent event) { 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.onKeyUp(keyCode, event); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean dispatchKeyEventPreIme(KeyEvent event) { 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.dispatchKeyEventPreIme(event); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean dispatchKeyEvent(KeyEvent event) { 459c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (isFocused()) { 460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mContentViewCore.dispatchKeyEvent(event); 461c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 462c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return super.dispatchKeyEvent(event); 463c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean onTouchEvent(MotionEvent event) { 468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MotionEvent offset = createOffsetMotionEvent(event); 469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) boolean consumed = mContentViewCore.onTouchEvent(offset); 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) offset.recycle(); 471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return consumed; 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Mouse move events are sent on hover enter, hover move and hover exit. 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * They are sent on hover exit because sometimes it acts as both a hover 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * move and hover exit. 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean onHoverEvent(MotionEvent event) { 4817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MotionEvent offset = createOffsetMotionEvent(event); 4827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) boolean consumed = mContentViewCore.onHoverEvent(offset); 4837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) offset.recycle(); 4847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return consumed; 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean onGenericMotionEvent(MotionEvent event) { 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.onGenericMotionEvent(event); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch @Override 4937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public boolean performLongClick() { 4947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return false; 4957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 4967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 497c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Sets the current amount to offset incoming touch events by. This is used to handle content 499c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * moving and not lining up properly with the android input system. 500c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param dx The X offset in pixels to shift touch events. 501c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param dy The Y offset in pixels to shift touch events. 502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 503c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void setCurrentMotionEventOffsets(float dx, float dy) { 504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mCurrentTouchOffsetX = dx; 505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mCurrentTouchOffsetY = dy; 506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private MotionEvent createOffsetMotionEvent(MotionEvent src) { 509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MotionEvent dst = MotionEvent.obtain(src); 510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dst.offsetLocation(mCurrentTouchOffsetX, mCurrentTouchOffsetY); 511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return dst; 512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void onConfigurationChanged(Configuration newConfig) { 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onConfigurationChanged(newConfig); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Currently the ContentView scrolling happens in the native side. In 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the Java view system, it is always pinned at (0, 0). scrollBy() and scrollTo() 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * are overridden, so that View's mScrollX and mScrollY will be unchanged at 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * (0, 0). This is critical for drawing ContentView correctly. 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void scrollBy(int x, int y) { 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.scrollBy(x, y); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void scrollTo(int x, int y) { 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.scrollTo(x, y); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected int computeHorizontalScrollExtent() { 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO (dtrainor): Need to expose scroll events properly to public. Either make getScroll* 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // work or expose computeHorizontalScrollOffset()/computeVerticalScrollOffset as public. 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.computeHorizontalScrollExtent(); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected int computeHorizontalScrollOffset() { 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.computeHorizontalScrollOffset(); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected int computeHorizontalScrollRange() { 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.computeHorizontalScrollRange(); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected int computeVerticalScrollExtent() { 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.computeVerticalScrollExtent(); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected int computeVerticalScrollOffset() { 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.computeVerticalScrollOffset(); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected int computeVerticalScrollRange() { 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.computeVerticalScrollRange(); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // End FrameLayout overrides. 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean awakenScrollBars(int startDelay, boolean invalidate) { 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.awakenScrollBars(startDelay, invalidate); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean awakenScrollBars() { 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return super.awakenScrollBars(); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public int getSingleTapX() { 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.getContentViewGestureHandler().getSingleTapX(); 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public int getSingleTapY() { 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.getContentViewGestureHandler().getSingleTapY(); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onInitializeAccessibilityNodeInfo(info); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onInitializeAccessibilityNodeInfo(info); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Fills in scrolling values for AccessibilityEvents. 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param event Event being fired. 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void onInitializeAccessibilityEvent(AccessibilityEvent event) { 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onInitializeAccessibilityEvent(event); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onInitializeAccessibilityEvent(event); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void onAttachedToWindow() { 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onAttachedToWindow(); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onAttachedToWindow(); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void onDetachedFromWindow() { 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onDetachedFromWindow(); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onDetachedFromWindow(); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void onVisibilityChanged(View changedView, int visibility) { 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onVisibilityChanged(changedView, visibility); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onVisibilityChanged(changedView, visibility); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Register the delegate to be used when content can not be handled by 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the rendering engine, and should be downloaded instead. This will replace 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the current delegate. 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param delegate An implementation of ContentViewDownloadDelegate. 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void setDownloadDelegate(ContentViewDownloadDelegate delegate) { 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.setDownloadDelegate(delegate); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by DownloadController. 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentViewDownloadDelegate getDownloadDelegate() { 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.getDownloadDelegate(); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean getUseDesktopUserAgent() { 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.getUseDesktopUserAgent(); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Set whether or not we're using a desktop user agent for the currently loaded page. 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param override If true, use a desktop user agent. Use a mobile one otherwise. 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param reloadOnChange Reload the page if the UA has changed. 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void setUseDesktopUserAgent(boolean override, boolean reloadOnChange) { 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.setUseDesktopUserAgent(override, reloadOnChange); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return Whether the native ContentView has crashed. 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean isCrashed() { 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.isCrashed(); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return Whether a reload happens when this ContentView is activated. 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean needsReload() { 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.needsReload(); 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Checks whether the WebView can be zoomed in. 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return True if the WebView can be zoomed in. 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This method uses the term 'zoom' for legacy reasons, but relates 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to what chrome calls the 'page scale factor'. 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean canZoomIn() { 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.canZoomIn(); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Checks whether the WebView can be zoomed out. 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return True if the WebView can be zoomed out. 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This method uses the term 'zoom' for legacy reasons, but relates 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to what chrome calls the 'page scale factor'. 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean canZoomOut() { 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.canZoomOut(); 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Zooms in the WebView by 25% (or less if that would result in zooming in 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * more than possible). 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return True if there was a zoom change, false otherwise. 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This method uses the term 'zoom' for legacy reasons, but relates 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to what chrome calls the 'page scale factor'. 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean zoomIn() { 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.zoomIn(); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Zooms out the WebView by 20% (or less if that would result in zooming out 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * more than possible). 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return True if there was a zoom change, false otherwise. 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This method uses the term 'zoom' for legacy reasons, but relates 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to what chrome calls the 'page scale factor'. 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean zoomOut() { 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.zoomOut(); 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Resets the zoom factor of the WebView. 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return True if there was a zoom change, false otherwise. 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This method uses the term 'zoom' for legacy reasons, but relates 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to what chrome calls the 'page scale factor'. 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean zoomReset() { 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.zoomReset(); 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Return the current scale of the WebView 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return The current scale. 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public float getScale() { 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.getScale(); 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If the view is ready to draw contents to the screen. In hardware mode, 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the initialization of the surface texture may not occur until after the 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * view has been added to the layout. This method will return {@code true} 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * once the texture is actually ready. 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean isReady() { 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.isReady(); 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns whether or not accessibility injection is being used. 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean isInjectingAccessibilityScript() { 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.isInjectingAccessibilityScript(); 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Enable or disable accessibility features. 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void setAccessibilityState(boolean state) { 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.setAccessibilityState(state); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Stop any TTS notifications that are currently going on. 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void stopCurrentAccessibilityNotifications() { 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.stopCurrentAccessibilityNotifications(); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Inform WebKit that Fullscreen mode has been exited by the user. 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void exitFullscreen() { 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mContentViewCore.exitFullscreen(); 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 766c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 767c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Return content scroll y. 768c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 769c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return The vertical scroll position in pixels. 770c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 771c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public int getContentScrollY() { 772c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mContentViewCore.computeVerticalScrollOffset(); 773c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 774c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 775c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 776c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Return content height. 777c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 778c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return The height of the content in pixels. 779c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 780c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public int getContentHeight() { 781c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mContentViewCore.computeVerticalScrollRange(); 782c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 783c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /////////////////////////////////////////////////////////////////////////////////////////////// 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start Implementation of ContentViewCore.InternalAccessDelegate // 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /////////////////////////////////////////////////////////////////////////////////////////////// 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean super_onKeyUp(int keyCode, KeyEvent event) { 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return super.onKeyUp(keyCode, event); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean super_dispatchKeyEventPreIme(KeyEvent event) { 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return super.dispatchKeyEventPreIme(event); 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean super_dispatchKeyEvent(KeyEvent event) { 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return super.dispatchKeyEvent(event); 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean super_onGenericMotionEvent(MotionEvent event) { 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return super.onGenericMotionEvent(event); 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void super_onConfigurationChanged(Configuration newConfig) { 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onConfigurationChanged(newConfig); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean super_awakenScrollBars(int startDelay, boolean invalidate) { 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return super.awakenScrollBars(startDelay, invalidate); 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /////////////////////////////////////////////////////////////////////////////////////////////// 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // End Implementation of ContentViewCore.InternalAccessDelegate // 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /////////////////////////////////////////////////////////////////////////////////////////////// 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 822