WebSettings.java revision a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4
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;
22a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolbimport android.content.res.Configuration;
2354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.Build;
2454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.Handler;
2554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.Message;
2618e939623556928f73fcc7511c85a537929a4a7eDan Egnorimport android.util.EventLog;
27f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Projectimport java.lang.SecurityException;
2854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.util.Locale;
2954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
3054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/**
3154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Manages settings state for a WebView. When a WebView is first created, it
3254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * obtains a set of default settings. These default settings will be returned
3354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * from any getter call. A WebSettings object obtained from
3454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * WebView.getSettings() is tied to the life of the WebView. If a WebView has
3554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * been destroyed, any method call on WebSettings will throw an
3654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * IllegalStateException.
3754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */
3854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectpublic class WebSettings {
3954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
4054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enum for controlling the layout of html.
4154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * NORMAL means no rendering changes.
4254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * SINGLE_COLUMN moves all content into one column that is the width of the
4354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * view.
4454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * NARROW_COLUMNS makes all columns no wider than the screen if possible.
4554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
4654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // XXX: These must match LayoutAlgorithm in Settings.h in WebCore.
4754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public enum LayoutAlgorithm {
4854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        NORMAL,
4954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SINGLE_COLUMN,
5054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        NARROW_COLUMNS
5154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
5254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
5354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
5454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enum for specifying the text size.
5554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * SMALLEST is 50%
5654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * SMALLER is 75%
5754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * NORMAL is 100%
5854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * LARGER is 150%
5954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * LARGEST is 200%
6054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
6154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public enum TextSize {
6254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SMALLEST(50),
6354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SMALLER(75),
6454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        NORMAL(100),
6554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        LARGER(150),
6654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        LARGEST(200);
6754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        TextSize(int size) {
6854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            value = size;
6954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
7054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        int value;
7154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
720d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba
730d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    /**
740d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * Enum for specifying the WebView's desired density.
750d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * FAR makes 100% looking like in 240dpi
760d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * MEDIUM makes 100% looking like in 160dpi
770d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * CLOSE makes 100% looking like in 120dpi
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;
111a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb
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
124300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott    /**
125300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * The plugin state effects how plugins are treated on a page. ON means
126300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * that any object will be loaded even if a plugin does not exist to handle
127300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * the content. ON_DEMAND means that if there is a plugin installed that
128300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * can handle the content, a placeholder is shown until the user clicks on
129300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * the placeholder. Once clicked, the plugin will be enabled on the page.
130300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * OFF means that all plugins will be turned off and any fallback content
131300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * will be used.
132300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     */
133300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott    public enum PluginState {
134300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott        ON,
135300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott        ON_DEMAND,
136300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott        OFF
137300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott    }
138300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott
1390d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    // WebView associated with this WebSettings.
1400d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    private WebView mWebView;
14154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // BrowserFrame used to access the native frame pointer.
14254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private BrowserFrame mBrowserFrame;
14354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Flag to prevent multiple SYNC messages at one time.
14454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean mSyncPending = false;
14554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Custom handler that queues messages until the WebCore thread is active.
14654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private final EventHandler mEventHandler;
147adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
14854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Private settings so we don't have to go into native code to
14954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // retrieve the values. After setXXX, postSync() needs to be called.
150adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    //
151adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    // The default values need to match those in WebSettings.cpp
152adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    // If the defaults change, please also update the JavaDocs so developers
153adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    // know what they are.
15454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private LayoutAlgorithm mLayoutAlgorithm = LayoutAlgorithm.NARROW_COLUMNS;
155f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private Context         mContext;
15654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private TextSize        mTextSize = TextSize.NORMAL;
15754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mStandardFontFamily = "sans-serif";
15854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mFixedFontFamily = "monospace";
15954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mSansSerifFontFamily = "sans-serif";
16054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mSerifFontFamily = "serif";
16154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mCursiveFontFamily = "cursive";
16254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mFantasyFontFamily = "fantasy";
163c27d9b5341b29c1b58c882f0a04b4c519d8a9853Daisuke Miyakawa    private String          mDefaultTextEncoding;
164f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private String          mUserAgent;
165f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private boolean         mUseDefaultUserAgent;
166f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private String          mAcceptLanguage;
16754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mMinimumFontSize = 8;
16854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mMinimumLogicalFontSize = 8;
16954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mDefaultFontSize = 16;
17054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mDefaultFixedFontSize = 13;
171097b1e777a2a29eef3938338cb0c355203bf1448Grace Kloba    private int             mPageCacheCapacity = 0;
17254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mLoadsImagesAutomatically = true;
17354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mBlockNetworkImage = false;
174c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    private boolean         mBlockNetworkLoads;
17554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mJavaScriptEnabled = false;
176300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott    private PluginState     mPluginState = PluginState.OFF;
17754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mJavaScriptCanOpenWindowsAutomatically = false;
17854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mUseDoubleTree = false;
17954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mUseWideViewport = false;
18054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSupportMultipleWindows = false;
181f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private boolean         mShrinksStandaloneImagesToFit = false;
182f0785a66f0e8447c30f47a760905bc74644f5c10Cary Clark    private long            mMaximumDecodedImageSize = 0; // 0 means default
183c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    // HTML5 API flags
184c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    private boolean         mAppCacheEnabled = false;
185c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    private boolean         mDatabaseEnabled = false;
186c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    private boolean         mDomStorageEnabled = false;
187c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    private boolean         mWorkersEnabled = false;  // only affects V8.
18809b0ca1ceefde02b9ed50dc4dd12774ba569143fSteve Block    private boolean         mGeolocationEnabled = true;
1895dc0c8253b368239a90d7176ff6325ae5ba371b3Elliott Slaughter    private boolean         mXSSAuditorEnabled = false;
190c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    // HTML5 configuration parameters
191c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    private long            mAppCacheMaxSize = Long.MAX_VALUE;
192c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    private String          mAppCachePath = "";
193c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    private String          mDatabasePath = "";
19418773afa64d407ebdd4bfc7bc151497d4447884dBen Murdoch    // The WebCore DatabaseTracker only allows the database path to be set
19518773afa64d407ebdd4bfc7bc151497d4447884dBen Murdoch    // once. Keep track of when the path has been set.
19618773afa64d407ebdd4bfc7bc151497d4447884dBen Murdoch    private boolean         mDatabasePathHasBeenSet = false;
1979d3273f62288fa54536a3928383588398ca2d029Steve Block    private String          mGeolocationDatabasePath = "";
19854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Don't need to synchronize the get/set methods as they
19954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // are basic types, also none of these values are used in
20054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // native WebCore code.
2010d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    private ZoomDensity     mDefaultZoom = ZoomDensity.MEDIUM;
20254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private RenderPriority  mRenderPriority = RenderPriority.NORMAL;
20354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mOverrideCacheMode = LOAD_DEFAULT;
20454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSaveFormData = true;
20554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSavePassword = true;
20654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mLightTouchEnabled = false;
20754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mNeedInitialFocus = true;
20854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mNavDump = false;
20954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSupportZoom = true;
210105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    private boolean         mBuiltInZoomControls = false;
211f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private boolean         mAllowFileAccess = true;
212f8d4964e45f7e671f4b333386b4269b23ced4750Cary Clark    private boolean         mLoadWithOverviewMode = false;
213f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba    private boolean         mEnableSmoothTransition = false;
21454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
215f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba    // private WebSettings, not accessible by the host activity
21624a3ff958b87550904a71961835f6883d1411c27Grace Kloba    static private int      mDoubleTapToastCount = 3;
217f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba
218f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba    private static final String PREF_FILE = "WebViewSettings";
219f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba    private static final String DOUBLE_TAP_TOAST_COUNT = "double_tap_toast_count";
220f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba
22154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Class to handle messages before WebCore is ready.
22254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private class EventHandler {
22354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Message id for syncing
22454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        static final int SYNC = 0;
22554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Message id for setting priority
22654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        static final int PRIORITY = 1;
227f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba        // Message id for writing double-tap toast count
228f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba        static final int SET_DOUBLE_TAP_TOAST_COUNT = 2;
22954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Actual WebCore thread handler
23054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private Handler mHandler;
23154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
23254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private synchronized void createHandler() {
23354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // as mRenderPriority can be set before thread is running, sync up
23454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            setRenderPriority();
23554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
23654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // create a new handler
23754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mHandler = new Handler() {
23854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                @Override
23954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                public void handleMessage(Message msg) {
24054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    switch (msg.what) {
24154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        case SYNC:
24254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            synchronized (WebSettings.this) {
24354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                if (mBrowserFrame.mNativeFrame != 0) {
24454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                    nativeSync(mBrowserFrame.mNativeFrame);
24554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                }
24654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                mSyncPending = false;
24754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            }
24854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            break;
24954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
25054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        case PRIORITY: {
25154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            setRenderPriority();
25254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            break;
25354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        }
254f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba
255f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                        case SET_DOUBLE_TAP_TOAST_COUNT: {
256f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                            SharedPreferences.Editor editor = mContext
257f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                                    .getSharedPreferences(PREF_FILE,
258f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                                            Context.MODE_PRIVATE).edit();
259f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                            editor.putInt(DOUBLE_TAP_TOAST_COUNT,
260f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                                    mDoubleTapToastCount);
261f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                            editor.commit();
262f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                            break;
263f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                        }
26454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    }
26554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
26654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            };
26754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
26854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
26954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private void setRenderPriority() {
27054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            synchronized (WebSettings.this) {
27154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (mRenderPriority == RenderPriority.NORMAL) {
27254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    android.os.Process.setThreadPriority(
27354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_DEFAULT);
27454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } else if (mRenderPriority == RenderPriority.HIGH) {
27554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    android.os.Process.setThreadPriority(
27654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_FOREGROUND +
27754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_LESS_FAVORABLE);
27854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } else if (mRenderPriority == RenderPriority.LOW) {
27954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    android.os.Process.setThreadPriority(
28054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_BACKGROUND);
28154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
28254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
28354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
28454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
28554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
28654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Send a message to the private queue or handler.
28754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
28854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private synchronized boolean sendMessage(Message msg) {
28954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (mHandler != null) {
29054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                mHandler.sendMessage(msg);
29154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return true;
29254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } else {
29354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return false;
29454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
29554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
29654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
29754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
29854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // User agent strings.
29954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private static final String DESKTOP_USERAGENT =
300b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us)"
301b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            + " AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0"
302b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            + " Safari/530.17";
3030e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang    private static final String IPHONE_USERAGENT =
304b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us)"
305b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            + " AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0"
306b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            + " Mobile/7A341 Safari/528.16";
307f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private static Locale sLocale;
308f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private static Object sLockForLocaleSettings;
3090e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang
31054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
31154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Package constructor to prevent clients from creating a new settings
31254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * instance.
31354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
3140d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    WebSettings(Context context, WebView webview) {
315f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mEventHandler = new EventHandler();
316f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mContext = context;
3170d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        mWebView = webview;
318c27d9b5341b29c1b58c882f0a04b4c519d8a9853Daisuke Miyakawa        mDefaultTextEncoding = context.getString(com.android.internal.
319c27d9b5341b29c1b58c882f0a04b4c519d8a9853Daisuke Miyakawa                                                 R.string.default_text_encoding);
320f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
321f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (sLockForLocaleSettings == null) {
322f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            sLockForLocaleSettings = new Object();
323f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            sLocale = Locale.getDefault();
324f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
325f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mAcceptLanguage = getCurrentAcceptLanguage();
326f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mUserAgent = getCurrentUserAgent();
327f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mUseDefaultUserAgent = true;
328f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
329c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project        mBlockNetworkLoads = mContext.checkPermission(
330c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project                "android.permission.INTERNET", android.os.Process.myPid(),
331c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project                android.os.Process.myUid()) != PackageManager.PERMISSION_GRANTED;
332f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
333f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
3340e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang    private static final String ACCEPT_LANG_FOR_US_LOCALE = "en-US";
3350e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang
336f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
337f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Looks at sLocale and returns current AcceptLanguage String.
338f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @return Current AcceptLanguage String.
339f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
340f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private String getCurrentAcceptLanguage() {
341f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Locale locale;
342f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
343f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            locale = sLocale;
344f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
3450e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang        StringBuilder buffer = new StringBuilder();
3460e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang        addLocaleToHttpAcceptLanguage(buffer, locale);
3470e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang
3480e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang        if (!Locale.US.equals(locale)) {
3490e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang            if (buffer.length() > 0) {
3500e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang                buffer.append(", ");
35154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
3520e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang            buffer.append(ACCEPT_LANG_FOR_US_LOCALE);
353f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
354f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
355f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return buffer.toString();
356f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
3570e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang
3580e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang    /**
3590e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang     * Convert obsolete language codes, including Hebrew/Indonesian/Yiddish,
3600e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang     * to new standard.
3610e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang     */
3620e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang    private static String convertObsoleteLanguageCodeToNew(String langCode) {
3630e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang        if (langCode == null) {
3640e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang            return null;
3650e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang        }
3660e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang        if ("iw".equals(langCode)) {
3670e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang            // Hebrew
3680e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang            return "he";
3690e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang        } else if ("in".equals(langCode)) {
3700e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang            // Indonesian
3710e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang            return "id";
3720e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang        } else if ("ji".equals(langCode)) {
3730e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang            // Yiddish
3740e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang            return "yi";
3750e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang        }
3760e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang        return langCode;
3770e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang    }
3780e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang
3790e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang    private static void addLocaleToHttpAcceptLanguage(StringBuilder builder,
3800e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang                                                      Locale locale) {
3810e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang        String language = convertObsoleteLanguageCodeToNew(locale.getLanguage());
3820e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang        if (language != null) {
3830e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang            builder.append(language);
3840e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang            String country = locale.getCountry();
3850e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang            if (country != null) {
3860e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang                builder.append("-");
3870e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang                builder.append(country);
3880e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang            }
3890e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang        }
3900e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang    }
3910e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang
392f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
393f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Looks at sLocale and mContext and returns current UserAgent String.
394f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @return Current UserAgent String.
395f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
396f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private synchronized String getCurrentUserAgent() {
397f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Locale locale;
398f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
399f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            locale = sLocale;
400f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
401f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        StringBuffer buffer = new StringBuffer();
402f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // Add version
403f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String version = Build.VERSION.RELEASE;
404f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (version.length() > 0) {
405f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append(version);
406f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else {
407f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // default to "1.0"
408f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append("1.0");
4090e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang        }
410f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        buffer.append("; ");
411f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String language = locale.getLanguage();
412f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (language != null) {
4130e4cb9d89fe58b378d94c87f182aaaef9d6a6d60Shimeng (Simon) Wang            buffer.append(convertObsoleteLanguageCodeToNew(language));
414f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            final String country = locale.getCountry();
415f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (country != null) {
416f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append("-");
417f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append(country.toLowerCase());
41854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
419f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else {
420f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // default to "en"
421f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append("en");
42254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
423ce761d3219d1a091e6177ff852d9f0636777f04fGrace Kloba        // add the model for the release build
424ce761d3219d1a091e6177ff852d9f0636777f04fGrace Kloba        if ("REL".equals(Build.VERSION.CODENAME)) {
425ce761d3219d1a091e6177ff852d9f0636777f04fGrace Kloba            final String model = Build.MODEL;
426ce761d3219d1a091e6177ff852d9f0636777f04fGrace Kloba            if (model.length() > 0) {
427ce761d3219d1a091e6177ff852d9f0636777f04fGrace Kloba                buffer.append("; ");
428ce761d3219d1a091e6177ff852d9f0636777f04fGrace Kloba                buffer.append(model);
429ce761d3219d1a091e6177ff852d9f0636777f04fGrace Kloba            }
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String id = Build.ID;
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (id.length() > 0) {
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append(" Build/");
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append(id);
435f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
436a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb        String mobile = ((mContext.getResources().getConfiguration().screenLayout
437a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb                & Configuration.SCREENLAYOUT_SIZE_MASK)
438a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb                == Configuration.SCREENLAYOUT_SIZE_XLARGE) ? "" : "Mobile ";
439f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String base = mContext.getResources().getText(
440f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                com.android.internal.R.string.web_user_agent).toString();
441a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb        return String.format(base, buffer, mobile);
44254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
443a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb
44454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
44554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enables dumping the pages navigation cache to a text file.
44654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
44754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setNavDump(boolean enabled) {
44854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mNavDump = enabled;
44954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
45054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
45154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
45254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Returns true if dumping the navigation cache is enabled.
45354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
45454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getNavDump() {
45554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mNavDump;
45654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
45754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
45854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
459178db41234abd08925fea9a4dc5180218f7da737Grace Kloba     * If WebView only supports touch, a different navigation model will be
460178db41234abd08925fea9a4dc5180218f7da737Grace Kloba     * applied. Otherwise, the navigation to support both touch and keyboard
461178db41234abd08925fea9a4dc5180218f7da737Grace Kloba     * will be used.
462178db41234abd08925fea9a4dc5180218f7da737Grace Kloba     * @hide
463178db41234abd08925fea9a4dc5180218f7da737Grace Kloba    public void setSupportTouchOnly(boolean touchOnly) {
464178db41234abd08925fea9a4dc5180218f7da737Grace Kloba        mSupportTounchOnly = touchOnly;
465178db41234abd08925fea9a4dc5180218f7da737Grace Kloba    }
466178db41234abd08925fea9a4dc5180218f7da737Grace Kloba     */
467178db41234abd08925fea9a4dc5180218f7da737Grace Kloba
468178db41234abd08925fea9a4dc5180218f7da737Grace Kloba    boolean supportTouchOnly() {
469178db41234abd08925fea9a4dc5180218f7da737Grace Kloba        // for debug only, use mLightTouchEnabled for mSupportTounchOnly
470178db41234abd08925fea9a4dc5180218f7da737Grace Kloba        return mLightTouchEnabled;
471178db41234abd08925fea9a4dc5180218f7da737Grace Kloba    }
472178db41234abd08925fea9a4dc5180218f7da737Grace Kloba
473178db41234abd08925fea9a4dc5180218f7da737Grace Kloba    /**
47454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set whether the WebView supports zoom
47554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
47654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setSupportZoom(boolean support) {
47754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSupportZoom = support;
4783a0def280fa4f6306929910a414b41ae58a7d139Grace Kloba        mWebView.updateMultiTouchSupport(mContext);
47954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
48054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
48154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
48254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Returns whether the WebView supports zoom
48354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
48454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean supportZoom() {
48554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSupportZoom;
48654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
48754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
48854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
489105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     * Sets whether the zoom mechanism built into WebView is used.
490105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     */
491105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    public void setBuiltInZoomControls(boolean enabled) {
492105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        mBuiltInZoomControls = enabled;
4933a0def280fa4f6306929910a414b41ae58a7d139Grace Kloba        mWebView.updateMultiTouchSupport(mContext);
494105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    }
495a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb
496105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    /**
497105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     * Returns true if the zoom mechanism built into WebView is being used.
498105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     */
499105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    public boolean getBuiltInZoomControls() {
500105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        return mBuiltInZoomControls;
501105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    }
502a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb
503105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    /**
504f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Enable or disable file access within WebView. File access is enabled by
505f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * default.
506f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
507f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void setAllowFileAccess(boolean allow) {
508f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mAllowFileAccess = allow;
509f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
510f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
511f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
512f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Returns true if this WebView supports file access.
513f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
514f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public boolean getAllowFileAccess() {
515f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return mAllowFileAccess;
516f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
517f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
518f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
519e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba     * Set whether the WebView loads a page with overview mode.
520e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba     */
521e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba    public void setLoadWithOverviewMode(boolean overview) {
522e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba        mLoadWithOverviewMode = overview;
523e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba    }
524e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba
525e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba    /**
526e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba     * Returns true if this WebView loads page with overview mode
527e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba     */
528e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba    public boolean getLoadWithOverviewMode() {
529e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba        return mLoadWithOverviewMode;
530e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba    }
531e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba
532e397a88e4fd65ee7d346f63a43e6608dba943ee9Grace Kloba    /**
533f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba     * Set whether the WebView will enable smooth transition while panning or
534f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba     * zooming. If it is true, WebView will choose a solution to maximize the
535f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba     * performance. e.g. the WebView's content may not be updated during the
536f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba     * transition. If it is false, WebView will keep its fidelity. The default
537f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba     * value is false.
538f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba     */
539f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba    public void setEnableSmoothTransition(boolean enable) {
540f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba        mEnableSmoothTransition = enable;
541f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba    }
542f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba
543f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba    /**
544f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba     * Returns true if the WebView enables smooth transition while panning or
545f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba     * zooming.
546f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba     */
547f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba    public boolean enableSmoothTransition() {
548f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba        return mEnableSmoothTransition;
549f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba    }
550f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba
551f9b731d383790e0dfd407525efcd72bba4ee4895Grace Kloba    /**
55254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Store whether the WebView is saving form data.
55354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
55454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setSaveFormData(boolean save) {
55554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSaveFormData = save;
55654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
55754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
55854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
55954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *  Return whether the WebView is saving form data.
56054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
56154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getSaveFormData() {
56254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSaveFormData;
56354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
56454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
56554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
56654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *  Store whether the WebView is saving password.
56754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
56854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setSavePassword(boolean save) {
56954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSavePassword = save;
57054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
57154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
57254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
57354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *  Return whether the WebView is saving password.
57454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
57554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getSavePassword() {
57654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSavePassword;
57754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
57854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
57954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
58054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the text size of the page.
58154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param t A TextSize value for increasing or decreasing the text.
58254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.TextSize
58354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
58454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setTextSize(TextSize t) {
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (WebView.mLogEvent && mTextSize != t ) {
58618e939623556928f73fcc7511c85a537929a4a7eDan Egnor            EventLog.writeEvent(EventLogTags.BROWSER_TEXT_SIZE_CHANGE,
58718e939623556928f73fcc7511c85a537929a4a7eDan Egnor                    mTextSize.value, t.value);
5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
58954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mTextSize = t;
59054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        postSync();
59154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
59254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
59354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
59454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Get the text size of the page.
59554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A TextSize enum value describing the text size.
59654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.TextSize
59754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
59854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized TextSize getTextSize() {
59954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mTextSize;
60054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
60154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
60254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
6030d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * Set the default zoom density of the page. This should be called from UI
6040d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * thread.
6050d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @param zoom A ZoomDensity value
6060d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @see WebSettings.ZoomDensity
6070d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     */
6080d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    public void setDefaultZoom(ZoomDensity zoom) {
6090d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        if (mDefaultZoom != zoom) {
6100d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba            mDefaultZoom = zoom;
6110d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba            mWebView.updateDefaultZoomDensity(zoom.value);
6120d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        }
6130d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    }
6140d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba
6150d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    /**
6160d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * Get the default zoom density of the page. This should be called from UI
6170d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * thread.
6180d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @return A ZoomDensity value
6190d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @see WebSettings.ZoomDensity
6200d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     */
6210d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    public ZoomDensity getDefaultZoom() {
6220d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        return mDefaultZoom;
6230d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    }
6240d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba
6250d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    /**
62654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enables using light touches to make a selection and activate mouseovers.
62754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
62854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setLightTouchEnabled(boolean enabled) {
62954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mLightTouchEnabled = enabled;
63054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
63154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
63254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
63354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Returns true if light touches are enabled.
63454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
63554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getLightTouchEnabled() {
63654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mLightTouchEnabled;
63754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
63854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
63954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
640adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * @deprecated This setting controlled a rendering optimization
641adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * that is no longer present. Setting it now has no effect.
64254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
643adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    @Deprecated
64454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setUseDoubleTree(boolean use) {
645adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn        return;
64654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
64754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
64854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
649adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * @deprecated This setting controlled a rendering optimization
650adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * that is no longer present. Setting it now has no effect.
65154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
652adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    @Deprecated
65354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getUseDoubleTree() {
654adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn        return false;
65554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
65654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
65754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
65854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView about user-agent string.
65954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param ua 0 if the WebView should use an Android user-agent string,
66054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *           1 if the WebView should use a desktop user-agent string.
661f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     *
662f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @deprecated Please use setUserAgentString instead.
66354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
664f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @Deprecated
66554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setUserAgent(int ua) {
666f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        String uaString = null;
667f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (ua == 1) {
668f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (DESKTOP_USERAGENT.equals(mUserAgent)) {
669f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                return; // do nothing
670f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } else {
671f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                uaString = DESKTOP_USERAGENT;
672f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
673f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else if (ua == 2) {
674f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (IPHONE_USERAGENT.equals(mUserAgent)) {
675f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                return; // do nothing
676f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } else {
677f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                uaString = IPHONE_USERAGENT;
678f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
679f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else if (ua != 0) {
680f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            return; // do nothing
68154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
682f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        setUserAgentString(uaString);
68354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
68454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
68554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
68654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return user-agent as int
68754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return int  0 if the WebView is using an Android user-agent string.
68854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *              1 if the WebView is using a desktop user-agent string.
689f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     *             -1 if the WebView is using user defined user-agent string.
690f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     *
691f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @deprecated Please use getUserAgentString instead.
69254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
693f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @Deprecated
69454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getUserAgent() {
69554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (DESKTOP_USERAGENT.equals(mUserAgent)) {
69654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 1;
69754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else if (IPHONE_USERAGENT.equals(mUserAgent)) {
69854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 2;
699f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else if (mUseDefaultUserAgent) {
700f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            return 0;
70154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
702f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return -1;
70354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
70454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
70554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
70654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to use the wide viewport
70754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
70854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setUseWideViewPort(boolean use) {
70954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mUseWideViewport != use) {
71054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mUseWideViewport = use;
71154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
71254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
71354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
71454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
71554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
71654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if the WebView is using a wide viewport
71754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
71854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getUseWideViewPort() {
71954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mUseWideViewport;
72054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
72154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
72254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
72354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView whether it supports multiple windows. TRUE means
72454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         that {@link WebChromeClient#onCreateWindow(WebView, boolean,
72554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         boolean, Message)} is implemented by the host application.
72654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
72754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setSupportMultipleWindows(boolean support) {
72854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mSupportMultipleWindows != support) {
72954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSupportMultipleWindows = support;
73054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
73154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
73254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
73354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
73454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
73554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if the WebView is supporting multiple windows. This means
73654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         that {@link WebChromeClient#onCreateWindow(WebView, boolean,
73754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         boolean, Message)} is implemented by the host application.
73854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
73954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean supportMultipleWindows() {
74054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSupportMultipleWindows;
74154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
74254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
74354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
74454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the underlying layout algorithm. This will cause a relayout of the
74554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * WebView.
74654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param l A LayoutAlgorithm enum specifying the algorithm to use.
74754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.LayoutAlgorithm
74854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
74954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setLayoutAlgorithm(LayoutAlgorithm l) {
75054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // XXX: This will only be affective if libwebcore was built with
75154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // ANDROID_LAYOUT defined.
75254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mLayoutAlgorithm != l) {
75354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mLayoutAlgorithm = l;
75454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
75554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
75654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
75754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
75854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
759adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Return the current layout algorithm. The default is NARROW_COLUMNS.
76054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return LayoutAlgorithm enum value describing the layout algorithm
76154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         being used.
76254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.LayoutAlgorithm
76354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
76454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized LayoutAlgorithm getLayoutAlgorithm() {
76554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mLayoutAlgorithm;
76654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
76754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
76854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
76954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the standard font family name.
77054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
77154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
77254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setStandardFontFamily(String font) {
77354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mStandardFontFamily)) {
77454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mStandardFontFamily = font;
77554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
77654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
77754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
77854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
77954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
780adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the standard font family name. The default is "sans-serif".
78154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The standard font family name as a string.
78254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
78354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getStandardFontFamily() {
78454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mStandardFontFamily;
78554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
78654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
78754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
78854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the fixed font family name.
78954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
79054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
79154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setFixedFontFamily(String font) {
79254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mFixedFontFamily)) {
79354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mFixedFontFamily = font;
79454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
79554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
79654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
79754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
79854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
799adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the fixed font family name. The default is "monospace".
80054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The fixed font family name as a string.
80154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
80254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getFixedFontFamily() {
80354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mFixedFontFamily;
80454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
80554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
80654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
80754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the sans-serif font family name.
80854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
80954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
81054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setSansSerifFontFamily(String font) {
81154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mSansSerifFontFamily)) {
81254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSansSerifFontFamily = font;
81354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
81454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
81554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
81654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
81754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
81854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Get the sans-serif font family name.
81954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The sans-serif font family name as a string.
82054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
82154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getSansSerifFontFamily() {
82254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSansSerifFontFamily;
82354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
82454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
82554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
826adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Set the serif font family name. The default is "sans-serif".
82754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
82854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
82954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setSerifFontFamily(String font) {
83054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mSerifFontFamily)) {
83154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSerifFontFamily = font;
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 serif font family name. The default is "serif".
83854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The serif font family name as a string.
83954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
84054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getSerifFontFamily() {
84154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSerifFontFamily;
84254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
84354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
84454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
84554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the cursive font family name.
84654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
84754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
84854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setCursiveFontFamily(String font) {
84954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mCursiveFontFamily)) {
85054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mCursiveFontFamily = font;
85154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
85254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
85354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
85454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
85554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
856adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the cursive font family name. The default is "cursive".
85754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The cursive font family name as a string.
85854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
85954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getCursiveFontFamily() {
86054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mCursiveFontFamily;
86154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
86254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
86354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
86454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the fantasy font family name.
86554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
86654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
86754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setFantasyFontFamily(String font) {
86854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mFantasyFontFamily)) {
86954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mFantasyFontFamily = font;
87054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
87154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
87254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
87354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
87454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
875adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the fantasy font family name. The default is "fantasy".
87654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The fantasy font family name as a string.
87754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
87854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getFantasyFontFamily() {
87954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mFantasyFontFamily;
88054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
88154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
88254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
88354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the minimum font size.
88454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
88554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
88654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
88754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setMinimumFontSize(int size) {
88854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
88954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mMinimumFontSize != size) {
89054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mMinimumFontSize = size;
89154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
89254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
89354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
89454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
89554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
896adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the minimum font size. The default is 8.
89754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
89854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
89954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getMinimumFontSize() {
90054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mMinimumFontSize;
90154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
90254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
90354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
90454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the minimum logical font size.
90554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
90654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
90754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
90854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setMinimumLogicalFontSize(int size) {
90954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
91054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mMinimumLogicalFontSize != size) {
91154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mMinimumLogicalFontSize = size;
91254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
91354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
91454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
91554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
91654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
917adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the minimum logical font size. The default is 8.
91854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
91954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
92054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getMinimumLogicalFontSize() {
92154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mMinimumLogicalFontSize;
92254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
92354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
92454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
92554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the default font size.
92654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
92754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
92854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
92954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setDefaultFontSize(int size) {
93054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
93154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mDefaultFontSize != size) {
93254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mDefaultFontSize = size;
93354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
93454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
93554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
93654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
93754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
938adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the default font size. The default is 16.
93954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
94054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
94154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getDefaultFontSize() {
94254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mDefaultFontSize;
94354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
94454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
94554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
94654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the default fixed font size.
94754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
94854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
94954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
95054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setDefaultFixedFontSize(int size) {
95154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
95254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mDefaultFixedFontSize != size) {
95354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mDefaultFixedFontSize = size;
95454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
95554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
95654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
95754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
95854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
959adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the default fixed font size. The default is 16.
96054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
96154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
96254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getDefaultFixedFontSize() {
96354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mDefaultFixedFontSize;
96454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
96554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
96654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
967097b1e777a2a29eef3938338cb0c355203bf1448Grace Kloba     * Set the number of pages cached by the WebKit for the history navigation.
968097b1e777a2a29eef3938338cb0c355203bf1448Grace Kloba     * @param size A non-negative integer between 0 (no cache) and 20 (max).
969097b1e777a2a29eef3938338cb0c355203bf1448Grace Kloba     * @hide
970097b1e777a2a29eef3938338cb0c355203bf1448Grace Kloba     */
971097b1e777a2a29eef3938338cb0c355203bf1448Grace Kloba    public synchronized void setPageCacheCapacity(int size) {
972097b1e777a2a29eef3938338cb0c355203bf1448Grace Kloba        if (size < 0) size = 0;
973097b1e777a2a29eef3938338cb0c355203bf1448Grace Kloba        if (size > 20) size = 20;
974097b1e777a2a29eef3938338cb0c355203bf1448Grace Kloba        if (mPageCacheCapacity != size) {
975097b1e777a2a29eef3938338cb0c355203bf1448Grace Kloba            mPageCacheCapacity = size;
976097b1e777a2a29eef3938338cb0c355203bf1448Grace Kloba            postSync();
977097b1e777a2a29eef3938338cb0c355203bf1448Grace Kloba        }
978097b1e777a2a29eef3938338cb0c355203bf1448Grace Kloba    }
979097b1e777a2a29eef3938338cb0c355203bf1448Grace Kloba
980097b1e777a2a29eef3938338cb0c355203bf1448Grace Kloba    /**
98154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to load image resources automatically.
98254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if the WebView should load images automatically.
98354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
98454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setLoadsImagesAutomatically(boolean flag) {
98554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mLoadsImagesAutomatically != flag) {
98654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mLoadsImagesAutomatically = flag;
98754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
98854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
98954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
99054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
99154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
99254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return true if the WebView will load image resources automatically.
993adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * The default is true.
99454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if the WebView loads images automatically.
99554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
99654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getLoadsImagesAutomatically() {
99754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mLoadsImagesAutomatically;
99854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
99954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
100054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
1001f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * Tell the WebView to block network images. This is only checked when
1002f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * {@link #getLoadsImagesAutomatically} is true. If you set the value to
1003f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * false, images will automatically be loaded. Use this api to reduce
1004f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * bandwidth only. Use {@link #setBlockNetworkLoads} if possible.
1005f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * @param flag True if the WebView should block network images.
1006f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * @see #setBlockNetworkLoads
100754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
100854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setBlockNetworkImage(boolean flag) {
100954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mBlockNetworkImage != flag) {
101054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mBlockNetworkImage = flag;
101154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
101254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
101354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
101454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
101554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
1016f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * Return true if the WebView will block network images. The default is
1017f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * false.
1018f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * @return True if the WebView blocks network images.
101954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
102054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getBlockNetworkImage() {
102154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mBlockNetworkImage;
102254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
1023adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
1024f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
1025f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * Tell the WebView to block all network load requests. If you set the
1026f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * value to false, you must call {@link android.webkit.WebView#reload} to
1027f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * fetch remote resources. This flag supercedes the value passed to
1028f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * {@link #setBlockNetworkImage}.
1029f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * @param flag True if the WebView should block all network loads.
1030f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * @see android.webkit.WebView#reload
1031f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
1032f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized void setBlockNetworkLoads(boolean flag) {
1033f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (mBlockNetworkLoads != flag) {
1034f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mBlockNetworkLoads = flag;
1035f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            verifyNetworkAccess();
1036f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1037f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
1038f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
1039f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
1040f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * Return true if the WebView will block all network loads. The default is
1041f43113f6216efacc3957fc48d9fa1c0326faccebPatrick Scott     * false.
1042f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @return True if the WebView blocks all network loads.
1043f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
1044f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized boolean getBlockNetworkLoads() {
1045f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return mBlockNetworkLoads;
1046f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
1047adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
1048adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
1049f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void verifyNetworkAccess() {
1050f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (!mBlockNetworkLoads) {
1051a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb            if (mContext.checkPermission("android.permission.INTERNET",
1052a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb                    android.os.Process.myPid(), android.os.Process.myUid()) !=
1053f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        PackageManager.PERMISSION_GRANTED) {
1054f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                throw new SecurityException
1055f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        ("Permission denied - " +
1056f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                                "application missing INTERNET permission");
1057f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
1058f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1059f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
106054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
106154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
106254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to enable javascript execution.
106354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if the WebView should execute javascript.
106454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
106554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setJavaScriptEnabled(boolean flag) {
106654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mJavaScriptEnabled != flag) {
106754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mJavaScriptEnabled = flag;
106854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
106954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
107054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
107154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
107254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
107354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to enable plugins.
107454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if the WebView should load plugins.
1075300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * @deprecated This method has been deprecated in favor of
1076300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     *             {@link #setPluginState}
107754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
1078a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb    @Deprecated
107954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setPluginsEnabled(boolean flag) {
1080300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott        setPluginState(PluginState.ON);
1081300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott    }
1082300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott
1083300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott    /**
1084300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * Tell the WebView to enable, disable, or have plugins on demand. On
1085300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * demand mode means that if a plugin exists that can handle the embedded
1086300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * content, a placeholder icon will be shown instead of the plugin. When
1087300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * the placeholder is clicked, the plugin will be enabled.
1088300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * @param state One of the PluginState values.
1089300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     */
1090300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott    public synchronized void setPluginState(PluginState state) {
1091300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott        if (mPluginState != state) {
1092300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott            mPluginState = state;
109354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
109454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
109554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
109654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
109754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
1098658ab7d787f64987d7c45aae08e5a12a073afe78Grace Kloba     * TODO: need to add @Deprecated
109954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
110054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setPluginsPath(String pluginsPath) {
110154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
110254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
110354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
11047df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * Set the path to where database storage API databases should be saved.
110518773afa64d407ebdd4bfc7bc151497d4447884dBen Murdoch     * Nota that the WebCore Database Tracker only allows the path to be set once.
11067df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * This will update WebCore when the Sync runs in the C++ side.
11077df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * @param databasePath String path to the directory where databases should
11087df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     *     be saved. May be the empty string but should never be null.
11097df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     */
11107df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    public synchronized void setDatabasePath(String databasePath) {
111118773afa64d407ebdd4bfc7bc151497d4447884dBen Murdoch        if (databasePath != null && !mDatabasePathHasBeenSet) {
11127df1985e86635af006be3dfa65987d60e290b5deBen Murdoch            mDatabasePath = databasePath;
111318773afa64d407ebdd4bfc7bc151497d4447884dBen Murdoch            mDatabasePathHasBeenSet = true;
11147df1985e86635af006be3dfa65987d60e290b5deBen Murdoch            postSync();
11157df1985e86635af006be3dfa65987d60e290b5deBen Murdoch        }
11167df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    }
11177df1985e86635af006be3dfa65987d60e290b5deBen Murdoch
11187df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    /**
11199d3273f62288fa54536a3928383588398ca2d029Steve Block     * Set the path where the Geolocation permissions database should be saved.
11209d3273f62288fa54536a3928383588398ca2d029Steve Block     * This will update WebCore when the Sync runs in the C++ side.
11219d3273f62288fa54536a3928383588398ca2d029Steve Block     * @param databasePath String path to the directory where the Geolocation
11229d3273f62288fa54536a3928383588398ca2d029Steve Block     *     permissions database should be saved. May be the empty string but
11239d3273f62288fa54536a3928383588398ca2d029Steve Block     *     should never be null.
11249d3273f62288fa54536a3928383588398ca2d029Steve Block     */
11259d3273f62288fa54536a3928383588398ca2d029Steve Block    public synchronized void setGeolocationDatabasePath(String databasePath) {
11268f5e405f60e3816f61549783782d9bf0d9d4d199Grace Kloba        if (databasePath != null
11278f5e405f60e3816f61549783782d9bf0d9d4d199Grace Kloba                && !databasePath.equals(mGeolocationDatabasePath)) {
11289d3273f62288fa54536a3928383588398ca2d029Steve Block            mGeolocationDatabasePath = databasePath;
11299d3273f62288fa54536a3928383588398ca2d029Steve Block            postSync();
11309d3273f62288fa54536a3928383588398ca2d029Steve Block        }
11319d3273f62288fa54536a3928383588398ca2d029Steve Block    }
11329d3273f62288fa54536a3928383588398ca2d029Steve Block
11339d3273f62288fa54536a3928383588398ca2d029Steve Block    /**
113460a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * Tell the WebView to enable Application Caches API.
113560a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * @param flag True if the WebView should enable Application Caches.
113660a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     */
113760a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    public synchronized void setAppCacheEnabled(boolean flag) {
113860a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu        if (mAppCacheEnabled != flag) {
113960a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu            mAppCacheEnabled = flag;
114060a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu            postSync();
114160a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu        }
114260a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    }
114360a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu
114460a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    /**
114560a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * Set a custom path to the Application Caches files. The client
114660a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * must ensure it exists before this call.
114760a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * @param appCachePath String path to the directory containing Application
114860a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * Caches files. The appCache path can be the empty string but should not
114960a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * be null. Passing null for this parameter will result in a no-op.
115060a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     */
115160a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    public synchronized void setAppCachePath(String appCachePath) {
115260a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu        if (appCachePath != null && !appCachePath.equals(mAppCachePath)) {
115360a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu            mAppCachePath = appCachePath;
115460a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu            postSync();
115560a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu        }
115660a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    }
115760a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu
115860a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    /**
11591c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu     * Set the maximum size for the Application Caches content.
11601c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu     * @param appCacheMaxSize the maximum size in bytes.
11611c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu     */
11621c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu    public synchronized void setAppCacheMaxSize(long appCacheMaxSize) {
11631c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu        if (appCacheMaxSize != mAppCacheMaxSize) {
11641c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu            mAppCacheMaxSize = appCacheMaxSize;
11651c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu            postSync();
11661c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu        }
11671c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu    }
11681c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu
11691c829208eadf175ad4600e70a14013b50a20adfeAndrei Popescu    /**
11707df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * Set whether the database storage API is enabled.
11717df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * @param flag boolean True if the WebView should use the database storage
11727df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     *     API.
11737df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     */
11747df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    public synchronized void setDatabaseEnabled(boolean flag) {
11757df1985e86635af006be3dfa65987d60e290b5deBen Murdoch       if (mDatabaseEnabled != flag) {
11767df1985e86635af006be3dfa65987d60e290b5deBen Murdoch           mDatabaseEnabled = flag;
11777df1985e86635af006be3dfa65987d60e290b5deBen Murdoch           postSync();
11787df1985e86635af006be3dfa65987d60e290b5deBen Murdoch       }
11797df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    }
11807df1985e86635af006be3dfa65987d60e290b5deBen Murdoch
11817df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    /**
1182274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * Set whether the DOM storage API is enabled.
1183274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * @param flag boolean True if the WebView should use the DOM storage
1184274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     *     API.
1185274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     */
1186274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    public synchronized void setDomStorageEnabled(boolean flag) {
1187274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch       if (mDomStorageEnabled != flag) {
1188274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch           mDomStorageEnabled = flag;
1189274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch           postSync();
1190274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch       }
1191274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    }
1192274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch
1193274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    /**
1194274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * Returns true if the DOM Storage API's are enabled.
1195274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * @return True if the DOM Storage API's are enabled.
1196274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     */
1197274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    public synchronized boolean getDomStorageEnabled() {
1198274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch       return mDomStorageEnabled;
1199274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    }
1200274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch
1201274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    /**
12027df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * Return the path to where database storage API databases are saved for
12037df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * the current WebView.
12047df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * @return the String path to the database storage API databases.
12057df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     */
12067df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    public synchronized String getDatabasePath() {
12077df1985e86635af006be3dfa65987d60e290b5deBen Murdoch        return mDatabasePath;
12087df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    }
12097df1985e86635af006be3dfa65987d60e290b5deBen Murdoch
12107df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    /**
12117df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * Returns true if database storage API is enabled.
12127df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * @return True if the database storage API is enabled.
12137df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     */
12147df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    public synchronized boolean getDatabaseEnabled() {
12157df1985e86635af006be3dfa65987d60e290b5deBen Murdoch        return mDatabaseEnabled;
12167df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    }
12177df1985e86635af006be3dfa65987d60e290b5deBen Murdoch
12187df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    /**
1219c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu     * Tell the WebView to enable WebWorkers API.
1220c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu     * @param flag True if the WebView should enable WebWorkers.
1221c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu     * Note that this flag only affects V8. JSC does not have
1222c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu     * an equivalent setting.
1223c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu     * @hide pending api council approval
1224c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu     */
1225c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    public synchronized void setWorkersEnabled(boolean flag) {
1226c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu        if (mWorkersEnabled != flag) {
1227c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu            mWorkersEnabled = flag;
1228c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu            postSync();
1229c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu        }
1230c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    }
1231c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu
1232c27a9acb3b7ec4d1845b623cc167e0b62b1d0585Andrei Popescu    /**
123306cd751b052e65c359b16cce0570b6fab305eb89Steve Block     * Sets whether Geolocation is enabled.
123406cd751b052e65c359b16cce0570b6fab305eb89Steve Block     * @param flag Whether Geolocation should be enabled.
123506cd751b052e65c359b16cce0570b6fab305eb89Steve Block     */
123606cd751b052e65c359b16cce0570b6fab305eb89Steve Block    public synchronized void setGeolocationEnabled(boolean flag) {
123706cd751b052e65c359b16cce0570b6fab305eb89Steve Block        if (mGeolocationEnabled != flag) {
123806cd751b052e65c359b16cce0570b6fab305eb89Steve Block            mGeolocationEnabled = flag;
123906cd751b052e65c359b16cce0570b6fab305eb89Steve Block            postSync();
124006cd751b052e65c359b16cce0570b6fab305eb89Steve Block        }
124106cd751b052e65c359b16cce0570b6fab305eb89Steve Block    }
124206cd751b052e65c359b16cce0570b6fab305eb89Steve Block
124306cd751b052e65c359b16cce0570b6fab305eb89Steve Block    /**
12445dc0c8253b368239a90d7176ff6325ae5ba371b3Elliott Slaughter     * Sets whether XSS Auditor is enabled.
12455dc0c8253b368239a90d7176ff6325ae5ba371b3Elliott Slaughter     * @param flag Whether XSS Auditor should be enabled.
1246be1304f0c2c96be1876c2bd38d319f46e135536fElliott Slaughter     * @hide Only used by LayoutTestController.
12475dc0c8253b368239a90d7176ff6325ae5ba371b3Elliott Slaughter     */
12485dc0c8253b368239a90d7176ff6325ae5ba371b3Elliott Slaughter    public synchronized void setXSSAuditorEnabled(boolean flag) {
12495dc0c8253b368239a90d7176ff6325ae5ba371b3Elliott Slaughter        if (mXSSAuditorEnabled != flag) {
12505dc0c8253b368239a90d7176ff6325ae5ba371b3Elliott Slaughter            mXSSAuditorEnabled = flag;
12515dc0c8253b368239a90d7176ff6325ae5ba371b3Elliott Slaughter            postSync();
12525dc0c8253b368239a90d7176ff6325ae5ba371b3Elliott Slaughter        }
12535dc0c8253b368239a90d7176ff6325ae5ba371b3Elliott Slaughter    }
12545dc0c8253b368239a90d7176ff6325ae5ba371b3Elliott Slaughter
12555dc0c8253b368239a90d7176ff6325ae5ba371b3Elliott Slaughter    /**
1256adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Return true if javascript is enabled. <b>Note: The default is false.</b>
125754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if javascript is enabled.
125854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
125954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getJavaScriptEnabled() {
126054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mJavaScriptEnabled;
126154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
126254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
126354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
126454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return true if plugins are enabled.
126554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if plugins are enabled.
1266300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * @deprecated This method has been replaced by {@link #getPluginState}
126754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
1268a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb    @Deprecated
126954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getPluginsEnabled() {
1270300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott        return mPluginState == PluginState.ON;
1271300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott    }
1272300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott
1273300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott    /**
1274300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * Return the current plugin state.
1275300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     * @return A value corresponding to the enum PluginState.
1276300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott     */
1277300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott    public synchronized PluginState getPluginState() {
1278300f2e95a4cecebb80c2c55418745df5c0c2fb6cPatrick Scott        return mPluginState;
127954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
128054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
128154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
1282658ab7d787f64987d7c45aae08e5a12a073afe78Grace Kloba     * TODO: need to add @Deprecated
128354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
128454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getPluginsPath() {
1285658ab7d787f64987d7c45aae08e5a12a073afe78Grace Kloba        return "";
128654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
128754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
128854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
128954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell javascript to open windows automatically. This applies to the
129054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * javascript function window.open().
129154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if javascript can open windows automatically.
129254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
129354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setJavaScriptCanOpenWindowsAutomatically(
129454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            boolean flag) {
129554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mJavaScriptCanOpenWindowsAutomatically != flag) {
129654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mJavaScriptCanOpenWindowsAutomatically = flag;
129754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
129854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
129954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
130054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
130154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
1302adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Return true if javascript can open windows automatically. The default
1303adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * is false.
130454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if javascript can open windows automatically during
130554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         window.open().
130654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
130754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getJavaScriptCanOpenWindowsAutomatically() {
130854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mJavaScriptCanOpenWindowsAutomatically;
130954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
131054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
131154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
131254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the default text encoding name to use when decoding html pages.
131354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param encoding The text encoding name.
131454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
131554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setDefaultTextEncodingName(String encoding) {
131654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (encoding != null && !encoding.equals(mDefaultTextEncoding)) {
131754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mDefaultTextEncoding = encoding;
131854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
131954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
132054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
132154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
132254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
1323adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the default text encoding name. The default is "Latin-1".
132454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The default text encoding name as a string.
132554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
132654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getDefaultTextEncodingName() {
132754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mDefaultTextEncoding;
132854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
132954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1330f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
1331f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Set the WebView's user-agent string. If the string "ua" is null or empty,
1332f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * it will use the system default user-agent string.
1333f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
1334f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized void setUserAgentString(String ua) {
1335f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (ua == null || ua.length() == 0) {
1336f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            synchronized(sLockForLocaleSettings) {
1337a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb                Locale currentLocale = Locale.getDefault();
1338f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                if (!sLocale.equals(currentLocale)) {
1339f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    sLocale = currentLocale;
1340f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    mAcceptLanguage = getCurrentAcceptLanguage();
1341f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                }
1342f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
1343f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            ua = getCurrentUserAgent();
1344f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mUseDefaultUserAgent = true;
1345f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else  {
1346f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mUseDefaultUserAgent = false;
1347f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1348f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
1349f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (!ua.equals(mUserAgent)) {
1350f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mUserAgent = ua;
1351f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            postSync();
1352f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1353f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
1354f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
1355f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
1356f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Return the WebView's user-agent string.
1357f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
1358f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized String getUserAgentString() {
1359f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (DESKTOP_USERAGENT.equals(mUserAgent) ||
1360f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                IPHONE_USERAGENT.equals(mUserAgent) ||
1361f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                !mUseDefaultUserAgent) {
1362f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            return mUserAgent;
1363f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1364f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
1365f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        boolean doPostSync = false;
1366f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
1367f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            Locale currentLocale = Locale.getDefault();
1368f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (!sLocale.equals(currentLocale)) {
1369f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                sLocale = currentLocale;
1370f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                mUserAgent = getCurrentUserAgent();
1371f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                mAcceptLanguage = getCurrentAcceptLanguage();
1372f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                doPostSync = true;
1373f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
1374f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1375f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (doPostSync) {
1376f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            postSync();
1377f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
137854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mUserAgent;
137954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
138054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1381f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /* package api to grab the Accept Language string. */
1382f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /*package*/ synchronized String getAcceptLanguage() {
1383f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
1384f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            Locale currentLocale = Locale.getDefault();
1385f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (!sLocale.equals(currentLocale)) {
1386f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                sLocale = currentLocale;
1387f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                mAcceptLanguage = getCurrentAcceptLanguage();
1388f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
1389f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1390f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return mAcceptLanguage;
1391f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
1392a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb
139354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
139454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView whether it needs to set a node to have focus when
139554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * {@link WebView#requestFocus(int, android.graphics.Rect)} is called.
1396a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb     *
139754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag
139854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
139954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setNeedInitialFocus(boolean flag) {
140054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mNeedInitialFocus != flag) {
140154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mNeedInitialFocus = flag;
140254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
140354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
140454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
140554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /* Package api to get the choice whether it needs to set initial focus. */
140654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /* package */ boolean getNeedInitialFocus() {
140754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mNeedInitialFocus;
140854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
140954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
141054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
141154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the priority of the Render thread. Unlike the other settings, this
1412adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * one only needs to be called once per process. The default is NORMAL.
1413adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     *
141454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param priority RenderPriority, can be normal, high or low.
141554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
141654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setRenderPriority(RenderPriority priority) {
141754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mRenderPriority != priority) {
141854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mRenderPriority = priority;
141954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mEventHandler.sendMessage(Message.obtain(null,
142054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    EventHandler.PRIORITY));
142154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
142254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
1423a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb
142454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
142554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Override the way the cache is used. The way the cache is used is based
142654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * on the navigation option. For a normal page load, the cache is checked
142754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * and content is re-validated as needed. When navigating back, content is
142854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * not revalidated, instead the content is just pulled from the cache.
142954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * This function allows the client to override this behavior.
143054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param mode One of the LOAD_ values.
143154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
143254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setCacheMode(int mode) {
143354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mode != mOverrideCacheMode) {
143454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mOverrideCacheMode = mode;
143554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
143654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
1437a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb
143854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
143954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return the current setting for overriding the cache mode. For a full
144054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * description, see the {@link #setCacheMode(int)} function.
144154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
144254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public int getCacheMode() {
144354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mOverrideCacheMode;
144454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
1445a172e7d0d96e4a4db5e2b408e8ee3e96948df9a4Michael Kolb
1446f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
1447f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * If set, webkit alternately shrinks and expands images viewed outside
1448f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * of an HTML page to fit the screen. This conflicts with attempts by
1449f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * the UI to zoom in and out of an image, so it is set false by default.
1450f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @param shrink Set true to let webkit shrink the standalone image to fit.
1451f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * {@hide}
1452f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
1453f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void setShrinksStandaloneImagesToFit(boolean shrink) {
1454f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (mShrinksStandaloneImagesToFit != shrink) {
1455f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mShrinksStandaloneImagesToFit = shrink;
1456f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            postSync();
1457f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1458f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     }
145954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1460f0785a66f0e8447c30f47a760905bc74644f5c10Cary Clark    /**
1461f0785a66f0e8447c30f47a760905bc74644f5c10Cary Clark     * Specify the maximum decoded image size. The default is
1462f0785a66f0e8447c30f47a760905bc74644f5c10Cary Clark     * 2 megs for small memory devices and 8 megs for large memory devices.
1463f0785a66f0e8447c30f47a760905bc74644f5c10Cary Clark     * @param size The maximum decoded size, or zero to set to the default.
1464f0785a66f0e8447c30f47a760905bc74644f5c10Cary Clark     * @hide pending api council approval
1465f0785a66f0e8447c30f47a760905bc74644f5c10Cary Clark     */
1466f0785a66f0e8447c30f47a760905bc74644f5c10Cary Clark    public void setMaximumDecodedImageSize(long size) {
1467f0785a66f0e8447c30f47a760905bc74644f5c10Cary Clark        if (mMaximumDecodedImageSize != size) {
1468f0785a66f0e8447c30f47a760905bc74644f5c10Cary Clark            mMaximumDecodedImageSize = size;
1469f0785a66f0e8447c30f47a760905bc74644f5c10Cary Clark            postSync();
1470f0785a66f0e8447c30f47a760905bc74644f5c10Cary Clark        }
1471f0785a66f0e8447c30f47a760905bc74644f5c10Cary Clark    }
1472f0785a66f0e8447c30f47a760905bc74644f5c10Cary Clark
1473f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba    int getDoubleTapToastCount() {
1474f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba        return mDoubleTapToastCount;
1475f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba    }
1476f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba
1477f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba    void setDoubleTapToastCount(int count) {
1478f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba        if (mDoubleTapToastCount != count) {
1479f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba            mDoubleTapToastCount = count;
1480f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba            // write the settings in the non-UI thread
1481f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba            mEventHandler.sendMessage(Message.obtain(null,
1482f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                    EventHandler.SET_DOUBLE_TAP_TOAST_COUNT));
1483f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba        }
1484f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba    }
1485f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba
148654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
148754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Transfer messages from the queue to the new WebCoreThread. Called from
148854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * WebCore thread.
148954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
149054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /*package*/
149154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    synchronized void syncSettingsAndCreateHandler(BrowserFrame frame) {
149254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mBrowserFrame = frame;
14932e5c150e746647a1ce5c10e1708debbf06c45ea7Derek Sollenberger        if (DebugFlags.WEB_SETTINGS) {
149454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            junit.framework.Assert.assertTrue(frame.mNativeFrame != 0);
149554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
1496dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu
1497f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba        SharedPreferences sp = mContext.getSharedPreferences(PREF_FILE,
1498f8d8b46a2c684d51cd661a9d479dd895420a90b2Grace Kloba                Context.MODE_PRIVATE);
149924a3ff958b87550904a71961835f6883d1411c27Grace Kloba        if (mDoubleTapToastCount > 0) {
150024a3ff958b87550904a71961835f6883d1411c27Grace Kloba            mDoubleTapToastCount = sp.getInt(DOUBLE_TAP_TOAST_COUNT,
150124a3ff958b87550904a71961835f6883d1411c27Grace Kloba                    mDoubleTapToastCount);
150224a3ff958b87550904a71961835f6883d1411c27Grace Kloba        }
150354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        nativeSync(frame.mNativeFrame);
150454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSyncPending = false;
150554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mEventHandler.createHandler();
150654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
150754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1508dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu    /**
1509dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu     * Let the Settings object know that our owner is being destroyed.
1510dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu     */
1511dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu    /*package*/
1512dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu    synchronized void onDestroyed() {
1513dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu    }
1514dee76be487fcdc975877f85221a693b87b9669a7Andrei Popescu
151554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int pin(int size) {
151654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // FIXME: 72 is just an arbitrary max text size value.
151754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (size < 1) {
151854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 1;
151954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else if (size > 72) {
152054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 72;
152154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
152254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return size;
152354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
152454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
152554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /* Post a SYNC message to handle syncing the native settings. */
152654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private synchronized void postSync() {
152754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Only post if a sync is not pending
152854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (!mSyncPending) {
152954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSyncPending = mEventHandler.sendMessage(
153054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    Message.obtain(null, EventHandler.SYNC));
153154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
153254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
153354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
153454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Synchronize the native and java settings.
153554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private native void nativeSync(int nativeFrame);
153654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
1537