1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 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; 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import org.chromium.ui.base.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; 438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) private final int[] mLocationInWindow = new int[2]; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates an instance of a ContentView. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param context The Context the view is running in, through which it can 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * access the current theme, resources, etc. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param nativeWebContents A pointer to the native web contents. 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param windowAndroid An instance of the WindowAndroid. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return A ContentView instance. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public static ContentView newInstance(Context context, long nativeWebContents, 54b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) WindowAndroid windowAndroid) { 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return newInstance(context, nativeWebContents, windowAndroid, null, 56b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) android.R.attr.webViewStyle); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates an instance of a ContentView. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param context The Context the view is running in, through which it can 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * access the current theme, resources, etc. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param nativeWebContents A pointer to the native web contents. 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param windowAndroid An instance of the WindowAndroid. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param attrs The attributes of the XML tag that is inflating the view. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return A ContentView instance. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public static ContentView newInstance(Context context, long nativeWebContents, 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WindowAndroid windowAndroid, AttributeSet attrs) { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(klobag): use the WebViewStyle as the default style for now. It enables scrollbar. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When ContentView is moved to framework, we can define its own style in the res. 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return newInstance(context, nativeWebContents, windowAndroid, attrs, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) android.R.attr.webViewStyle); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates an instance of a ContentView. 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param context The Context the view is running in, through which it can 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * access the current theme, resources, etc. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param nativeWebContents A pointer to the native web contents. 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param windowAndroid An instance of the WindowAndroid. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param attrs The attributes of the XML tag that is inflating the view. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param defStyle The default style to apply to this view. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return A ContentView instance. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public static ContentView newInstance(Context context, long nativeWebContents, 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WindowAndroid windowAndroid, AttributeSet attrs, int defStyle) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { 89b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return new ContentView(context, nativeWebContents, windowAndroid, attrs, defStyle); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new JellyBeanContentView(context, nativeWebContents, windowAndroid, attrs, 92b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) defStyle); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) protected ContentView(Context context, long nativeWebContents, WindowAndroid windowAndroid, 97b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) AttributeSet attrs, int defStyle) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super(context, attrs, defStyle); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (getScrollBarStyle() == View.SCROLLBARS_INSIDE_OVERLAY) { 101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch setHorizontalScrollBarEnabled(false); 102ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch setVerticalScrollBarEnabled(false); 103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 104ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) setFocusable(true); 1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) setFocusableInTouchMode(true); 1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 108b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) mContentViewCore = new ContentViewCore(context); 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mContentViewCore.initialize(this, this, nativeWebContents, windowAndroid); 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) /** 1131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) * @return The URL of the page. 1141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) */ 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public String getUrl() { 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mContentViewCore.getUrl(); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // PageInfo implementation. 1201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public String getTitle() { 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mContentViewCore.getTitle(); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public boolean isReadyForSnapshot() { 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return isReady(); 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public Bitmap getBitmap() { 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return getBitmap(getWidth(), getHeight()); 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public Bitmap getBitmap(int width, int height) { 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mContentViewCore.getBitmap(width, height); 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public int getBackgroundColor() { 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mContentViewCore.getBackgroundColor(); 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public View getView() { 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return this; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return The core component of the ContentView that handles JNI communication. Should only be 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * used for passing to native. 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ContentViewCore getContentViewCore() { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @return The cache of scales and positions used to convert coordinates from/to CSS. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public RenderCoordinates getRenderCoordinates() { 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return mContentViewCore.getRenderCoordinates(); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns true if the given Activity has hardware acceleration enabled 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * in its manifest, or in its foreground window. 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * TODO(husky): Remove when ContentViewCore.initialize() is refactored (see TODO there) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * TODO(dtrainor) This is still used by other classes. Make sure to pull some version of this 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * out before removing it. 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static boolean hasHardwareAcceleration(Activity activity) { 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ContentViewCore.hasHardwareAcceleration(activity); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Destroy the internal state of the WebView. This method may only be called 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * after the WebView has been removed from the view system. No other methods 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * may be called on this WebView after this method has been called. 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void destroy() { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.destroy(); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns true initially, false after destroy() has been called. 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * It is illegal to call any other public method after destroy(). 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean isAlive() { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.isAlive(); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * For internal use. Throws IllegalStateException if mNativeContentView is 0. 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use this to ensure we get a useful Java stack trace, rather than a native 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * crash dump, from use-after-destroy bugs in Java code. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void checkIsAlive() throws IllegalStateException { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.checkIsAlive(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void setContentViewClient(ContentViewClient client) { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.setContentViewClient(client); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @VisibleForTesting 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public ContentViewClient getContentViewClient() { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.getContentViewClient(); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Load url without fixing up the url string. Consumers of ContentView are responsible for 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ensuring the URL passed in is properly formatted (i.e. the scheme has been added if left 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * off during user input). 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param params Parameters for this load. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void loadUrl(LoadUrlParams params) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.loadUrl(params); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Stops loading the current web contents. 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void stopLoading() { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.stopLoading(); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return Whether the current WebContents has a previous navigation entry. 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean canGoBack() { 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.canGoBack(); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return Whether the current WebContents has a navigation entry after the current one. 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean canGoForward() { 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.canGoForward(); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param offset The offset into the navigation history. 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return Whether we can move in history by given offset 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean canGoToOffset(int offset) { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.canGoToOffset(offset); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Navigates to the specified offset from the "current entry". Does nothing if the offset is out 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of bounds. 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param offset The offset into the navigation history. 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void goToOffset(int offset) { 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.goToOffset(offset); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Goes to the navigation entry before the current one. 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void goBack() { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.goBack(); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Goes to the navigation entry following the current one. 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void goForward() { 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.goForward(); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Clears the WebView's page history in both the backwards and forwards 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * directions. 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void clearHistory() { 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.clearHistory(); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Start profiling the update speed. You must call {@link #stopFpsProfiling} 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * to stop profiling. 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @VisibleForTesting 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void startFpsProfiling() { 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(nileshagrawal): Implement this. 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Stop profiling the update speed. 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @VisibleForTesting 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public float stopFpsProfiling() { 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(nileshagrawal): Implement this. 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0.0f; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Fling the ContentView from the current position. 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param x Fling touch starting position 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param y Fling touch starting position 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param velocityX Initial velocity of the fling (X) measured in pixels per second. 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param velocityY Initial velocity of the fling (Y) measured in pixels per second. 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @VisibleForTesting 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void fling(long timeMs, int x, int y, int velocityX, int velocityY) { 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.getContentViewGestureHandler().fling(timeMs, x, y, velocityX, velocityY); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Start pinch zoom. You must call {@link #pinchEnd} to stop. 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @VisibleForTesting 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void pinchBegin(long timeMs, int x, int y) { 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.getContentViewGestureHandler().pinchBegin(timeMs, x, y); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Stop pinch zoom. 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @VisibleForTesting 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void pinchEnd(long timeMs) { 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.getContentViewGestureHandler().pinchEnd(timeMs); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void setIgnoreSingleTap(boolean value) { 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.getContentViewGestureHandler().setIgnoreSingleTap(value); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** @see ContentViewGestureHandler#setIgnoreRemainingTouchEvents */ 3353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public void setIgnoreRemainingTouchEvents() { 3363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mContentViewCore.getContentViewGestureHandler().setIgnoreRemainingTouchEvents(); 3373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Modify the ContentView magnification level. The effect of calling this 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * method is exactly as after "pinch zoom". 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param timeMs The event time in milliseconds. 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param delta The ratio of the new magnification level over the current 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * magnification level. 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param anchorX The magnification anchor (X) in the current view 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * coordinate. 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param anchorY The magnification anchor (Y) in the current view 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * coordinate. 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @VisibleForTesting 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void pinchBy(long timeMs, int anchorX, int anchorY, float delta) { 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.getContentViewGestureHandler().pinchBy(timeMs, anchorX, anchorY, delta); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Injects the passed JavaScript code in the current page and evaluates it. 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws IllegalStateException If the ContentView has been destroyed. 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void evaluateJavaScript(String script) throws IllegalStateException { 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mContentViewCore.evaluateJavaScript(script, null); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * To be called when the ContentView is shown. 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) **/ 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void onShow() { 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onShow(); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * To be called when the ContentView is hidden. 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) **/ 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void onHide() { 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onHide(); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 380b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) * Return the ContentSettings object used to retrieve the settings for this 381b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) * ContentView. 382b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) * @return A ContentSettings object that can be used to retrieve this ContentView's 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * settings. 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ContentSettings getContentSettings() { 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.getContentSettings(); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Hides the select action bar. 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void hideSelectActionBar() { 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.hideSelectActionBar(); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FrameLayout overrides. 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Needed by ContentViewCore.InternalAccessDelegate 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean drawChild(Canvas canvas, View child, long drawingTime) { 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return super.drawChild(canvas, child, drawingTime); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Needed by ContentViewCore.InternalAccessDelegate 4051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) @Override 4061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public void onScrollChanged(int l, int t, int oldl, int oldt) { 4071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) super.onScrollChanged(l, t, oldl, oldt); 4081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void onSizeChanged(int w, int h, int ow, int oh) { 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TraceEvent.begin(); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onSizeChanged(w, h, ow, oh); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onSizeChanged(w, h, ow, oh); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TraceEvent.end(); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 4208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) super.onLayout(changed, left, top, right, bottom); 4218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (changed) { 4228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) getLocationInWindow(mLocationInWindow); 4238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) mContentViewCore.onLocationInWindowChanged(mLocationInWindow[0], mLocationInWindow[1]); 4248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) @Override 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.onCreateInputConnection(outAttrs); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean onCheckIsTextEditor() { 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.onCheckIsTextEditor(); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) { 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TraceEvent.begin(); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); 44190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) mContentViewCore.onFocusChanged(gainFocus); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TraceEvent.end(); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 446d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) public void onWindowFocusChanged(boolean hasWindowFocus) { 447d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) super.onWindowFocusChanged(hasWindowFocus); 448d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) mContentViewCore.onWindowFocusChanged(hasWindowFocus); 449d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 450d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 451d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) @Override 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean onKeyUp(int keyCode, KeyEvent event) { 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.onKeyUp(keyCode, event); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean dispatchKeyEventPreIme(KeyEvent event) { 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.dispatchKeyEventPreIme(event); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean dispatchKeyEvent(KeyEvent event) { 463c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (isFocused()) { 464c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mContentViewCore.dispatchKeyEvent(event); 465c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 466c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return super.dispatchKeyEvent(event); 467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean onTouchEvent(MotionEvent event) { 472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MotionEvent offset = createOffsetMotionEvent(event); 473c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) boolean consumed = mContentViewCore.onTouchEvent(offset); 474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) offset.recycle(); 475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return consumed; 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Mouse move events are sent on hover enter, hover move and hover exit. 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * They are sent on hover exit because sometimes it acts as both a hover 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * move and hover exit. 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean onHoverEvent(MotionEvent event) { 4857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MotionEvent offset = createOffsetMotionEvent(event); 4867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) boolean consumed = mContentViewCore.onHoverEvent(offset); 4877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) offset.recycle(); 4881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) super.onHoverEvent(event); 4897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return consumed; 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean onGenericMotionEvent(MotionEvent event) { 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.onGenericMotionEvent(event); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch @Override 4987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public boolean performLongClick() { 4997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return false; 5007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 5017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 503c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Sets the current amount to offset incoming touch events by. This is used to handle content 504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * moving and not lining up properly with the android input system. 505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param dx The X offset in pixels to shift touch events. 506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param dy The Y offset in pixels to shift touch events. 507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void setCurrentMotionEventOffsets(float dx, float dy) { 509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mCurrentTouchOffsetX = dx; 510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mCurrentTouchOffsetY = dy; 511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private MotionEvent createOffsetMotionEvent(MotionEvent src) { 514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MotionEvent dst = MotionEvent.obtain(src); 515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dst.offsetLocation(mCurrentTouchOffsetX, mCurrentTouchOffsetY); 516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return dst; 517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 518c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void onConfigurationChanged(Configuration newConfig) { 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onConfigurationChanged(newConfig); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Currently the ContentView scrolling happens in the native side. In 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the Java view system, it is always pinned at (0, 0). scrollBy() and scrollTo() 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * are overridden, so that View's mScrollX and mScrollY will be unchanged at 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * (0, 0). This is critical for drawing ContentView correctly. 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void scrollBy(int x, int y) { 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.scrollBy(x, y); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void scrollTo(int x, int y) { 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.scrollTo(x, y); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected int computeHorizontalScrollExtent() { 542f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // TODO(dtrainor): Need to expose scroll events properly to public. Either make getScroll* 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // work or expose computeHorizontalScrollOffset()/computeVerticalScrollOffset as public. 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.computeHorizontalScrollExtent(); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected int computeHorizontalScrollOffset() { 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.computeHorizontalScrollOffset(); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected int computeHorizontalScrollRange() { 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.computeHorizontalScrollRange(); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected int computeVerticalScrollExtent() { 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.computeVerticalScrollExtent(); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected int computeVerticalScrollOffset() { 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.computeVerticalScrollOffset(); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected int computeVerticalScrollRange() { 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.computeVerticalScrollRange(); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // End FrameLayout overrides. 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean awakenScrollBars(int startDelay, boolean invalidate) { 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.awakenScrollBars(startDelay, invalidate); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean awakenScrollBars() { 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return super.awakenScrollBars(); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public int getSingleTapX() { 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.getContentViewGestureHandler().getSingleTapX(); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public int getSingleTapY() { 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.getContentViewGestureHandler().getSingleTapY(); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onInitializeAccessibilityNodeInfo(info); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onInitializeAccessibilityNodeInfo(info); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Fills in scrolling values for AccessibilityEvents. 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param event Event being fired. 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void onInitializeAccessibilityEvent(AccessibilityEvent event) { 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onInitializeAccessibilityEvent(event); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onInitializeAccessibilityEvent(event); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void onAttachedToWindow() { 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onAttachedToWindow(); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onAttachedToWindow(); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void onDetachedFromWindow() { 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onDetachedFromWindow(); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onDetachedFromWindow(); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected void onVisibilityChanged(View changedView, int visibility) { 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onVisibilityChanged(changedView, visibility); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.onVisibilityChanged(changedView, visibility); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Register the delegate to be used when content can not be handled by 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the rendering engine, and should be downloaded instead. This will replace 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the current delegate. 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param delegate An implementation of ContentViewDownloadDelegate. 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void setDownloadDelegate(ContentViewDownloadDelegate delegate) { 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.setDownloadDelegate(delegate); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by DownloadController. 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentViewDownloadDelegate getDownloadDelegate() { 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.getDownloadDelegate(); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean getUseDesktopUserAgent() { 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.getUseDesktopUserAgent(); 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Set whether or not we're using a desktop user agent for the currently loaded page. 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param override If true, use a desktop user agent. Use a mobile one otherwise. 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param reloadOnChange Reload the page if the UA has changed. 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void setUseDesktopUserAgent(boolean override, boolean reloadOnChange) { 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.setUseDesktopUserAgent(override, reloadOnChange); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Zooms in the WebView by 25% (or less if that would result in zooming in 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * more than possible). 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return True if there was a zoom change, false otherwise. 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This method uses the term 'zoom' for legacy reasons, but relates 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to what chrome calls the 'page scale factor'. 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean zoomIn() { 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.zoomIn(); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Zooms out the WebView by 20% (or less if that would result in zooming out 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * more than possible). 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return True if there was a zoom change, false otherwise. 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This method uses the term 'zoom' for legacy reasons, but relates 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to what chrome calls the 'page scale factor'. 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean zoomOut() { 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.zoomOut(); 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Resets the zoom factor of the WebView. 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return True if there was a zoom change, false otherwise. 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This method uses the term 'zoom' for legacy reasons, but relates 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to what chrome calls the 'page scale factor'. 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean zoomReset() { 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.zoomReset(); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Return the current scale of the WebView 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return The current scale. 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public float getScale() { 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.getScale(); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If the view is ready to draw contents to the screen. In hardware mode, 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the initialization of the surface texture may not occur until after the 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * view has been added to the layout. This method will return {@code true} 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * once the texture is actually ready. 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean isReady() { 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.isReady(); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns whether or not accessibility injection is being used. 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean isInjectingAccessibilityScript() { 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mContentViewCore.isInjectingAccessibilityScript(); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Enable or disable accessibility features. 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void setAccessibilityState(boolean state) { 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.setAccessibilityState(state); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Stop any TTS notifications that are currently going on. 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void stopCurrentAccessibilityNotifications() { 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContentViewCore.stopCurrentAccessibilityNotifications(); 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Inform WebKit that Fullscreen mode has been exited by the user. 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void exitFullscreen() { 7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mContentViewCore.exitFullscreen(); 7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 735c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 736c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Return content scroll y. 737c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 738c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return The vertical scroll position in pixels. 739c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 740c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public int getContentScrollY() { 741c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mContentViewCore.computeVerticalScrollOffset(); 742c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 743c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 744c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 745c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Return content height. 746c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 747c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return The height of the content in pixels. 748c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 749c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public int getContentHeight() { 750c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return mContentViewCore.computeVerticalScrollRange(); 751c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 752c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /////////////////////////////////////////////////////////////////////////////////////////////// 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start Implementation of ContentViewCore.InternalAccessDelegate // 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /////////////////////////////////////////////////////////////////////////////////////////////// 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean super_onKeyUp(int keyCode, KeyEvent event) { 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return super.onKeyUp(keyCode, event); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean super_dispatchKeyEventPreIme(KeyEvent event) { 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return super.dispatchKeyEventPreIme(event); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean super_dispatchKeyEvent(KeyEvent event) { 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return super.dispatchKeyEvent(event); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean super_onGenericMotionEvent(MotionEvent event) { 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return super.onGenericMotionEvent(event); 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void super_onConfigurationChanged(Configuration newConfig) { 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onConfigurationChanged(newConfig); 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean super_awakenScrollBars(int startDelay, boolean invalidate) { 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return super.awakenScrollBars(startDelay, invalidate); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /////////////////////////////////////////////////////////////////////////////////////////////// 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // End Implementation of ContentViewCore.InternalAccessDelegate // 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /////////////////////////////////////////////////////////////////////////////////////////////// 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 791