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