WebSettings.java revision adcd2ed8d24deddee528e96260d0ed673eeb261c
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;
2054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.Build;
2154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.Handler;
2254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.Message;
23f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Projectimport java.lang.SecurityException;
24f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Projectimport android.content.pm.PackageManager;
2554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
2654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.util.Locale;
2754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
2854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/**
2954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Manages settings state for a WebView. When a WebView is first created, it
3054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * obtains a set of default settings. These default settings will be returned
3154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * from any getter call. A WebSettings object obtained from
3254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * WebView.getSettings() is tied to the life of the WebView. If a WebView has
3354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * been destroyed, any method call on WebSettings will throw an
3454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * IllegalStateException.
3554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */
3654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectpublic class WebSettings {
3754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
3854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enum for controlling the layout of html.
3954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * NORMAL means no rendering changes.
4054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * SINGLE_COLUMN moves all content into one column that is the width of the
4154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * view.
4254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * NARROW_COLUMNS makes all columns no wider than the screen if possible.
4354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
4454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // XXX: These must match LayoutAlgorithm in Settings.h in WebCore.
4554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public enum LayoutAlgorithm {
4654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        NORMAL,
4754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SINGLE_COLUMN,
4854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        NARROW_COLUMNS
4954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
5054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
5154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
5254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enum for specifying the text size.
5354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * SMALLEST is 50%
5454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * SMALLER is 75%
5554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * NORMAL is 100%
5654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * LARGER is 150%
5754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * LARGEST is 200%
5854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
5954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public enum TextSize {
6054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SMALLEST(50),
6154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SMALLER(75),
6254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        NORMAL(100),
6354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        LARGER(150),
6454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        LARGEST(200);
6554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        TextSize(int size) {
6654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            value = size;
6754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
6854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        int value;
6954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
7054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
7154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
7254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Default cache usage pattern  Use with {@link #setCacheMode}.
7354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
7454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int LOAD_DEFAULT = -1;
7554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
7654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
7754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Normal cache usage pattern  Use with {@link #setCacheMode}.
7854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
7954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int LOAD_NORMAL = 0;
8054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
8154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
8254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Use cache if content is there, even if expired (eg, history nav)
8354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * If it is not in the cache, load from network.
8454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Use with {@link #setCacheMode}.
8554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
8654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int LOAD_CACHE_ELSE_NETWORK = 1;
8754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
8854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
8954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Don't use the cache, load from network
9054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Use with {@link #setCacheMode}.
9154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
9254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int LOAD_NO_CACHE = 2;
9354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
9454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
9554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Don't use the network, load from cache only.
9654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Use with {@link #setCacheMode}.
9754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
9854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int LOAD_CACHE_ONLY = 3;
9954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
10054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public enum RenderPriority {
10154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        NORMAL,
10254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        HIGH,
10354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        LOW
10454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
10554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
10654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // BrowserFrame used to access the native frame pointer.
10754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private BrowserFrame mBrowserFrame;
10854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Flag to prevent multiple SYNC messages at one time.
10954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean mSyncPending = false;
11054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Custom handler that queues messages until the WebCore thread is active.
11154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private final EventHandler mEventHandler;
112adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
11354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Private settings so we don't have to go into native code to
11454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // retrieve the values. After setXXX, postSync() needs to be called.
115adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    //
116adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    // The default values need to match those in WebSettings.cpp
117adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    // If the defaults change, please also update the JavaDocs so developers
118adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    // know what they are.
11954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private LayoutAlgorithm mLayoutAlgorithm = LayoutAlgorithm.NARROW_COLUMNS;
120f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private Context         mContext;
12154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private TextSize        mTextSize = TextSize.NORMAL;
12254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mStandardFontFamily = "sans-serif";
12354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mFixedFontFamily = "monospace";
12454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mSansSerifFontFamily = "sans-serif";
12554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mSerifFontFamily = "serif";
12654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mCursiveFontFamily = "cursive";
12754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mFantasyFontFamily = "fantasy";
12854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mDefaultTextEncoding = "Latin-1";
129f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private String          mUserAgent;
130f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private boolean         mUseDefaultUserAgent;
131f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private String          mAcceptLanguage;
13254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mPluginsPath = "";
13354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mMinimumFontSize = 8;
13454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mMinimumLogicalFontSize = 8;
13554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mDefaultFontSize = 16;
13654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mDefaultFixedFontSize = 13;
13754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mLoadsImagesAutomatically = true;
13854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mBlockNetworkImage = false;
139f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private boolean         mBlockNetworkLoads = false;
14054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mJavaScriptEnabled = false;
14154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mPluginsEnabled = false;
14254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mJavaScriptCanOpenWindowsAutomatically = false;
14354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mUseDoubleTree = false;
14454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mUseWideViewport = false;
14554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSupportMultipleWindows = false;
146f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private boolean         mShrinksStandaloneImagesToFit = false;
14754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Don't need to synchronize the get/set methods as they
14854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // are basic types, also none of these values are used in
14954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // native WebCore code.
15054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private RenderPriority  mRenderPriority = RenderPriority.NORMAL;
15154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mOverrideCacheMode = LOAD_DEFAULT;
15254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSaveFormData = true;
15354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSavePassword = true;
15454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mLightTouchEnabled = false;
15554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mNeedInitialFocus = true;
15654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mNavDump = false;
15754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSupportZoom = true;
158f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private boolean         mAllowFileAccess = true;
15954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
16054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Class to handle messages before WebCore is ready.
16154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private class EventHandler {
16254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Message id for syncing
16354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        static final int SYNC = 0;
16454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Message id for setting priority
16554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        static final int PRIORITY = 1;
16654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Actual WebCore thread handler
16754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private Handler mHandler;
16854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
16954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private synchronized void createHandler() {
17054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // as mRenderPriority can be set before thread is running, sync up
17154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            setRenderPriority();
17254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
17354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // create a new handler
17454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mHandler = new Handler() {
17554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                @Override
17654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                public void handleMessage(Message msg) {
17754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    switch (msg.what) {
17854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        case SYNC:
17954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            synchronized (WebSettings.this) {
18054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                if (mBrowserFrame.mNativeFrame != 0) {
18154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                    nativeSync(mBrowserFrame.mNativeFrame);
18254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                }
18354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                mSyncPending = false;
18454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            }
18554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            break;
18654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
18754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        case PRIORITY: {
18854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            setRenderPriority();
18954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            break;
19054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        }
19154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    }
19254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
19354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            };
19454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
19554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
19654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private void setRenderPriority() {
19754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            synchronized (WebSettings.this) {
19854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (mRenderPriority == RenderPriority.NORMAL) {
19954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    android.os.Process.setThreadPriority(
20054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_DEFAULT);
20154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } else if (mRenderPriority == RenderPriority.HIGH) {
20254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    android.os.Process.setThreadPriority(
20354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_FOREGROUND +
20454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_LESS_FAVORABLE);
20554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } else if (mRenderPriority == RenderPriority.LOW) {
20654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    android.os.Process.setThreadPriority(
20754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_BACKGROUND);
20854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
20954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
21054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
21154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
21254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
21354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Send a message to the private queue or handler.
21454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
21554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private synchronized boolean sendMessage(Message msg) {
21654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (mHandler != null) {
21754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                mHandler.sendMessage(msg);
21854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return true;
21954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } else {
22054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return false;
22154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
22254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
22354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
22454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
22554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // User agent strings.
22654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private static final String DESKTOP_USERAGENT =
227f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en)"
228f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            + " AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2"
229f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            + " Safari/525.20.1";
230f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private static final String IPHONE_USERAGENT =
231f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            "Mozilla/5.0 (iPhone; U; CPU iPhone 2_1 like Mac OS X; en)"
232f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            + " AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2"
233f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            + " Mobile/5F136 Safari/525.20.1";
234f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private static Locale sLocale;
235f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private static Object sLockForLocaleSettings;
236f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
23754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
23854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Package constructor to prevent clients from creating a new settings
23954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * instance.
24054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
241f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    WebSettings(Context context) {
242f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mEventHandler = new EventHandler();
243f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mContext = context;
244f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
245f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (sLockForLocaleSettings == null) {
246f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            sLockForLocaleSettings = new Object();
247f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            sLocale = Locale.getDefault();
248f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
249f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mAcceptLanguage = getCurrentAcceptLanguage();
250f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mUserAgent = getCurrentUserAgent();
251f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mUseDefaultUserAgent = true;
252f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
253f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        verifyNetworkAccess();
254f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
255f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
256f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
257f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Looks at sLocale and returns current AcceptLanguage String.
258f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @return Current AcceptLanguage String.
259f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
260f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private String getCurrentAcceptLanguage() {
261f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Locale locale;
262f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
263f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            locale = sLocale;
264f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
265f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        StringBuffer buffer = new StringBuffer();
266f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String language = locale.getLanguage();
267f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (language != null) {
268f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append(language);
269f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            final String country = locale.getCountry();
270f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (country != null) {
271f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append("-");
272f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append(country);
27354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
274f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
275f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (!locale.equals(Locale.US)) {
276f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append(", ");
277f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            java.util.Locale us = Locale.US;
278f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (us.getLanguage() != null) {
279f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append(us.getLanguage());
280f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                final String country = us.getCountry();
28154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (country != null) {
282f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    buffer.append("-");
283f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    buffer.append(country);
28454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
28554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
286f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
287f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
288f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return buffer.toString();
289f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
290f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
291f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
292f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Looks at sLocale and mContext and returns current UserAgent String.
293f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @return Current UserAgent String.
294f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
295f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private synchronized String getCurrentUserAgent() {
296f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Locale locale;
297f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
298f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            locale = sLocale;
299f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
300f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        StringBuffer buffer = new StringBuffer();
301f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // Add version
302f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String version = Build.VERSION.RELEASE;
303f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (version.length() > 0) {
304f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append(version);
305f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else {
306f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // default to "1.0"
307f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append("1.0");
308f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
309f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        buffer.append("; ");
310f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String language = locale.getLanguage();
311f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (language != null) {
312f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append(language.toLowerCase());
313f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            final String country = locale.getCountry();
314f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (country != null) {
315f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append("-");
316f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append(country.toLowerCase());
31754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
318f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else {
319f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // default to "en"
320f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append("en");
32154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
322f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
323f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String device = Build.DEVICE;
324f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (device.length() > 0) {
325f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append("; ");
326f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append(device);
327f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
328f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String base = mContext.getResources().getText(
329f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                com.android.internal.R.string.web_user_agent).toString();
330f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return String.format(base, buffer);
33154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
332f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
33354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
33454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enables dumping the pages navigation cache to a text file.
33554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
33654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setNavDump(boolean enabled) {
33754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mNavDump = enabled;
33854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
33954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
34054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
34154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Returns true if dumping the navigation cache is enabled.
34254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
34354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getNavDump() {
34454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mNavDump;
34554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
34654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
34754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
34854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set whether the WebView supports zoom
34954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
35054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setSupportZoom(boolean support) {
35154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSupportZoom = support;
35254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
35354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
35454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
35554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Returns whether the WebView supports zoom
35654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
35754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean supportZoom() {
35854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSupportZoom;
35954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
36054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
36154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
362f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Enable or disable file access within WebView. File access is enabled by
363f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * default.
364f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
365f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void setAllowFileAccess(boolean allow) {
366f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mAllowFileAccess = allow;
367f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
368f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
369f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
370f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Returns true if this WebView supports file access.
371f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
372f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public boolean getAllowFileAccess() {
373f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return mAllowFileAccess;
374f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
375f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
376f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
37754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Store whether the WebView is saving form data.
37854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
37954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setSaveFormData(boolean save) {
38054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSaveFormData = save;
38154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
38254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
38354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
38454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *  Return whether the WebView is saving form data.
38554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
38654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getSaveFormData() {
38754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSaveFormData;
38854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
38954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
39054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
39154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *  Store whether the WebView is saving password.
39254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
39354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setSavePassword(boolean save) {
39454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSavePassword = save;
39554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
39654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
39754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
39854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *  Return whether the WebView is saving password.
39954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
40054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getSavePassword() {
40154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSavePassword;
40254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
40354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
40454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
40554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the text size of the page.
40654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param t A TextSize value for increasing or decreasing the text.
40754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.TextSize
40854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
40954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setTextSize(TextSize t) {
41054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mTextSize = t;
41154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        postSync();
41254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
41354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
41454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
41554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Get the text size of the page.
41654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A TextSize enum value describing the text size.
41754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.TextSize
41854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
41954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized TextSize getTextSize() {
42054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mTextSize;
42154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
42254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
42354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
42454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enables using light touches to make a selection and activate mouseovers.
42554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
42654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setLightTouchEnabled(boolean enabled) {
42754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mLightTouchEnabled = enabled;
42854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
42954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
43054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
43154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Returns true if light touches are enabled.
43254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
43354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getLightTouchEnabled() {
43454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mLightTouchEnabled;
43554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
43654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
43754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
438adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * @deprecated This setting controlled a rendering optimization
439adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * that is no longer present. Setting it now has no effect.
44054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
441adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    @Deprecated
44254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setUseDoubleTree(boolean use) {
443adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn        return;
44454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
44554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
44654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
447adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * @deprecated This setting controlled a rendering optimization
448adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * that is no longer present. Setting it now has no effect.
44954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
450adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    @Deprecated
45154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getUseDoubleTree() {
452adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn        return false;
45354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
45454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
45554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
45654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView about user-agent string.
45754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param ua 0 if the WebView should use an Android user-agent string,
45854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *           1 if the WebView should use a desktop user-agent string.
459f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     *
460f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @deprecated Please use setUserAgentString instead.
46154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
462f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @Deprecated
46354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setUserAgent(int ua) {
464f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        String uaString = null;
465f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (ua == 1) {
466f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (DESKTOP_USERAGENT.equals(mUserAgent)) {
467f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                return; // do nothing
468f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } else {
469f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                uaString = DESKTOP_USERAGENT;
470f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
471f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else if (ua == 2) {
472f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (IPHONE_USERAGENT.equals(mUserAgent)) {
473f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                return; // do nothing
474f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } else {
475f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                uaString = IPHONE_USERAGENT;
476f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
477f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else if (ua != 0) {
478f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            return; // do nothing
47954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
480f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        setUserAgentString(uaString);
48154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
48254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
48354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
48454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return user-agent as int
48554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return int  0 if the WebView is using an Android user-agent string.
48654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *              1 if the WebView is using a desktop user-agent string.
487f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     *             -1 if the WebView is using user defined user-agent string.
488f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     *
489f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @deprecated Please use getUserAgentString instead.
49054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
491f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @Deprecated
49254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getUserAgent() {
49354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (DESKTOP_USERAGENT.equals(mUserAgent)) {
49454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 1;
49554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else if (IPHONE_USERAGENT.equals(mUserAgent)) {
49654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 2;
497f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else if (mUseDefaultUserAgent) {
498f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            return 0;
49954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
500f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return -1;
50154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
50254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
50354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
50454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to use the wide viewport
50554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
50654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setUseWideViewPort(boolean use) {
50754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mUseWideViewport != use) {
50854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mUseWideViewport = use;
50954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
51054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
51154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
51254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
51354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
51454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if the WebView is using a wide viewport
51554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
51654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getUseWideViewPort() {
51754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mUseWideViewport;
51854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
51954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
52054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
52154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView whether it supports multiple windows. TRUE means
52254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         that {@link WebChromeClient#onCreateWindow(WebView, boolean,
52354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         boolean, Message)} is implemented by the host application.
52454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
52554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setSupportMultipleWindows(boolean support) {
52654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mSupportMultipleWindows != support) {
52754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSupportMultipleWindows = support;
52854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
52954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
53054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
53154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
53254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
53354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if the WebView is supporting multiple windows. This means
53454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         that {@link WebChromeClient#onCreateWindow(WebView, boolean,
53554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         boolean, Message)} is implemented by the host application.
53654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
53754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean supportMultipleWindows() {
53854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSupportMultipleWindows;
53954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
54054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
54154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
54254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the underlying layout algorithm. This will cause a relayout of the
54354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * WebView.
54454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param l A LayoutAlgorithm enum specifying the algorithm to use.
54554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.LayoutAlgorithm
54654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
54754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setLayoutAlgorithm(LayoutAlgorithm l) {
54854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // XXX: This will only be affective if libwebcore was built with
54954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // ANDROID_LAYOUT defined.
55054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mLayoutAlgorithm != l) {
55154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mLayoutAlgorithm = l;
55254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
55354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
55454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
55554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
55654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
557adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Return the current layout algorithm. The default is NARROW_COLUMNS.
55854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return LayoutAlgorithm enum value describing the layout algorithm
55954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         being used.
56054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.LayoutAlgorithm
56154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
56254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized LayoutAlgorithm getLayoutAlgorithm() {
56354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mLayoutAlgorithm;
56454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
56554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
56654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
56754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the standard font family name.
56854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
56954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
57054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setStandardFontFamily(String font) {
57154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mStandardFontFamily)) {
57254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mStandardFontFamily = font;
57354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
57454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
57554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
57654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
57754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
578adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the standard font family name. The default is "sans-serif".
57954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The standard font family name as a string.
58054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
58154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getStandardFontFamily() {
58254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mStandardFontFamily;
58354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
58454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
58554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
58654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the fixed font family name.
58754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
58854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
58954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setFixedFontFamily(String font) {
59054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mFixedFontFamily)) {
59154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mFixedFontFamily = font;
59254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
59354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
59454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
59554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
59654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
597adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the fixed font family name. The default is "monospace".
59854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The fixed font family name as a string.
59954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
60054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getFixedFontFamily() {
60154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mFixedFontFamily;
60254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
60354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
60454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
60554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the sans-serif font family name.
60654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
60754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
60854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setSansSerifFontFamily(String font) {
60954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mSansSerifFontFamily)) {
61054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSansSerifFontFamily = font;
61154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
61254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
61354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
61454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
61554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
61654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Get the sans-serif font family name.
61754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The sans-serif font family name as a string.
61854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
61954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getSansSerifFontFamily() {
62054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSansSerifFontFamily;
62154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
62254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
62354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
624adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Set the serif font family name. The default is "sans-serif".
62554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
62654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
62754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setSerifFontFamily(String font) {
62854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mSerifFontFamily)) {
62954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSerifFontFamily = font;
63054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
63154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
63254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
63354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
63454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
635adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the serif font family name. The default is "serif".
63654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The serif font family name as a string.
63754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
63854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getSerifFontFamily() {
63954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSerifFontFamily;
64054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
64154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
64254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
64354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the cursive font family name.
64454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
64554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
64654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setCursiveFontFamily(String font) {
64754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mCursiveFontFamily)) {
64854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mCursiveFontFamily = font;
64954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
65054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
65154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
65254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
65354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
654adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the cursive font family name. The default is "cursive".
65554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The cursive font family name as a string.
65654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
65754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getCursiveFontFamily() {
65854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mCursiveFontFamily;
65954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
66054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
66154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
66254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the fantasy font family name.
66354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
66454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
66554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setFantasyFontFamily(String font) {
66654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mFantasyFontFamily)) {
66754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mFantasyFontFamily = font;
66854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
66954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
67054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
67154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
67254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
673adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the fantasy font family name. The default is "fantasy".
67454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The fantasy font family name as a string.
67554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
67654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getFantasyFontFamily() {
67754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mFantasyFontFamily;
67854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
67954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
68054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
68154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the minimum font size.
68254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
68354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
68454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
68554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setMinimumFontSize(int size) {
68654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
68754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mMinimumFontSize != size) {
68854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mMinimumFontSize = size;
68954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
69054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
69154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
69254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
69354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
694adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the minimum font size. The default is 8.
69554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
69654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
69754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getMinimumFontSize() {
69854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mMinimumFontSize;
69954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
70054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
70154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
70254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the minimum logical font size.
70354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
70454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
70554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
70654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setMinimumLogicalFontSize(int size) {
70754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
70854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mMinimumLogicalFontSize != size) {
70954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mMinimumLogicalFontSize = size;
71054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
71154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
71254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
71354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
71454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
715adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the minimum logical font size. The default is 8.
71654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
71754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
71854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getMinimumLogicalFontSize() {
71954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mMinimumLogicalFontSize;
72054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
72154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
72254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
72354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the default font size.
72454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
72554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
72654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
72754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setDefaultFontSize(int size) {
72854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
72954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mDefaultFontSize != size) {
73054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mDefaultFontSize = size;
73154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
73254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
73354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
73454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
73554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
736adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the default font size. The default is 16.
73754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
73854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
73954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getDefaultFontSize() {
74054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mDefaultFontSize;
74154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
74254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
74354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
74454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the default fixed font size.
74554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
74654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
74754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
74854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setDefaultFixedFontSize(int size) {
74954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
75054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mDefaultFixedFontSize != size) {
75154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mDefaultFixedFontSize = size;
75254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
75354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
75454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
75554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
75654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
757adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the default fixed font size. The default is 16.
75854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
75954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
76054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getDefaultFixedFontSize() {
76154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mDefaultFixedFontSize;
76254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
76354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
76454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
76554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to load image resources automatically.
76654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if the WebView should load images automatically.
76754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
76854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setLoadsImagesAutomatically(boolean flag) {
76954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mLoadsImagesAutomatically != flag) {
77054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mLoadsImagesAutomatically = flag;
77154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
77254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
77354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
77454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
77554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
77654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return true if the WebView will load image resources automatically.
777adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * The default is true.
77854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if the WebView loads images automatically.
77954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
78054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getLoadsImagesAutomatically() {
78154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mLoadsImagesAutomatically;
78254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
78354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
78454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
78554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to block network image. This is only checked when
78654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * getLoadsImagesAutomatically() is true.
78754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if the WebView should block network image
78854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
78954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setBlockNetworkImage(boolean flag) {
79054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mBlockNetworkImage != flag) {
79154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mBlockNetworkImage = flag;
79254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
79354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
79454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
79554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
79654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
797adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Return true if the WebView will block network image. The default is false.
79854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if the WebView blocks network image.
79954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
80054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getBlockNetworkImage() {
80154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mBlockNetworkImage;
80254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
803adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
804f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
805f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @hide
806adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Tell the WebView to block all network load requests.
807f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @param flag True if the WebView should block all network loads
808f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
809f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized void setBlockNetworkLoads(boolean flag) {
810f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (mBlockNetworkLoads != flag) {
811f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mBlockNetworkLoads = flag;
812f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            verifyNetworkAccess();
813f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
814f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
815f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
816f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
817f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @hide
818f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Return true if the WebView will block all network loads.
819adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * The default is false.
820f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @return True if the WebView blocks all network loads.
821f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
822f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized boolean getBlockNetworkLoads() {
823f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return mBlockNetworkLoads;
824f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
825adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
826adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
827f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void verifyNetworkAccess() {
828f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (!mBlockNetworkLoads) {
829f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (mContext.checkPermission("android.permission.INTERNET",
830f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    android.os.Process.myPid(), 0) !=
831f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        PackageManager.PERMISSION_GRANTED) {
832f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                throw new SecurityException
833f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        ("Permission denied - " +
834f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                                "application missing INTERNET permission");
835f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
836f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
837f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
83854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
83954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
84054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to enable javascript execution.
84154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if the WebView should execute javascript.
84254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
84354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setJavaScriptEnabled(boolean flag) {
84454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mJavaScriptEnabled != flag) {
84554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mJavaScriptEnabled = flag;
84654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
84754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
84854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
84954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
85054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
85154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to enable plugins.
85254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if the WebView should load plugins.
85354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
85454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setPluginsEnabled(boolean flag) {
85554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mPluginsEnabled != flag) {
85654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mPluginsEnabled = flag;
85754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
85854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
85954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
86054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
86154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
86254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set a custom path to plugins used by the WebView. The client
86354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * must ensure it exists before this call.
86454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param pluginsPath String path to the directory containing plugins.
86554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
86654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setPluginsPath(String pluginsPath) {
86754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (pluginsPath != null && !pluginsPath.equals(mPluginsPath)) {
86854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mPluginsPath = pluginsPath;
86954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
87054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
87154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
87254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
87354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
874adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Return true if javascript is enabled. <b>Note: The default is false.</b>
87554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if javascript is enabled.
87654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
87754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getJavaScriptEnabled() {
87854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mJavaScriptEnabled;
87954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
88054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
88154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
88254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return true if plugins are enabled.
88354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if plugins are enabled.
88454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
88554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getPluginsEnabled() {
88654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mPluginsEnabled;
88754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
88854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
88954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
89054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return the current path used for plugins in the WebView.
89154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The string path to the WebView plugins.
89254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
89354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getPluginsPath() {
89454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mPluginsPath;
89554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
89654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
89754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
89854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell javascript to open windows automatically. This applies to the
89954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * javascript function window.open().
90054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if javascript can open windows automatically.
90154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
90254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setJavaScriptCanOpenWindowsAutomatically(
90354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            boolean flag) {
90454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mJavaScriptCanOpenWindowsAutomatically != flag) {
90554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mJavaScriptCanOpenWindowsAutomatically = flag;
90654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
90754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
90854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
90954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
91054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
911adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Return true if javascript can open windows automatically. The default
912adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * is false.
91354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if javascript can open windows automatically during
91454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         window.open().
91554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
91654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getJavaScriptCanOpenWindowsAutomatically() {
91754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mJavaScriptCanOpenWindowsAutomatically;
91854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
91954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
92054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
92154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the default text encoding name to use when decoding html pages.
92254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param encoding The text encoding name.
92354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
92454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setDefaultTextEncodingName(String encoding) {
92554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (encoding != null && !encoding.equals(mDefaultTextEncoding)) {
92654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mDefaultTextEncoding = encoding;
92754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
92854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
92954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
93054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
93154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
932adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the default text encoding name. The default is "Latin-1".
93354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The default text encoding name as a string.
93454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
93554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getDefaultTextEncodingName() {
93654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mDefaultTextEncoding;
93754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
93854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
939f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
940f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Set the WebView's user-agent string. If the string "ua" is null or empty,
941f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * it will use the system default user-agent string.
942f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
943f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized void setUserAgentString(String ua) {
944f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (ua == null || ua.length() == 0) {
945f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            synchronized(sLockForLocaleSettings) {
946f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                Locale currentLocale = Locale.getDefault();
947f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                if (!sLocale.equals(currentLocale)) {
948f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    sLocale = currentLocale;
949f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    mAcceptLanguage = getCurrentAcceptLanguage();
950f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                }
951f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
952f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            ua = getCurrentUserAgent();
953f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mUseDefaultUserAgent = true;
954f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else  {
955f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mUseDefaultUserAgent = false;
956f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
957f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
958f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (!ua.equals(mUserAgent)) {
959f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mUserAgent = ua;
960f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            postSync();
961f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
962f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
963f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
964f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
965f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Return the WebView's user-agent string.
966f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
967f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized String getUserAgentString() {
968f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (DESKTOP_USERAGENT.equals(mUserAgent) ||
969f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                IPHONE_USERAGENT.equals(mUserAgent) ||
970f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                !mUseDefaultUserAgent) {
971f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            return mUserAgent;
972f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
973f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
974f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        boolean doPostSync = false;
975f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
976f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            Locale currentLocale = Locale.getDefault();
977f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (!sLocale.equals(currentLocale)) {
978f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                sLocale = currentLocale;
979f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                mUserAgent = getCurrentUserAgent();
980f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                mAcceptLanguage = getCurrentAcceptLanguage();
981f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                doPostSync = true;
982f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
983f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
984f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (doPostSync) {
985f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            postSync();
986f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
98754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mUserAgent;
98854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
98954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
990f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /* package api to grab the Accept Language string. */
991f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /*package*/ synchronized String getAcceptLanguage() {
992f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
993f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            Locale currentLocale = Locale.getDefault();
994f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (!sLocale.equals(currentLocale)) {
995f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                sLocale = currentLocale;
996f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                mAcceptLanguage = getCurrentAcceptLanguage();
997f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
998f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
999f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return mAcceptLanguage;
1000f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
1001f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
100254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
100354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView whether it needs to set a node to have focus when
100454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * {@link WebView#requestFocus(int, android.graphics.Rect)} is called.
100554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *
100654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag
100754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
100854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setNeedInitialFocus(boolean flag) {
100954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mNeedInitialFocus != flag) {
101054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mNeedInitialFocus = flag;
101154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
101254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
101354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
101454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /* Package api to get the choice whether it needs to set initial focus. */
101554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /* package */ boolean getNeedInitialFocus() {
101654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mNeedInitialFocus;
101754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
101854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
101954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
102054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the priority of the Render thread. Unlike the other settings, this
1021adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * one only needs to be called once per process. The default is NORMAL.
1022adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     *
102354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param priority RenderPriority, can be normal, high or low.
102454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
102554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setRenderPriority(RenderPriority priority) {
102654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mRenderPriority != priority) {
102754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mRenderPriority = priority;
102854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mEventHandler.sendMessage(Message.obtain(null,
102954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    EventHandler.PRIORITY));
103054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
103154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
103254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
103354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
103454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Override the way the cache is used. The way the cache is used is based
103554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * on the navigation option. For a normal page load, the cache is checked
103654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * and content is re-validated as needed. When navigating back, content is
103754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * not revalidated, instead the content is just pulled from the cache.
103854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * This function allows the client to override this behavior.
103954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param mode One of the LOAD_ values.
104054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
104154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setCacheMode(int mode) {
104254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mode != mOverrideCacheMode) {
104354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mOverrideCacheMode = mode;
104454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
104554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
104654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
104754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
104854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return the current setting for overriding the cache mode. For a full
104954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * description, see the {@link #setCacheMode(int)} function.
105054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
105154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public int getCacheMode() {
105254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mOverrideCacheMode;
105354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
1054f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
1055f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
1056f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * If set, webkit alternately shrinks and expands images viewed outside
1057f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * of an HTML page to fit the screen. This conflicts with attempts by
1058f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * the UI to zoom in and out of an image, so it is set false by default.
1059f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @param shrink Set true to let webkit shrink the standalone image to fit.
1060f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * {@hide}
1061f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
1062f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void setShrinksStandaloneImagesToFit(boolean shrink) {
1063f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (mShrinksStandaloneImagesToFit != shrink) {
1064f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mShrinksStandaloneImagesToFit = shrink;
1065f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            postSync();
1066f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1067f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     }
106854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
106954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
107054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Transfer messages from the queue to the new WebCoreThread. Called from
107154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * WebCore thread.
107254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
107354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /*package*/
107454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    synchronized void syncSettingsAndCreateHandler(BrowserFrame frame) {
107554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mBrowserFrame = frame;
107654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (android.util.Config.DEBUG) {
107754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            junit.framework.Assert.assertTrue(frame.mNativeFrame != 0);
107854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
107954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        nativeSync(frame.mNativeFrame);
108054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSyncPending = false;
108154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mEventHandler.createHandler();
108254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
108354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
108454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int pin(int size) {
108554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // FIXME: 72 is just an arbitrary max text size value.
108654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (size < 1) {
108754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 1;
108854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else if (size > 72) {
108954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 72;
109054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
109154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return size;
109254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
109354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
109454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /* Post a SYNC message to handle syncing the native settings. */
109554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private synchronized void postSync() {
109654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Only post if a sync is not pending
109754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (!mSyncPending) {
109854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSyncPending = mEventHandler.sendMessage(
109954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    Message.obtain(null, EventHandler.SYNC));
110054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
110154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
110254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
110354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Synchronize the native and java settings.
110454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private native void nativeSync(int nativeFrame);
110554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
1106