WebSettings.java revision 105925376f8d0f6b318c9938c7b83ef7fef094da
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.webkit;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Build;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Message;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.provider.Checkin;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.lang.SecurityException;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.PackageManager;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Locale;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Manages settings state for a WebView. When a WebView is first created, it
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * obtains a set of default settings. These default settings will be returned
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from any getter call. A WebSettings object obtained from
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WebView.getSettings() is tied to the life of the WebView. If a WebView has
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * been destroyed, any method call on WebSettings will throw an
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * IllegalStateException.
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class WebSettings {
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Enum for controlling the layout of html.
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * NORMAL means no rendering changes.
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SINGLE_COLUMN moves all content into one column that is the width of the
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * view.
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * NARROW_COLUMNS makes all columns no wider than the screen if possible.
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // XXX: These must match LayoutAlgorithm in Settings.h in WebCore.
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public enum LayoutAlgorithm {
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        NORMAL,
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SINGLE_COLUMN,
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        NARROW_COLUMNS
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Enum for specifying the text size.
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SMALLEST is 50%
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SMALLER is 75%
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * NORMAL is 100%
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * LARGER is 150%
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * LARGEST is 200%
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public enum TextSize {
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SMALLEST(50),
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SMALLER(75),
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        NORMAL(100),
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        LARGER(150),
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        LARGEST(200);
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        TextSize(int size) {
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            value = size;
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int value;
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Default cache usage pattern  Use with {@link #setCacheMode}.
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int LOAD_DEFAULT = -1;
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Normal cache usage pattern  Use with {@link #setCacheMode}.
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int LOAD_NORMAL = 0;
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use cache if content is there, even if expired (eg, history nav)
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If it is not in the cache, load from network.
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #setCacheMode}.
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int LOAD_CACHE_ELSE_NETWORK = 1;
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Don't use the cache, load from network
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #setCacheMode}.
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int LOAD_NO_CACHE = 2;
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Don't use the network, load from cache only.
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #setCacheMode}.
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int LOAD_CACHE_ONLY = 3;
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public enum RenderPriority {
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        NORMAL,
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        HIGH,
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        LOW
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // BrowserFrame used to access the native frame pointer.
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private BrowserFrame mBrowserFrame;
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // Flag to prevent multiple SYNC messages at one time.
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean mSyncPending = false;
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // Custom handler that queues messages until the WebCore thread is active.
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private final EventHandler mEventHandler;
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // Private settings so we don't have to go into native code to
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // retrieve the values. After setXXX, postSync() needs to be called.
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // XXX: The default values need to match those in WebSettings.cpp
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private LayoutAlgorithm mLayoutAlgorithm = LayoutAlgorithm.NARROW_COLUMNS;
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Context         mContext;
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private TextSize        mTextSize = TextSize.NORMAL;
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String          mStandardFontFamily = "sans-serif";
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String          mFixedFontFamily = "monospace";
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String          mSansSerifFontFamily = "sans-serif";
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String          mSerifFontFamily = "serif";
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String          mCursiveFontFamily = "cursive";
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String          mFantasyFontFamily = "fantasy";
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String          mDefaultTextEncoding = "Latin-1";
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String          mUserAgent;
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mUseDefaultUserAgent;
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String          mAcceptLanguage;
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String          mPluginsPath = "";
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int             mMinimumFontSize = 8;
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int             mMinimumLogicalFontSize = 8;
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int             mDefaultFontSize = 16;
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int             mDefaultFixedFontSize = 13;
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mLoadsImagesAutomatically = true;
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mBlockNetworkImage = false;
137c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    private boolean         mBlockNetworkLoads;
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mJavaScriptEnabled = false;
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mPluginsEnabled = false;
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mJavaScriptCanOpenWindowsAutomatically = false;
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mUseDoubleTree = false;
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mUseWideViewport = false;
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mSupportMultipleWindows = false;
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mShrinksStandaloneImagesToFit = false;
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // Don't need to synchronize the get/set methods as they
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // are basic types, also none of these values are used in
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // native WebCore code.
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private RenderPriority  mRenderPriority = RenderPriority.NORMAL;
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int             mOverrideCacheMode = LOAD_DEFAULT;
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mSaveFormData = true;
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mSavePassword = true;
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mLightTouchEnabled = false;
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mNeedInitialFocus = true;
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mNavDump = false;
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mSupportZoom = true;
156105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    private boolean         mBuiltInZoomControls = false;
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean         mAllowFileAccess = true;
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // Class to handle messages before WebCore is ready.
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private class EventHandler {
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Message id for syncing
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        static final int SYNC = 0;
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Message id for setting priority
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        static final int PRIORITY = 1;
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Actual WebCore thread handler
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private Handler mHandler;
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private synchronized void createHandler() {
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // as mRenderPriority can be set before thread is running, sync up
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            setRenderPriority();
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // create a new handler
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mHandler = new Handler() {
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                @Override
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                public void handleMessage(Message msg) {
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    switch (msg.what) {
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        case SYNC:
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            synchronized (WebSettings.this) {
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                if (mBrowserFrame.mNativeFrame != 0) {
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                    nativeSync(mBrowserFrame.mNativeFrame);
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                }
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                mSyncPending = false;
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            }
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            break;
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        case PRIORITY: {
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            setRenderPriority();
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            break;
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            };
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private void setRenderPriority() {
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            synchronized (WebSettings.this) {
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (mRenderPriority == RenderPriority.NORMAL) {
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    android.os.Process.setThreadPriority(
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_DEFAULT);
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } else if (mRenderPriority == RenderPriority.HIGH) {
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    android.os.Process.setThreadPriority(
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_FOREGROUND +
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_LESS_FAVORABLE);
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } else if (mRenderPriority == RenderPriority.LOW) {
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    android.os.Process.setThreadPriority(
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_BACKGROUND);
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Send a message to the private queue or handler.
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private synchronized boolean sendMessage(Message msg) {
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mHandler != null) {
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mHandler.sendMessage(msg);
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return true;
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return false;
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // User agent strings.
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final String DESKTOP_USERAGENT =
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en)"
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            + " AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2"
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            + " Safari/525.20.1";
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final String IPHONE_USERAGENT =
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "Mozilla/5.0 (iPhone; U; CPU iPhone 2_1 like Mac OS X; en)"
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            + " AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2"
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            + " Mobile/5F136 Safari/525.20.1";
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static Locale sLocale;
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static Object sLockForLocaleSettings;
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Package constructor to prevent clients from creating a new settings
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instance.
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    WebSettings(Context context) {
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mEventHandler = new EventHandler();
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mContext = context;
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (sLockForLocaleSettings == null) {
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sLockForLocaleSettings = new Object();
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sLocale = Locale.getDefault();
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mAcceptLanguage = getCurrentAcceptLanguage();
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mUserAgent = getCurrentUserAgent();
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mUseDefaultUserAgent = true;
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
252c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project        mBlockNetworkLoads = mContext.checkPermission(
253c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project                "android.permission.INTERNET", android.os.Process.myPid(),
254c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project                android.os.Process.myUid()) != PackageManager.PERMISSION_GRANTED;
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Looks at sLocale and returns current AcceptLanguage String.
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Current AcceptLanguage String.
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String getCurrentAcceptLanguage() {
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Locale locale;
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized(sLockForLocaleSettings) {
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            locale = sLocale;
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        StringBuffer buffer = new StringBuffer();
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String language = locale.getLanguage();
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (language != null) {
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append(language);
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            final String country = locale.getCountry();
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (country != null) {
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                buffer.append("-");
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                buffer.append(country);
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!locale.equals(Locale.US)) {
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append(", ");
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            java.util.Locale us = Locale.US;
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (us.getLanguage() != null) {
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                buffer.append(us.getLanguage());
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                final String country = us.getCountry();
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (country != null) {
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    buffer.append("-");
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    buffer.append(country);
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return buffer.toString();
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Looks at sLocale and mContext and returns current UserAgent String.
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Current UserAgent String.
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private synchronized String getCurrentUserAgent() {
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Locale locale;
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized(sLockForLocaleSettings) {
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            locale = sLocale;
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        StringBuffer buffer = new StringBuffer();
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Add version
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String version = Build.VERSION.RELEASE;
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (version.length() > 0) {
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append(version);
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // default to "1.0"
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append("1.0");
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        buffer.append("; ");
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String language = locale.getLanguage();
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (language != null) {
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append(language.toLowerCase());
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            final String country = locale.getCountry();
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (country != null) {
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                buffer.append("-");
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                buffer.append(country.toLowerCase());
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // default to "en"
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append("en");
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String model = Build.MODEL;
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (model.length() > 0) {
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append("; ");
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append(model);
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String id = Build.ID;
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (id.length() > 0) {
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append(" Build/");
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append(id);
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String base = mContext.getResources().getText(
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                com.android.internal.R.string.web_user_agent).toString();
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return String.format(base, buffer);
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Enables dumping the pages navigation cache to a text file.
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setNavDump(boolean enabled) {
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mNavDump = enabled;
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns true if dumping the navigation cache is enabled.
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean getNavDump() {
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mNavDump;
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set whether the WebView supports zoom
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setSupportZoom(boolean support) {
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSupportZoom = support;
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns whether the WebView supports zoom
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean supportZoom() {
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mSupportZoom;
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
368105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     * Sets whether the zoom mechanism built into WebView is used.
369105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     */
370105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    public void setBuiltInZoomControls(boolean enabled) {
371105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        mBuiltInZoomControls = enabled;
372105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    }
373105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
374105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    /**
375105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     * Returns true if the zoom mechanism built into WebView is being used.
376105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     */
377105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    public boolean getBuiltInZoomControls() {
378105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        return mBuiltInZoomControls;
379105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    }
380105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
381105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    /**
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Enable or disable file access within WebView. File access is enabled by
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default.
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setAllowFileAccess(boolean allow) {
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mAllowFileAccess = allow;
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns true if this WebView supports file access.
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean getAllowFileAccess() {
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAllowFileAccess;
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Store whether the WebView is saving form data.
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setSaveFormData(boolean save) {
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSaveFormData = save;
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  Return whether the WebView is saving form data.
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean getSaveFormData() {
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mSaveFormData;
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  Store whether the WebView is saving password.
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setSavePassword(boolean save) {
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSavePassword = save;
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  Return whether the WebView is saving password.
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean getSavePassword() {
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mSavePassword;
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the text size of the page.
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param t A TextSize value for increasing or decreasing the text.
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see WebSettings.TextSize
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setTextSize(TextSize t) {
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (WebView.mLogEvent && mTextSize != t ) {
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Checkin.updateStats(mContext.getContentResolver(),
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    Checkin.Stats.Tag.BROWSER_TEXT_SIZE_CHANGE, 1, 0.0);
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextSize = t;
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        postSync();
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the text size of the page.
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return A TextSize enum value describing the text size.
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see WebSettings.TextSize
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized TextSize getTextSize() {
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mTextSize;
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Enables using light touches to make a selection and activate mouseovers.
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setLightTouchEnabled(boolean enabled) {
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mLightTouchEnabled = enabled;
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns true if light touches are enabled.
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean getLightTouchEnabled() {
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mLightTouchEnabled;
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Tell the WebView to use the double tree rendering algorithm.
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param use True if the WebView is to use double tree rendering, false
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            otherwise.
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setUseDoubleTree(boolean use) {
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mUseDoubleTree != use) {
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mUseDoubleTree = use;
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return true if the WebView is using the double tree rendering algorithm.
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the WebView is using the double tree rendering
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         algorithm.
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized boolean getUseDoubleTree() {
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mUseDoubleTree;
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Tell the WebView about user-agent string.
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param ua 0 if the WebView should use an Android user-agent string,
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *           1 if the WebView should use a desktop user-agent string.
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @deprecated Please use setUserAgentString instead.
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Deprecated
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setUserAgent(int ua) {
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String uaString = null;
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (ua == 1) {
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (DESKTOP_USERAGENT.equals(mUserAgent)) {
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return; // do nothing
4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                uaString = DESKTOP_USERAGENT;
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (ua == 2) {
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (IPHONE_USERAGENT.equals(mUserAgent)) {
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return; // do nothing
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                uaString = IPHONE_USERAGENT;
5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (ua != 0) {
5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return; // do nothing
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setUserAgentString(uaString);
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return user-agent as int
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return int  0 if the WebView is using an Android user-agent string.
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *              1 if the WebView is using a desktop user-agent string.
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             -1 if the WebView is using user defined user-agent string.
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @deprecated Please use getUserAgentString instead.
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Deprecated
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized int getUserAgent() {
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (DESKTOP_USERAGENT.equals(mUserAgent)) {
5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 1;
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (IPHONE_USERAGENT.equals(mUserAgent)) {
5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 2;
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (mUseDefaultUserAgent) {
5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return -1;
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Tell the WebView to use the wide viewport
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setUseWideViewPort(boolean use) {
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mUseWideViewport != use) {
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mUseWideViewport = use;
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the WebView is using a wide viewport
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized boolean getUseWideViewPort() {
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mUseWideViewport;
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Tell the WebView whether it supports multiple windows. TRUE means
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         that {@link WebChromeClient#onCreateWindow(WebView, boolean,
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         boolean, Message)} is implemented by the host application.
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setSupportMultipleWindows(boolean support) {
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mSupportMultipleWindows != support) {
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mSupportMultipleWindows = support;
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the WebView is supporting multiple windows. This means
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         that {@link WebChromeClient#onCreateWindow(WebView, boolean,
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         boolean, Message)} is implemented by the host application.
5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized boolean supportMultipleWindows() {
5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mSupportMultipleWindows;
5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the underlying layout algorithm. This will cause a relayout of the
5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * WebView.
5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param l A LayoutAlgorithm enum specifying the algorithm to use.
5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see WebSettings.LayoutAlgorithm
5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setLayoutAlgorithm(LayoutAlgorithm l) {
5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // XXX: This will only be affective if libwebcore was built with
5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // ANDROID_LAYOUT defined.
5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mLayoutAlgorithm != l) {
5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mLayoutAlgorithm = l;
5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the current layout algorithm.
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return LayoutAlgorithm enum value describing the layout algorithm
5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         being used.
5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see WebSettings.LayoutAlgorithm
5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized LayoutAlgorithm getLayoutAlgorithm() {
5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mLayoutAlgorithm;
5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the standard font family name.
5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param font A font family name.
5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setStandardFontFamily(String font) {
5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (font != null && !font.equals(mStandardFontFamily)) {
5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mStandardFontFamily = font;
6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the standard font family name.
6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The standard font family name as a string.
6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized String getStandardFontFamily() {
6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mStandardFontFamily;
6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the fixed font family name.
6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param font A font family name.
6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setFixedFontFamily(String font) {
6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (font != null && !font.equals(mFixedFontFamily)) {
6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mFixedFontFamily = font;
6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the fixed font family name.
6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The fixed font family name as a string.
6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized String getFixedFontFamily() {
6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mFixedFontFamily;
6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the sans-serif font family name.
6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param font A font family name.
6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setSansSerifFontFamily(String font) {
6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (font != null && !font.equals(mSansSerifFontFamily)) {
6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mSansSerifFontFamily = font;
6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the sans-serif font family name.
6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The sans-serif font family name as a string.
6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized String getSansSerifFontFamily() {
6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mSansSerifFontFamily;
6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the serif font family name.
6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param font A font family name.
6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setSerifFontFamily(String font) {
6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (font != null && !font.equals(mSerifFontFamily)) {
6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mSerifFontFamily = font;
6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the serif font family name.
6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The serif font family name as a string.
6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized String getSerifFontFamily() {
6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mSerifFontFamily;
6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the cursive font family name.
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param font A font family name.
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setCursiveFontFamily(String font) {
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (font != null && !font.equals(mCursiveFontFamily)) {
6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mCursiveFontFamily = font;
6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the cursive font family name.
6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The cursive font family name as a string.
6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized String getCursiveFontFamily() {
6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mCursiveFontFamily;
6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the fantasy font family name.
6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param font A font family name.
6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setFantasyFontFamily(String font) {
6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (font != null && !font.equals(mFantasyFontFamily)) {
6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mFantasyFontFamily = font;
6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the fantasy font family name.
7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The fantasy font family name as a string.
7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized String getFantasyFontFamily() {
7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mFantasyFontFamily;
7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the minimum font size.
7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Any number outside the specified range will be pinned.
7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setMinimumFontSize(int size) {
7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        size = pin(size);
7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mMinimumFontSize != size) {
7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mMinimumFontSize = size;
7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the minimum font size.
7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return A non-negative integer between 1 and 72.
7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized int getMinimumFontSize() {
7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mMinimumFontSize;
7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the minimum logical font size.
7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Any number outside the specified range will be pinned.
7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setMinimumLogicalFontSize(int size) {
7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        size = pin(size);
7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mMinimumLogicalFontSize != size) {
7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mMinimumLogicalFontSize = size;
7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the minimum logical font size.
7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return A non-negative integer between 1 and 72.
7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized int getMinimumLogicalFontSize() {
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mMinimumLogicalFontSize;
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the default font size.
7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Any number outside the specified range will be pinned.
7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setDefaultFontSize(int size) {
7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        size = pin(size);
7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mDefaultFontSize != size) {
7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mDefaultFontSize = size;
7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the default font size.
7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return A non-negative integer between 1 and 72.
7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized int getDefaultFontSize() {
7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mDefaultFontSize;
7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the default fixed font size.
7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Any number outside the specified range will be pinned.
7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setDefaultFixedFontSize(int size) {
7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        size = pin(size);
7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mDefaultFixedFontSize != size) {
7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mDefaultFixedFontSize = size;
7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the default fixed font size.
7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return A non-negative integer between 1 and 72.
7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized int getDefaultFixedFontSize() {
7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mDefaultFixedFontSize;
7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Tell the WebView to load image resources automatically.
7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flag True if the WebView should load images automatically.
7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setLoadsImagesAutomatically(boolean flag) {
7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mLoadsImagesAutomatically != flag) {
7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mLoadsImagesAutomatically = flag;
7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return true if the WebView will load image resources automatically.
8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the WebView loads images automatically.
8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized boolean getLoadsImagesAutomatically() {
8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mLoadsImagesAutomatically;
8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Tell the WebView to block network image. This is only checked when
8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getLoadsImagesAutomatically() is true.
8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flag True if the WebView should block network image
8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setBlockNetworkImage(boolean flag) {
8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mBlockNetworkImage != flag) {
8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mBlockNetworkImage = flag;
8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return true if the WebView will block network image.
8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the WebView blocks network image.
8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized boolean getBlockNetworkImage() {
8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mBlockNetworkImage;
8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Tell the WebView to block all network load requests.
8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flag True if the WebView should block all network loads
8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setBlockNetworkLoads(boolean flag) {
8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mBlockNetworkLoads != flag) {
8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mBlockNetworkLoads = flag;
8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            verifyNetworkAccess();
8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return true if the WebView will block all network loads.
8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the WebView blocks all network loads.
8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized boolean getBlockNetworkLoads() {
8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mBlockNetworkLoads;
8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void verifyNetworkAccess() {
8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!mBlockNetworkLoads) {
8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mContext.checkPermission("android.permission.INTERNET",
855c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project                    android.os.Process.myPid(), android.os.Process.myUid()) !=
8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        PackageManager.PERMISSION_GRANTED) {
8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                throw new SecurityException
8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        ("Permission denied - " +
8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                "application missing INTERNET permission");
8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Tell the WebView to enable javascript execution.
8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flag True if the WebView should execute javascript.
8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setJavaScriptEnabled(boolean flag) {
8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mJavaScriptEnabled != flag) {
8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mJavaScriptEnabled = flag;
8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Tell the WebView to enable plugins.
8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flag True if the WebView should load plugins.
8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setPluginsEnabled(boolean flag) {
8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mPluginsEnabled != flag) {
8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mPluginsEnabled = flag;
8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set a custom path to plugins used by the WebView. The client
8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * must ensure it exists before this call.
8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pluginsPath String path to the directory containing plugins.
8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setPluginsPath(String pluginsPath) {
8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (pluginsPath != null && !pluginsPath.equals(mPluginsPath)) {
8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mPluginsPath = pluginsPath;
8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return true if javascript is enabled.
9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if javascript is enabled.
9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized boolean getJavaScriptEnabled() {
9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mJavaScriptEnabled;
9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return true if plugins are enabled.
9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if plugins are enabled.
9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized boolean getPluginsEnabled() {
9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mPluginsEnabled;
9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the current path used for plugins in the WebView.
9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The string path to the WebView plugins.
9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized String getPluginsPath() {
9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mPluginsPath;
9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Tell javascript to open windows automatically. This applies to the
9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * javascript function window.open().
9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flag True if javascript can open windows automatically.
9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setJavaScriptCanOpenWindowsAutomatically(
9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            boolean flag) {
9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mJavaScriptCanOpenWindowsAutomatically != flag) {
9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mJavaScriptCanOpenWindowsAutomatically = flag;
9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return true if javascript can open windows automatically.
9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if javascript can open windows automatically during
9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         window.open().
9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized boolean getJavaScriptCanOpenWindowsAutomatically() {
9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mJavaScriptCanOpenWindowsAutomatically;
9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the default text encoding name to use when decoding html pages.
9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param encoding The text encoding name.
9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setDefaultTextEncodingName(String encoding) {
9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (encoding != null && !encoding.equals(mDefaultTextEncoding)) {
9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mDefaultTextEncoding = encoding;
9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the default text encoding name.
9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The default text encoding name as a string.
9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized String getDefaultTextEncodingName() {
9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mDefaultTextEncoding;
9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the WebView's user-agent string. If the string "ua" is null or empty,
9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * it will use the system default user-agent string.
9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setUserAgentString(String ua) {
9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (ua == null || ua.length() == 0) {
9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            synchronized(sLockForLocaleSettings) {
9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Locale currentLocale = Locale.getDefault();
9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (!sLocale.equals(currentLocale)) {
9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    sLocale = currentLocale;
9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mAcceptLanguage = getCurrentAcceptLanguage();
9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ua = getCurrentUserAgent();
9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mUseDefaultUserAgent = true;
9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else  {
9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mUseDefaultUserAgent = false;
9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!ua.equals(mUserAgent)) {
9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mUserAgent = ua;
9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the WebView's user-agent string.
9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized String getUserAgentString() {
9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (DESKTOP_USERAGENT.equals(mUserAgent) ||
9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                IPHONE_USERAGENT.equals(mUserAgent) ||
9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                !mUseDefaultUserAgent) {
9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return mUserAgent;
9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean doPostSync = false;
9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized(sLockForLocaleSettings) {
10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Locale currentLocale = Locale.getDefault();
10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!sLocale.equals(currentLocale)) {
10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sLocale = currentLocale;
10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mUserAgent = getCurrentUserAgent();
10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mAcceptLanguage = getCurrentAcceptLanguage();
10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                doPostSync = true;
10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (doPostSync) {
10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mUserAgent;
10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* package api to grab the Accept Language string. */
10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*package*/ synchronized String getAcceptLanguage() {
10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized(sLockForLocaleSettings) {
10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Locale currentLocale = Locale.getDefault();
10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!sLocale.equals(currentLocale)) {
10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sLocale = currentLocale;
10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mAcceptLanguage = getCurrentAcceptLanguage();
10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAcceptLanguage;
10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Tell the WebView whether it needs to set a node to have focus when
10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link WebView#requestFocus(int, android.graphics.Rect)} is called.
10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flag
10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setNeedInitialFocus(boolean flag) {
10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mNeedInitialFocus != flag) {
10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mNeedInitialFocus = flag;
10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* Package api to get the choice whether it needs to set initial focus. */
10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* package */ boolean getNeedInitialFocus() {
10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mNeedInitialFocus;
10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the priority of the Render thread. Unlike the other settings, this
10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * one only needs to be called once per process.
10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param priority RenderPriority, can be normal, high or low.
10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setRenderPriority(RenderPriority priority) {
10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mRenderPriority != priority) {
10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRenderPriority = priority;
10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mEventHandler.sendMessage(Message.obtain(null,
10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    EventHandler.PRIORITY));
10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Override the way the cache is used. The way the cache is used is based
10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * on the navigation option. For a normal page load, the cache is checked
10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and content is re-validated as needed. When navigating back, content is
10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not revalidated, instead the content is just pulled from the cache.
10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * This function allows the client to override this behavior.
10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode One of the LOAD_ values.
10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setCacheMode(int mode) {
10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mode != mOverrideCacheMode) {
10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mOverrideCacheMode = mode;
10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the current setting for overriding the cache mode. For a full
10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * description, see the {@link #setCacheMode(int)} function.
10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getCacheMode() {
10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mOverrideCacheMode;
10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If set, webkit alternately shrinks and expands images viewed outside
10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of an HTML page to fit the screen. This conflicts with attempts by
10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the UI to zoom in and out of an image, so it is set false by default.
10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param shrink Set true to let webkit shrink the standalone image to fit.
10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@hide}
10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setShrinksStandaloneImagesToFit(boolean shrink) {
10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mShrinksStandaloneImagesToFit != shrink) {
10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mShrinksStandaloneImagesToFit = shrink;
10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postSync();
10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Transfer messages from the queue to the new WebCoreThread. Called from
10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * WebCore thread.
10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*package*/
10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    synchronized void syncSettingsAndCreateHandler(BrowserFrame frame) {
10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mBrowserFrame = frame;
11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (android.util.Config.DEBUG) {
11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            junit.framework.Assert.assertTrue(frame.mNativeFrame != 0);
11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        nativeSync(frame.mNativeFrame);
11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSyncPending = false;
11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mEventHandler.createHandler();
11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int pin(int size) {
11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // FIXME: 72 is just an arbitrary max text size value.
11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (size < 1) {
11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 1;
11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (size > 72) {
11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 72;
11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return size;
11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* Post a SYNC message to handle syncing the native settings. */
11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private synchronized void postSync() {
11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Only post if a sync is not pending
11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!mSyncPending) {
11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mSyncPending = mEventHandler.sendMessage(
11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    Message.obtain(null, EventHandler.SYNC));
11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // Synchronize the native and java settings.
11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private native void nativeSync(int nativeFrame);
11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1130