WebSettings.java revision 8f5e405f60e3816f61549783782d9bf0d9d4d199
154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/*
254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *
454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * you may not use this file except in compliance with the License.
654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * You may obtain a copy of the License at
754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *
854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *
1054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * See the License for the specific language governing permissions and
1454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * limitations under the License.
1554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */
1654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectpackage android.webkit;
1854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.Context;
20f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Klobaimport android.content.SharedPreferences;
21972acd0c339db4b6a72c307ae0a0b2b5405376dbAndrei Popescuimport android.content.pm.PackageManager;
2254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.Build;
2354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.Handler;
2454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.Message;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.provider.Checkin;
26f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Projectimport java.lang.SecurityException;
2754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.util.Locale;
2854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
2954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/**
3054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Manages settings state for a WebView. When a WebView is first created, it
3154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * obtains a set of default settings. These default settings will be returned
3254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * from any getter call. A WebSettings object obtained from
3354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * WebView.getSettings() is tied to the life of the WebView. If a WebView has
3454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * been destroyed, any method call on WebSettings will throw an
3554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * IllegalStateException.
3654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */
3754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectpublic class WebSettings {
3854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
3954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enum for controlling the layout of html.
4054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * NORMAL means no rendering changes.
4154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * SINGLE_COLUMN moves all content into one column that is the width of the
4254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * view.
4354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * NARROW_COLUMNS makes all columns no wider than the screen if possible.
4454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
4554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // XXX: These must match LayoutAlgorithm in Settings.h in WebCore.
4654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public enum LayoutAlgorithm {
4754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        NORMAL,
4854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SINGLE_COLUMN,
4954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        NARROW_COLUMNS
5054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
5154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
5254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
5354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enum for specifying the text size.
5454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * SMALLEST is 50%
5554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * SMALLER is 75%
5654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * NORMAL is 100%
5754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * LARGER is 150%
5854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * LARGEST is 200%
5954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
6054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public enum TextSize {
6154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SMALLEST(50),
6254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SMALLER(75),
6354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        NORMAL(100),
6454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        LARGER(150),
6554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        LARGEST(200);
6654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        TextSize(int size) {
6754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            value = size;
6854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
6954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        int value;
7054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
710d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba
720d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    /**
730d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * Enum for specifying the WebView's desired density.
740d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * FAR makes 100% looking like in 240dpi
750d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * MEDIUM makes 100% looking like in 160dpi
760d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * CLOSE makes 100% looking like in 120dpi
770d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @hide Pending API council approval
780d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     */
790d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    public enum ZoomDensity {
800d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        FAR(150),      // 240dpi
810d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        MEDIUM(100),    // 160dpi
820d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        CLOSE(75);     // 120dpi
830d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        ZoomDensity(int size) {
840d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba            value = size;
850d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        }
860d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        int value;
870d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    }
880d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba
8954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
9054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Default cache usage pattern  Use with {@link #setCacheMode}.
9154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
9254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int LOAD_DEFAULT = -1;
9354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
9454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
9554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Normal cache usage pattern  Use with {@link #setCacheMode}.
9654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
9754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int LOAD_NORMAL = 0;
9854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
9954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
10054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Use cache if content is there, even if expired (eg, history nav)
10154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * If it is not in the cache, load from network.
10254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Use with {@link #setCacheMode}.
10354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
10454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int LOAD_CACHE_ELSE_NETWORK = 1;
10554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
10654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
10754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Don't use the cache, load from network
10854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Use with {@link #setCacheMode}.
10954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
11054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int LOAD_NO_CACHE = 2;
11154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
11254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
11354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Don't use the network, load from cache only.
11454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Use with {@link #setCacheMode}.
11554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
11654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int LOAD_CACHE_ONLY = 3;
11754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
11854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public enum RenderPriority {
11954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        NORMAL,
12054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        HIGH,
12154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        LOW
12254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
12354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1240d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    // WebView associated with this WebSettings.
1250d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    private WebView mWebView;
12654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // BrowserFrame used to access the native frame pointer.
12754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private BrowserFrame mBrowserFrame;
12854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Flag to prevent multiple SYNC messages at one time.
12954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean mSyncPending = false;
13054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Custom handler that queues messages until the WebCore thread is active.
13154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private final EventHandler mEventHandler;
132adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
13354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Private settings so we don't have to go into native code to
13454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // retrieve the values. After setXXX, postSync() needs to be called.
135adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    //
136adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    // The default values need to match those in WebSettings.cpp
137adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    // If the defaults change, please also update the JavaDocs so developers
138adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    // know what they are.
13954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private LayoutAlgorithm mLayoutAlgorithm = LayoutAlgorithm.NARROW_COLUMNS;
140f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private Context         mContext;
14154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private TextSize        mTextSize = TextSize.NORMAL;
14254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mStandardFontFamily = "sans-serif";
14354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mFixedFontFamily = "monospace";
14454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mSansSerifFontFamily = "sans-serif";
14554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mSerifFontFamily = "serif";
14654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mCursiveFontFamily = "cursive";
14754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mFantasyFontFamily = "fantasy";
148c27d9b5341b29c1b58c882f0a04b4c519d8a9853Daisuke Miyakawa    private String          mDefaultTextEncoding;
149f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private String          mUserAgent;
150f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private boolean         mUseDefaultUserAgent;
151f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private String          mAcceptLanguage;
15254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mMinimumFontSize = 8;
15354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mMinimumLogicalFontSize = 8;
15454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mDefaultFontSize = 16;
15554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mDefaultFixedFontSize = 13;
15654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mLoadsImagesAutomatically = true;
15754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mBlockNetworkImage = false;
158c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    private boolean         mBlockNetworkLoads;
15954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mJavaScriptEnabled = false;
16054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mPluginsEnabled = false;
16154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mJavaScriptCanOpenWindowsAutomatically = false;
16254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mUseDoubleTree = false;
16354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mUseWideViewport = false;
16454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSupportMultipleWindows = false;
165f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private boolean         mShrinksStandaloneImagesToFit = false;
166c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    // HTML5 API flags
167c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    private boolean         mAppCacheEnabled = false;
168c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    private boolean         mDatabaseEnabled = false;
169c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    private boolean         mDomStorageEnabled = false;
170c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    private boolean         mWorkersEnabled = false;  // only affects V8.
17109b0ca1ceefde02b9ed50dc4dd12774ba569143fSteve Block    private boolean         mGeolocationEnabled = true;
172c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    // HTML5 configuration parameters
173c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    private long            mAppCacheMaxSize = Long.MAX_VALUE;
174c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    private String          mAppCachePath = "";
175c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    private String          mDatabasePath = "";
1769d3273f62288fa54536a3928383588398ca2d029Steve Block    private String          mGeolocationDatabasePath = "";
17754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Don't need to synchronize the get/set methods as they
17854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // are basic types, also none of these values are used in
17954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // native WebCore code.
1800d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    private ZoomDensity     mDefaultZoom = ZoomDensity.MEDIUM;
18154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private RenderPriority  mRenderPriority = RenderPriority.NORMAL;
18254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mOverrideCacheMode = LOAD_DEFAULT;
18354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSaveFormData = true;
18454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSavePassword = true;
18554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mLightTouchEnabled = false;
18654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mNeedInitialFocus = true;
18754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mNavDump = false;
18854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSupportZoom = true;
189105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    private boolean         mBuiltInZoomControls = false;
190f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private boolean         mAllowFileAccess = true;
191f8d4964e45f7e671f4b333386b4269b23ced4750Cary Clark    private boolean         mLoadWithOverviewMode = false;
19254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
193f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba    // private WebSettings, not accessible by the host activity
19424a3ff958b87550904a71961835f6883d1411c27Grace Kloba    static private int      mDoubleTapToastCount = 3;
195f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba
196f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba    private static final String PREF_FILE = "WebViewSettings";
197f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba    private static final String DOUBLE_TAP_TOAST_COUNT = "double_tap_toast_count";
198f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba
19954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Class to handle messages before WebCore is ready.
20054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private class EventHandler {
20154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Message id for syncing
20254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        static final int SYNC = 0;
20354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Message id for setting priority
20454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        static final int PRIORITY = 1;
205f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba        // Message id for writing double-tap toast count
206f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba        static final int SET_DOUBLE_TAP_TOAST_COUNT = 2;
20754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Actual WebCore thread handler
20854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private Handler mHandler;
20954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
21054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private synchronized void createHandler() {
21154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // as mRenderPriority can be set before thread is running, sync up
21254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            setRenderPriority();
21354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
21454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // create a new handler
21554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mHandler = new Handler() {
21654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                @Override
21754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                public void handleMessage(Message msg) {
21854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    switch (msg.what) {
21954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        case SYNC:
22054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            synchronized (WebSettings.this) {
22154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                if (mBrowserFrame.mNativeFrame != 0) {
22254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                    nativeSync(mBrowserFrame.mNativeFrame);
22354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                }
22454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                mSyncPending = false;
22554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            }
22654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            break;
22754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
22854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        case PRIORITY: {
22954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            setRenderPriority();
23054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            break;
23154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        }
232f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba
233f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                        case SET_DOUBLE_TAP_TOAST_COUNT: {
234f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                            SharedPreferences.Editor editor = mContext
235f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                                    .getSharedPreferences(PREF_FILE,
236f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                                            Context.MODE_PRIVATE).edit();
237f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                            editor.putInt(DOUBLE_TAP_TOAST_COUNT,
238f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                                    mDoubleTapToastCount);
239f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                            editor.commit();
240f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                            break;
241f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                        }
24254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    }
24354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
24454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            };
24554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
24654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
24754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private void setRenderPriority() {
24854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            synchronized (WebSettings.this) {
24954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (mRenderPriority == RenderPriority.NORMAL) {
25054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    android.os.Process.setThreadPriority(
25154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_DEFAULT);
25254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } else if (mRenderPriority == RenderPriority.HIGH) {
25354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    android.os.Process.setThreadPriority(
25454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_FOREGROUND +
25554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_LESS_FAVORABLE);
25654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } else if (mRenderPriority == RenderPriority.LOW) {
25754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    android.os.Process.setThreadPriority(
25854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_BACKGROUND);
25954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
26054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
26154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
26254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
26354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
26454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Send a message to the private queue or handler.
26554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
26654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private synchronized boolean sendMessage(Message msg) {
26754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (mHandler != null) {
26854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                mHandler.sendMessage(msg);
26954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return true;
27054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } else {
27154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return false;
27254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
27354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
27454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
27554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
27654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // User agent strings.
27754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private static final String DESKTOP_USERAGENT =
278b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us)"
279b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            + " AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0"
280b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            + " Safari/530.17";
281f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private static final String IPHONE_USERAGENT =
282b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us)"
283b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            + " AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0"
284b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            + " Mobile/7A341 Safari/528.16";
285f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private static Locale sLocale;
286f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private static Object sLockForLocaleSettings;
287f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
28854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
28954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Package constructor to prevent clients from creating a new settings
29054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * instance.
29154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
2920d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    WebSettings(Context context, WebView webview) {
293f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mEventHandler = new EventHandler();
294f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mContext = context;
2950d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        mWebView = webview;
296c27d9b5341b29c1b58c882f0a04b4c519d8a9853Daisuke Miyakawa        mDefaultTextEncoding = context.getString(com.android.internal.
297c27d9b5341b29c1b58c882f0a04b4c519d8a9853Daisuke Miyakawa                                                 R.string.default_text_encoding);
298f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
299f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (sLockForLocaleSettings == null) {
300f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            sLockForLocaleSettings = new Object();
301f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            sLocale = Locale.getDefault();
302f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
303f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mAcceptLanguage = getCurrentAcceptLanguage();
304f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mUserAgent = getCurrentUserAgent();
305f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mUseDefaultUserAgent = true;
306f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
307c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project        mBlockNetworkLoads = mContext.checkPermission(
308c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project                "android.permission.INTERNET", android.os.Process.myPid(),
309c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project                android.os.Process.myUid()) != PackageManager.PERMISSION_GRANTED;
310f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
311f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
312f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
313f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Looks at sLocale and returns current AcceptLanguage String.
314f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @return Current AcceptLanguage String.
315f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
316f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private String getCurrentAcceptLanguage() {
317f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Locale locale;
318f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
319f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            locale = sLocale;
320f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
321f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        StringBuffer buffer = new StringBuffer();
322f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String language = locale.getLanguage();
323f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (language != null) {
324f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append(language);
325f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            final String country = locale.getCountry();
326f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (country != null) {
327f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append("-");
328f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append(country);
32954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
330f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
331f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (!locale.equals(Locale.US)) {
332f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append(", ");
333f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            java.util.Locale us = Locale.US;
334f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (us.getLanguage() != null) {
335f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append(us.getLanguage());
336f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                final String country = us.getCountry();
33754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (country != null) {
338f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    buffer.append("-");
339f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    buffer.append(country);
34054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
34154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
342f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
343f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
344f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return buffer.toString();
345f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
346f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
347f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
348f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Looks at sLocale and mContext and returns current UserAgent String.
349f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @return Current UserAgent String.
350f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
351f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private synchronized String getCurrentUserAgent() {
352f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Locale locale;
353f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
354f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            locale = sLocale;
355f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
356f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        StringBuffer buffer = new StringBuffer();
357f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // Add version
358f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String version = Build.VERSION.RELEASE;
359f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (version.length() > 0) {
360f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append(version);
361f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else {
362f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // default to "1.0"
363f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append("1.0");
364f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
365f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        buffer.append("; ");
366f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String language = locale.getLanguage();
367f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (language != null) {
368f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append(language.toLowerCase());
369f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            final String country = locale.getCountry();
370f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (country != null) {
371f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append("-");
372f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append(country.toLowerCase());
37354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
374f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else {
375f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // default to "en"
376f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append("en");
37754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
378ce761d3219d1a091e6177ff852d9f0636777f04fGrace Kloba        // add the model for the release build
379ce761d3219d1a091e6177ff852d9f0636777f04fGrace Kloba        if ("REL".equals(Build.VERSION.CODENAME)) {
380ce761d3219d1a091e6177ff852d9f0636777f04fGrace Kloba            final String model = Build.MODEL;
381ce761d3219d1a091e6177ff852d9f0636777f04fGrace Kloba            if (model.length() > 0) {
382ce761d3219d1a091e6177ff852d9f0636777f04fGrace Kloba                buffer.append("; ");
383ce761d3219d1a091e6177ff852d9f0636777f04fGrace Kloba                buffer.append(model);
384ce761d3219d1a091e6177ff852d9f0636777f04fGrace Kloba            }
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String id = Build.ID;
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (id.length() > 0) {
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append(" Build/");
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append(id);
390f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
391f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String base = mContext.getResources().getText(
392f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                com.android.internal.R.string.web_user_agent).toString();
393f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return String.format(base, buffer);
39454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
395f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
39654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
39754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enables dumping the pages navigation cache to a text file.
39854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
39954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setNavDump(boolean enabled) {
40054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mNavDump = enabled;
40154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
40254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
40354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
40454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Returns true if dumping the navigation cache is enabled.
40554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
40654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getNavDump() {
40754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mNavDump;
40854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
40954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
41054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
41154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set whether the WebView supports zoom
41254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
41354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setSupportZoom(boolean support) {
41454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSupportZoom = support;
41554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
41654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
41754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
41854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Returns whether the WebView supports zoom
41954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
42054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean supportZoom() {
42154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSupportZoom;
42254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
42354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
42454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
425105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     * Sets whether the zoom mechanism built into WebView is used.
426105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     */
427105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    public void setBuiltInZoomControls(boolean enabled) {
428105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        mBuiltInZoomControls = enabled;
429105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    }
430105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
431105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    /**
432105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     * Returns true if the zoom mechanism built into WebView is being used.
433105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     */
434105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    public boolean getBuiltInZoomControls() {
435105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        return mBuiltInZoomControls;
436105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    }
437105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
438105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    /**
439f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Enable or disable file access within WebView. File access is enabled by
440f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * default.
441f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
442f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void setAllowFileAccess(boolean allow) {
443f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mAllowFileAccess = allow;
444f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
445f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
446f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
447f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Returns true if this WebView supports file access.
448f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
449f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public boolean getAllowFileAccess() {
450f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return mAllowFileAccess;
451f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
452f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
453f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
454e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba     * Set whether the WebView loads a page with overview mode.
455e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba     * @hide Pending API council approval
456e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba     */
457e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba    public void setLoadWithOverviewMode(boolean overview) {
458e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba        mLoadWithOverviewMode = overview;
459e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba    }
460e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba
461e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba    /**
462e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba     * Returns true if this WebView loads page with overview mode
463e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba     * @hide Pending API council approval
464e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba     */
465e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba    public boolean getLoadWithOverviewMode() {
466e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba        return mLoadWithOverviewMode;
467e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba    }
468e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba
469e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba    /**
47054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Store whether the WebView is saving form data.
47154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
47254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setSaveFormData(boolean save) {
47354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSaveFormData = save;
47454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
47554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
47654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
47754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *  Return whether the WebView is saving form data.
47854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
47954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getSaveFormData() {
48054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSaveFormData;
48154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
48254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
48354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
48454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *  Store whether the WebView is saving password.
48554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
48654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setSavePassword(boolean save) {
48754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSavePassword = save;
48854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
48954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
49054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
49154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *  Return whether the WebView is saving password.
49254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
49354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getSavePassword() {
49454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSavePassword;
49554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
49654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
49754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
49854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the text size of the page.
49954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param t A TextSize value for increasing or decreasing the text.
50054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.TextSize
50154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
50254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setTextSize(TextSize t) {
5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (WebView.mLogEvent && mTextSize != t ) {
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Checkin.updateStats(mContext.getContentResolver(),
5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    Checkin.Stats.Tag.BROWSER_TEXT_SIZE_CHANGE, 1, 0.0);
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
50754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mTextSize = t;
50854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        postSync();
50954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
51054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
51154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
51254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Get the text size of the page.
51354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A TextSize enum value describing the text size.
51454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.TextSize
51554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
51654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized TextSize getTextSize() {
51754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mTextSize;
51854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
51954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
52054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
5210d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * Set the default zoom density of the page. This should be called from UI
5220d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * thread.
5230d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @param zoom A ZoomDensity value
5240d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @see WebSettings.ZoomDensity
5250d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @hide Pending API council approval
5260d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     */
5270d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    public void setDefaultZoom(ZoomDensity zoom) {
5280d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        if (mDefaultZoom != zoom) {
5290d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba            mDefaultZoom = zoom;
5300d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba            mWebView.updateDefaultZoomDensity(zoom.value);
5310d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        }
5320d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    }
5330d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba
5340d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    /**
5350d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * Get the default zoom density of the page. This should be called from UI
5360d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * thread.
5370d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @return A ZoomDensity value
5380d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @see WebSettings.ZoomDensity
5390d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @hide Pending API council approval
5400d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     */
5410d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    public ZoomDensity getDefaultZoom() {
5420d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        return mDefaultZoom;
5430d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    }
5440d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba
5450d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    /**
54654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enables using light touches to make a selection and activate mouseovers.
54754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
54854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setLightTouchEnabled(boolean enabled) {
54954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mLightTouchEnabled = enabled;
55054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
55154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
55254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
55354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Returns true if light touches are enabled.
55454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
55554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getLightTouchEnabled() {
55654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mLightTouchEnabled;
55754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
55854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
55954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
560adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * @deprecated This setting controlled a rendering optimization
561adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * that is no longer present. Setting it now has no effect.
56254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
563adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    @Deprecated
56454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setUseDoubleTree(boolean use) {
565adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn        return;
56654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
56754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
56854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
569adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * @deprecated This setting controlled a rendering optimization
570adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * that is no longer present. Setting it now has no effect.
57154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
572adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    @Deprecated
57354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getUseDoubleTree() {
574adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn        return false;
57554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
57654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
57754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
57854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView about user-agent string.
57954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param ua 0 if the WebView should use an Android user-agent string,
58054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *           1 if the WebView should use a desktop user-agent string.
581f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     *
582f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @deprecated Please use setUserAgentString instead.
58354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
584f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @Deprecated
58554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setUserAgent(int ua) {
586f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        String uaString = null;
587f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (ua == 1) {
588f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (DESKTOP_USERAGENT.equals(mUserAgent)) {
589f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                return; // do nothing
590f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } else {
591f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                uaString = DESKTOP_USERAGENT;
592f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
593f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else if (ua == 2) {
594f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (IPHONE_USERAGENT.equals(mUserAgent)) {
595f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                return; // do nothing
596f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } else {
597f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                uaString = IPHONE_USERAGENT;
598f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
599f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else if (ua != 0) {
600f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            return; // do nothing
60154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
602f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        setUserAgentString(uaString);
60354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
60454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
60554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
60654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return user-agent as int
60754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return int  0 if the WebView is using an Android user-agent string.
60854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *              1 if the WebView is using a desktop user-agent string.
609f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     *             -1 if the WebView is using user defined user-agent string.
610f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     *
611f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @deprecated Please use getUserAgentString instead.
61254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
613f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @Deprecated
61454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getUserAgent() {
61554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (DESKTOP_USERAGENT.equals(mUserAgent)) {
61654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 1;
61754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else if (IPHONE_USERAGENT.equals(mUserAgent)) {
61854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 2;
619f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else if (mUseDefaultUserAgent) {
620f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            return 0;
62154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
622f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return -1;
62354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
62454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
62554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
62654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to use the wide viewport
62754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
62854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setUseWideViewPort(boolean use) {
62954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mUseWideViewport != use) {
63054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mUseWideViewport = use;
63154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
63254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
63354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
63454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
63554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
63654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if the WebView is using a wide viewport
63754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
63854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getUseWideViewPort() {
63954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mUseWideViewport;
64054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
64154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
64254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
64354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView whether it supports multiple windows. TRUE means
64454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         that {@link WebChromeClient#onCreateWindow(WebView, boolean,
64554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         boolean, Message)} is implemented by the host application.
64654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
64754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setSupportMultipleWindows(boolean support) {
64854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mSupportMultipleWindows != support) {
64954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSupportMultipleWindows = support;
65054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
65154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
65254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
65354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
65454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
65554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if the WebView is supporting multiple windows. This means
65654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         that {@link WebChromeClient#onCreateWindow(WebView, boolean,
65754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         boolean, Message)} is implemented by the host application.
65854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
65954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean supportMultipleWindows() {
66054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSupportMultipleWindows;
66154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
66254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
66354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
66454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the underlying layout algorithm. This will cause a relayout of the
66554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * WebView.
66654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param l A LayoutAlgorithm enum specifying the algorithm to use.
66754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.LayoutAlgorithm
66854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
66954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setLayoutAlgorithm(LayoutAlgorithm l) {
67054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // XXX: This will only be affective if libwebcore was built with
67154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // ANDROID_LAYOUT defined.
67254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mLayoutAlgorithm != l) {
67354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mLayoutAlgorithm = l;
67454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
67554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
67654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
67754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
67854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
679adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Return the current layout algorithm. The default is NARROW_COLUMNS.
68054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return LayoutAlgorithm enum value describing the layout algorithm
68154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         being used.
68254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.LayoutAlgorithm
68354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
68454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized LayoutAlgorithm getLayoutAlgorithm() {
68554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mLayoutAlgorithm;
68654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
68754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
68854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
68954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the standard font family name.
69054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
69154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
69254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setStandardFontFamily(String font) {
69354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mStandardFontFamily)) {
69454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mStandardFontFamily = font;
69554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
69654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
69754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
69854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
69954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
700adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the standard font family name. The default is "sans-serif".
70154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The standard font family name as a string.
70254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
70354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getStandardFontFamily() {
70454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mStandardFontFamily;
70554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
70654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
70754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
70854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the fixed font family name.
70954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
71054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
71154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setFixedFontFamily(String font) {
71254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mFixedFontFamily)) {
71354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mFixedFontFamily = font;
71454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
71554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
71654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
71754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
71854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
719adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the fixed font family name. The default is "monospace".
72054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The fixed font family name as a string.
72154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
72254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getFixedFontFamily() {
72354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mFixedFontFamily;
72454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
72554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
72654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
72754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the sans-serif font family name.
72854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
72954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
73054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setSansSerifFontFamily(String font) {
73154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mSansSerifFontFamily)) {
73254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSansSerifFontFamily = font;
73354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
73454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
73554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
73654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
73754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
73854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Get the sans-serif font family name.
73954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The sans-serif font family name as a string.
74054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
74154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getSansSerifFontFamily() {
74254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSansSerifFontFamily;
74354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
74454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
74554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
746adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Set the serif font family name. The default is "sans-serif".
74754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
74854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
74954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setSerifFontFamily(String font) {
75054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mSerifFontFamily)) {
75154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSerifFontFamily = font;
75254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
75354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
75454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
75554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
75654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
757adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the serif font family name. The default is "serif".
75854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The serif font family name as a string.
75954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
76054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getSerifFontFamily() {
76154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSerifFontFamily;
76254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
76354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
76454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
76554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the cursive font family name.
76654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
76754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
76854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setCursiveFontFamily(String font) {
76954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mCursiveFontFamily)) {
77054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mCursiveFontFamily = font;
77154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
77254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
77354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
77454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
77554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
776adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the cursive font family name. The default is "cursive".
77754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The cursive font family name as a string.
77854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
77954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getCursiveFontFamily() {
78054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mCursiveFontFamily;
78154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
78254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
78354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
78454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the fantasy font family name.
78554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
78654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
78754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setFantasyFontFamily(String font) {
78854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mFantasyFontFamily)) {
78954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mFantasyFontFamily = font;
79054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
79154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
79254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
79354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
79454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
795adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the fantasy font family name. The default is "fantasy".
79654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The fantasy font family name as a string.
79754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
79854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getFantasyFontFamily() {
79954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mFantasyFontFamily;
80054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
80154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
80254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
80354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the minimum font size.
80454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
80554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
80654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
80754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setMinimumFontSize(int size) {
80854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
80954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mMinimumFontSize != size) {
81054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mMinimumFontSize = size;
81154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
81254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
81354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
81454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
81554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
816adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the minimum font size. The default is 8.
81754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
81854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
81954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getMinimumFontSize() {
82054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mMinimumFontSize;
82154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
82254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
82354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
82454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the minimum logical font size.
82554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
82654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
82754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
82854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setMinimumLogicalFontSize(int size) {
82954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
83054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mMinimumLogicalFontSize != size) {
83154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mMinimumLogicalFontSize = size;
83254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
83354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
83454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
83554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
83654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
837adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the minimum logical font size. The default is 8.
83854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
83954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
84054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getMinimumLogicalFontSize() {
84154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mMinimumLogicalFontSize;
84254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
84354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
84454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
84554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the default font size.
84654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
84754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
84854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
84954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setDefaultFontSize(int size) {
85054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
85154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mDefaultFontSize != size) {
85254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mDefaultFontSize = size;
85354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
85454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
85554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
85654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
85754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
858adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the default font size. The default is 16.
85954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
86054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
86154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getDefaultFontSize() {
86254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mDefaultFontSize;
86354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
86454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
86554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
86654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the default fixed font size.
86754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
86854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
86954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
87054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setDefaultFixedFontSize(int size) {
87154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
87254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mDefaultFixedFontSize != size) {
87354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mDefaultFixedFontSize = size;
87454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
87554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
87654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
87754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
87854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
879adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the default fixed font size. The default is 16.
88054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
88154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
88254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getDefaultFixedFontSize() {
88354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mDefaultFixedFontSize;
88454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
88554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
88654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
88754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to load image resources automatically.
88854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if the WebView should load images automatically.
88954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
89054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setLoadsImagesAutomatically(boolean flag) {
89154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mLoadsImagesAutomatically != flag) {
89254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mLoadsImagesAutomatically = flag;
89354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
89454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
89554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
89654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
89754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
89854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return true if the WebView will load image resources automatically.
899adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * The default is true.
90054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if the WebView loads images automatically.
90154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
90254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getLoadsImagesAutomatically() {
90354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mLoadsImagesAutomatically;
90454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
90554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
90654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
90754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to block network image. This is only checked when
90854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * getLoadsImagesAutomatically() is true.
90954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if the WebView should block network image
91054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
91154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setBlockNetworkImage(boolean flag) {
91254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mBlockNetworkImage != flag) {
91354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mBlockNetworkImage = flag;
91454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
91554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
91654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
91754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
91854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
919adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Return true if the WebView will block network image. The default is false.
92054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if the WebView blocks network image.
92154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
92254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getBlockNetworkImage() {
92354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mBlockNetworkImage;
92454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
925adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
926f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
927f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @hide
928adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Tell the WebView to block all network load requests.
929f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @param flag True if the WebView should block all network loads
930f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
931f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized void setBlockNetworkLoads(boolean flag) {
932f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (mBlockNetworkLoads != flag) {
933f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mBlockNetworkLoads = flag;
934f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            verifyNetworkAccess();
935f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
936f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
937f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
938f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
939f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @hide
940f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Return true if the WebView will block all network loads.
941adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * The default is false.
942f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @return True if the WebView blocks all network loads.
943f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
944f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized boolean getBlockNetworkLoads() {
945f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return mBlockNetworkLoads;
946f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
947adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
948adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
949f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void verifyNetworkAccess() {
950f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (!mBlockNetworkLoads) {
951f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (mContext.checkPermission("android.permission.INTERNET",
952c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project                    android.os.Process.myPid(), android.os.Process.myUid()) !=
953f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        PackageManager.PERMISSION_GRANTED) {
954f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                throw new SecurityException
955f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        ("Permission denied - " +
956f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                                "application missing INTERNET permission");
957f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
958f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
959f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
96054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
96154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
96254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to enable javascript execution.
96354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if the WebView should execute javascript.
96454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
96554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setJavaScriptEnabled(boolean flag) {
96654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mJavaScriptEnabled != flag) {
96754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mJavaScriptEnabled = flag;
96854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
96954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
97054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
97154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
97254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
97354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to enable plugins.
97454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if the WebView should load plugins.
97554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
97654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setPluginsEnabled(boolean flag) {
97754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mPluginsEnabled != flag) {
97854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mPluginsEnabled = flag;
97954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
98054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
98154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
98254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
98354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
984658ab7d787f64987d7c45aae08e5a12a073afe78Grace Kloba     * TODO: need to add @Deprecated
98554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
98654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setPluginsPath(String pluginsPath) {
98754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
98854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
98954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
9907df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * Set the path to where database storage API databases should be saved.
9917df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * This will update WebCore when the Sync runs in the C++ side.
9927df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * @param databasePath String path to the directory where databases should
9937df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     *     be saved. May be the empty string but should never be null.
9947df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     */
9957df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    public synchronized void setDatabasePath(String databasePath) {
9967df1985e86635af006be3dfa65987d60e290b5deBen Murdoch        if (databasePath != null && !databasePath.equals(mDatabasePath)) {
9977df1985e86635af006be3dfa65987d60e290b5deBen Murdoch            mDatabasePath = databasePath;
9987df1985e86635af006be3dfa65987d60e290b5deBen Murdoch            postSync();
9997df1985e86635af006be3dfa65987d60e290b5deBen Murdoch        }
10007df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    }
10017df1985e86635af006be3dfa65987d60e290b5deBen Murdoch
10027df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    /**
10039d3273f62288fa54536a3928383588398ca2d029Steve Block     * Set the path where the Geolocation permissions database should be saved.
10049d3273f62288fa54536a3928383588398ca2d029Steve Block     * This will update WebCore when the Sync runs in the C++ side.
10059d3273f62288fa54536a3928383588398ca2d029Steve Block     * @param databasePath String path to the directory where the Geolocation
10069d3273f62288fa54536a3928383588398ca2d029Steve Block     *     permissions database should be saved. May be the empty string but
10079d3273f62288fa54536a3928383588398ca2d029Steve Block     *     should never be null.
10089d3273f62288fa54536a3928383588398ca2d029Steve Block     */
10099d3273f62288fa54536a3928383588398ca2d029Steve Block    public synchronized void setGeolocationDatabasePath(String databasePath) {
10108f5e405f60e3816f61549783782d9bf0d9d4d199Grace Kloba        if (databasePath != null
10118f5e405f60e3816f61549783782d9bf0d9d4d199Grace Kloba                && !databasePath.equals(mGeolocationDatabasePath)) {
10129d3273f62288fa54536a3928383588398ca2d029Steve Block            mGeolocationDatabasePath = databasePath;
10139d3273f62288fa54536a3928383588398ca2d029Steve Block            postSync();
10149d3273f62288fa54536a3928383588398ca2d029Steve Block        }
10159d3273f62288fa54536a3928383588398ca2d029Steve Block    }
10169d3273f62288fa54536a3928383588398ca2d029Steve Block
10179d3273f62288fa54536a3928383588398ca2d029Steve Block    /**
101860a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * Tell the WebView to enable Application Caches API.
101960a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * @param flag True if the WebView should enable Application Caches.
102060a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * @hide pending api council approval
102160a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     */
102260a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    public synchronized void setAppCacheEnabled(boolean flag) {
102360a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu        if (mAppCacheEnabled != flag) {
102460a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu            mAppCacheEnabled = flag;
102560a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu            postSync();
102660a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu        }
102760a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    }
102860a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu
102960a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    /**
103060a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * Set a custom path to the Application Caches files. The client
103160a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * must ensure it exists before this call.
103260a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * @param appCachePath String path to the directory containing Application
103360a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * Caches files. The appCache path can be the empty string but should not
103460a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * be null. Passing null for this parameter will result in a no-op.
103560a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * @hide pending api council approval
103660a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     */
103760a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    public synchronized void setAppCachePath(String appCachePath) {
103860a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu        if (appCachePath != null && !appCachePath.equals(mAppCachePath)) {
103960a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu            mAppCachePath = appCachePath;
104060a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu            postSync();
104160a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu        }
104260a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    }
104360a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu
104460a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    /**
10451c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu     * Set the maximum size for the Application Caches content.
10461c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu     * @param appCacheMaxSize the maximum size in bytes.
10471c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu     *
10481c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu     * @hide pending api council approval
10491c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu     */
10501c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu    public synchronized void setAppCacheMaxSize(long appCacheMaxSize) {
10511c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu        if (appCacheMaxSize != mAppCacheMaxSize) {
10521c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu            mAppCacheMaxSize = appCacheMaxSize;
10531c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu            postSync();
10541c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu        }
10551c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu    }
10561c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu
10571c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu    /**
10587df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * Set whether the database storage API is enabled.
10597df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * @param flag boolean True if the WebView should use the database storage
10607df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     *     API.
10617df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     */
10627df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    public synchronized void setDatabaseEnabled(boolean flag) {
10637df1985e86635af006be3dfa65987d60e290b5deBen Murdoch       if (mDatabaseEnabled != flag) {
10647df1985e86635af006be3dfa65987d60e290b5deBen Murdoch           mDatabaseEnabled = flag;
10657df1985e86635af006be3dfa65987d60e290b5deBen Murdoch           postSync();
10667df1985e86635af006be3dfa65987d60e290b5deBen Murdoch       }
10677df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    }
10687df1985e86635af006be3dfa65987d60e290b5deBen Murdoch
10697df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    /**
1070274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * Set whether the DOM storage API is enabled.
1071274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * @param flag boolean True if the WebView should use the DOM storage
1072274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     *     API.
1073274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * @hide pending API council.
1074274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     */
1075274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    public synchronized void setDomStorageEnabled(boolean flag) {
1076274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch       if (mDomStorageEnabled != flag) {
1077274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch           mDomStorageEnabled = flag;
1078274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch           postSync();
1079274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch       }
1080274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    }
1081274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch
1082274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    /**
1083274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * Returns true if the DOM Storage API's are enabled.
1084274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * @return True if the DOM Storage API's are enabled.
1085274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * @hide pending API council.
1086274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     */
1087274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    public synchronized boolean getDomStorageEnabled() {
1088274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch       return mDomStorageEnabled;
1089274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    }
1090274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch
1091274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    /**
10927df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * Return the path to where database storage API databases are saved for
10937df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * the current WebView.
10947df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * @return the String path to the database storage API databases.
10957df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     */
10967df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    public synchronized String getDatabasePath() {
10977df1985e86635af006be3dfa65987d60e290b5deBen Murdoch        return mDatabasePath;
10987df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    }
10997df1985e86635af006be3dfa65987d60e290b5deBen Murdoch
11007df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    /**
11017df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * Returns true if database storage API is enabled.
11027df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * @return True if the database storage API is enabled.
11037df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     */
11047df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    public synchronized boolean getDatabaseEnabled() {
11057df1985e86635af006be3dfa65987d60e290b5deBen Murdoch        return mDatabaseEnabled;
11067df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    }
11077df1985e86635af006be3dfa65987d60e290b5deBen Murdoch
11087df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    /**
1109c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu     * Tell the WebView to enable WebWorkers API.
1110c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu     * @param flag True if the WebView should enable WebWorkers.
1111c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu     * Note that this flag only affects V8. JSC does not have
1112c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu     * an equivalent setting.
1113c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu     * @hide pending api council approval
1114c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu     */
1115c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    public synchronized void setWorkersEnabled(boolean flag) {
1116c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu        if (mWorkersEnabled != flag) {
1117c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu            mWorkersEnabled = flag;
1118c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu            postSync();
1119c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu        }
1120c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    }
1121c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu
1122c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    /**
112306cd751b052e65c359b16cce0570b6fab305eb89Steve Block     * Sets whether Geolocation is enabled.
112406cd751b052e65c359b16cce0570b6fab305eb89Steve Block     * @param flag Whether Geolocation should be enabled.
112506cd751b052e65c359b16cce0570b6fab305eb89Steve Block     */
112606cd751b052e65c359b16cce0570b6fab305eb89Steve Block    public synchronized void setGeolocationEnabled(boolean flag) {
112706cd751b052e65c359b16cce0570b6fab305eb89Steve Block        if (mGeolocationEnabled != flag) {
112806cd751b052e65c359b16cce0570b6fab305eb89Steve Block            mGeolocationEnabled = flag;
112906cd751b052e65c359b16cce0570b6fab305eb89Steve Block            postSync();
113006cd751b052e65c359b16cce0570b6fab305eb89Steve Block        }
113106cd751b052e65c359b16cce0570b6fab305eb89Steve Block    }
113206cd751b052e65c359b16cce0570b6fab305eb89Steve Block
113306cd751b052e65c359b16cce0570b6fab305eb89Steve Block    /**
1134adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Return true if javascript is enabled. <b>Note: The default is false.</b>
113554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if javascript is enabled.
113654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
113754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getJavaScriptEnabled() {
113854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mJavaScriptEnabled;
113954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
114054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
114154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
114254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return true if plugins are enabled.
114354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if plugins are enabled.
114454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
114554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getPluginsEnabled() {
114654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mPluginsEnabled;
114754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
114854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
114954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
1150658ab7d787f64987d7c45aae08e5a12a073afe78Grace Kloba     * TODO: need to add @Deprecated
115154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
115254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getPluginsPath() {
1153658ab7d787f64987d7c45aae08e5a12a073afe78Grace Kloba        return "";
115454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
115554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
115654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
115754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell javascript to open windows automatically. This applies to the
115854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * javascript function window.open().
115954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if javascript can open windows automatically.
116054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
116154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setJavaScriptCanOpenWindowsAutomatically(
116254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            boolean flag) {
116354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mJavaScriptCanOpenWindowsAutomatically != flag) {
116454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mJavaScriptCanOpenWindowsAutomatically = flag;
116554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
116654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
116754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
116854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
116954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
1170adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Return true if javascript can open windows automatically. The default
1171adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * is false.
117254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if javascript can open windows automatically during
117354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         window.open().
117454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
117554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getJavaScriptCanOpenWindowsAutomatically() {
117654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mJavaScriptCanOpenWindowsAutomatically;
117754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
117854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
117954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
118054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the default text encoding name to use when decoding html pages.
118154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param encoding The text encoding name.
118254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
118354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setDefaultTextEncodingName(String encoding) {
118454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (encoding != null && !encoding.equals(mDefaultTextEncoding)) {
118554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mDefaultTextEncoding = encoding;
118654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
118754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
118854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
118954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
119054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
1191adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the default text encoding name. The default is "Latin-1".
119254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The default text encoding name as a string.
119354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
119454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getDefaultTextEncodingName() {
119554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mDefaultTextEncoding;
119654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
119754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1198f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
1199f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Set the WebView's user-agent string. If the string "ua" is null or empty,
1200f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * it will use the system default user-agent string.
1201f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
1202f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized void setUserAgentString(String ua) {
1203f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (ua == null || ua.length() == 0) {
1204f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            synchronized(sLockForLocaleSettings) {
1205f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                Locale currentLocale = Locale.getDefault();
1206f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                if (!sLocale.equals(currentLocale)) {
1207f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    sLocale = currentLocale;
1208f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    mAcceptLanguage = getCurrentAcceptLanguage();
1209f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                }
1210f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
1211f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            ua = getCurrentUserAgent();
1212f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mUseDefaultUserAgent = true;
1213f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else  {
1214f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mUseDefaultUserAgent = false;
1215f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1216f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
1217f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (!ua.equals(mUserAgent)) {
1218f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mUserAgent = ua;
1219f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            postSync();
1220f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1221f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
1222f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
1223f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
1224f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Return the WebView's user-agent string.
1225f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
1226f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized String getUserAgentString() {
1227f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (DESKTOP_USERAGENT.equals(mUserAgent) ||
1228f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                IPHONE_USERAGENT.equals(mUserAgent) ||
1229f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                !mUseDefaultUserAgent) {
1230f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            return mUserAgent;
1231f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1232f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
1233f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        boolean doPostSync = false;
1234f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
1235f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            Locale currentLocale = Locale.getDefault();
1236f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (!sLocale.equals(currentLocale)) {
1237f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                sLocale = currentLocale;
1238f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                mUserAgent = getCurrentUserAgent();
1239f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                mAcceptLanguage = getCurrentAcceptLanguage();
1240f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                doPostSync = true;
1241f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
1242f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1243f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (doPostSync) {
1244f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            postSync();
1245f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
124654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mUserAgent;
124754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
124854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1249f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /* package api to grab the Accept Language string. */
1250f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /*package*/ synchronized String getAcceptLanguage() {
1251f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
1252f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            Locale currentLocale = Locale.getDefault();
1253f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (!sLocale.equals(currentLocale)) {
1254f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                sLocale = currentLocale;
1255f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                mAcceptLanguage = getCurrentAcceptLanguage();
1256f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
1257f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1258f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return mAcceptLanguage;
1259f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
1260f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
126154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
126254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView whether it needs to set a node to have focus when
126354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * {@link WebView#requestFocus(int, android.graphics.Rect)} is called.
126454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *
126554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag
126654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
126754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setNeedInitialFocus(boolean flag) {
126854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mNeedInitialFocus != flag) {
126954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mNeedInitialFocus = flag;
127054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
127154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
127254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
127354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /* Package api to get the choice whether it needs to set initial focus. */
127454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /* package */ boolean getNeedInitialFocus() {
127554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mNeedInitialFocus;
127654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
127754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
127854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
127954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the priority of the Render thread. Unlike the other settings, this
1280adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * one only needs to be called once per process. The default is NORMAL.
1281adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     *
128254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param priority RenderPriority, can be normal, high or low.
128354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
128454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setRenderPriority(RenderPriority priority) {
128554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mRenderPriority != priority) {
128654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mRenderPriority = priority;
128754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mEventHandler.sendMessage(Message.obtain(null,
128854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    EventHandler.PRIORITY));
128954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
129054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
129154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
129254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
129354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Override the way the cache is used. The way the cache is used is based
129454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * on the navigation option. For a normal page load, the cache is checked
129554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * and content is re-validated as needed. When navigating back, content is
129654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * not revalidated, instead the content is just pulled from the cache.
129754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * This function allows the client to override this behavior.
129854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param mode One of the LOAD_ values.
129954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
130054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setCacheMode(int mode) {
130154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mode != mOverrideCacheMode) {
130254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mOverrideCacheMode = mode;
130354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
130454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
130554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
130654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
130754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return the current setting for overriding the cache mode. For a full
130854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * description, see the {@link #setCacheMode(int)} function.
130954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
131054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public int getCacheMode() {
131154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mOverrideCacheMode;
131254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
1313f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
1314f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
1315f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * If set, webkit alternately shrinks and expands images viewed outside
1316f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * of an HTML page to fit the screen. This conflicts with attempts by
1317f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * the UI to zoom in and out of an image, so it is set false by default.
1318f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @param shrink Set true to let webkit shrink the standalone image to fit.
1319f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * {@hide}
1320f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
1321f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void setShrinksStandaloneImagesToFit(boolean shrink) {
1322f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (mShrinksStandaloneImagesToFit != shrink) {
1323f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mShrinksStandaloneImagesToFit = shrink;
1324f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            postSync();
1325f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1326f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     }
132754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1328f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba    int getDoubleTapToastCount() {
1329f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba        return mDoubleTapToastCount;
1330f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba    }
1331f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba
1332f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba    void setDoubleTapToastCount(int count) {
1333f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba        if (mDoubleTapToastCount != count) {
1334f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba            mDoubleTapToastCount = count;
1335f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba            // write the settings in the non-UI thread
1336f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba            mEventHandler.sendMessage(Message.obtain(null,
1337f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                    EventHandler.SET_DOUBLE_TAP_TOAST_COUNT));
1338f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba        }
1339f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba    }
1340f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba
134154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
134254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Transfer messages from the queue to the new WebCoreThread. Called from
134354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * WebCore thread.
134454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
134554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /*package*/
134654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    synchronized void syncSettingsAndCreateHandler(BrowserFrame frame) {
134754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mBrowserFrame = frame;
13482e5c150e746647a1ce5c10e1708debbf06c45ea7Derek Sollenberger        if (DebugFlags.WEB_SETTINGS) {
134954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            junit.framework.Assert.assertTrue(frame.mNativeFrame != 0);
135054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
1351dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu
1352dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu        GoogleLocationSettingManager.getInstance().start(mContext);
1353dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu
1354f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba        SharedPreferences sp = mContext.getSharedPreferences(PREF_FILE,
1355f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                Context.MODE_PRIVATE);
135624a3ff958b87550904a71961835f6883d1411c27Grace Kloba        if (mDoubleTapToastCount > 0) {
135724a3ff958b87550904a71961835f6883d1411c27Grace Kloba            mDoubleTapToastCount = sp.getInt(DOUBLE_TAP_TOAST_COUNT,
135824a3ff958b87550904a71961835f6883d1411c27Grace Kloba                    mDoubleTapToastCount);
135924a3ff958b87550904a71961835f6883d1411c27Grace Kloba        }
136054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        nativeSync(frame.mNativeFrame);
136154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSyncPending = false;
136254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mEventHandler.createHandler();
136354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
136454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1365dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu    /**
1366dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu     * Let the Settings object know that our owner is being destroyed.
1367dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu     */
1368dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu    /*package*/
1369dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu    synchronized void onDestroyed() {
1370dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu        GoogleLocationSettingManager.getInstance().stop();
1371dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu    }
1372dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu
137354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int pin(int size) {
137454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // FIXME: 72 is just an arbitrary max text size value.
137554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (size < 1) {
137654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 1;
137754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else if (size > 72) {
137854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 72;
137954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
138054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return size;
138154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
138254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
138354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /* Post a SYNC message to handle syncing the native settings. */
138454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private synchronized void postSync() {
138554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Only post if a sync is not pending
138654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (!mSyncPending) {
138754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSyncPending = mEventHandler.sendMessage(
138854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    Message.obtain(null, EventHandler.SYNC));
138954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
139054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
139154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
139254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Synchronize the native and java settings.
139354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private native void nativeSync(int nativeFrame);
139454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
1395