10c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project/*
235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck * Copyright (C) 2011 The Android Open Source Project
30c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project *
40c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
50c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * you may not use this file except in compliance with the License.
60c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * You may obtain a copy of the License at
70c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project *
80c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
90c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project *
100c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
110c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
120c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * See the License for the specific language governing permissions and
140c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * limitations under the License.
150c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project */
160c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
170c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectpackage com.android.browser;
180c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
199804c433f5c73877e3b529eeee0e60d5395014e7Grace Klobaimport android.app.ActivityManager;
200c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.content.ContentResolver;
210c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.content.Context;
220c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.content.SharedPreferences;
231da8188e950f6e68e1edd44fb5b5dbfc8cc2c349John Reckimport android.content.SharedPreferences.Editor;
24812d2d690ffa918a6e9f43da0967e43657ef817cJohn Reckimport android.content.SharedPreferences.OnSharedPreferenceChangeListener;
2596497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Leaseimport android.net.ConnectivityManager;
2696497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Leaseimport android.net.NetworkInfo;
27f48314fcba4d6ddda8abf2e30f94112542363ca5John Reckimport android.os.Build;
2823da30e29c15ac47aab3fa7ec7091d22dbf86177Ben Murdochimport android.os.Message;
290cb8189efd19242f4b2962378bf32de122dafde0Ben Murdochimport android.preference.PreferenceManager;
300cb8189efd19242f4b2962378bf32de122dafde0Ben Murdochimport android.provider.Browser;
31825fba7eb4dae7911f84d8a48a662c4cd6a4db1fMathew Inwoodimport android.provider.Settings;
325ba3c76b201c4448de4b520f2aee2e7d99fc712dJohn Reckimport android.util.DisplayMetrics;
330c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.webkit.CookieManager;
34f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Blockimport android.webkit.GeolocationPermissions;
350c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.webkit.WebIconDatabase;
360c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.webkit.WebSettings;
3735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reckimport android.webkit.WebSettings.LayoutAlgorithm;
3835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reckimport android.webkit.WebSettings.PluginState;
3935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reckimport android.webkit.WebSettings.TextSize;
4035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reckimport android.webkit.WebSettings.ZoomDensity;
414d2fcaba7fb8eb1723943ac9a10e76d509330bd1Jonathan Dixonimport android.webkit.WebSettingsClassic;
424d2fcaba7fb8eb1723943ac9a10e76d509330bd1Jonathan Dixonimport android.webkit.WebSettingsClassic.AutoFillProfile;
4378a98e459323f938e97789a6131beddbebb459ceNicolas Roardimport android.webkit.WebStorage;
44812d2d690ffa918a6e9f43da0967e43657ef817cJohn Reckimport android.webkit.WebView;
45812d2d690ffa918a6e9f43da0967e43657ef817cJohn Reckimport android.webkit.WebViewDatabase;
460c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
474650033a3790598316d01deef8f52d0bf39d5837John Reckimport com.android.browser.homepages.HomeProvider;
484650033a3790598316d01deef8f52d0bf39d5837John Reckimport com.android.browser.provider.BrowserProvider;
494650033a3790598316d01deef8f52d0bf39d5837John Reckimport com.android.browser.search.SearchEngine;
504650033a3790598316d01deef8f52d0bf39d5837John Reckimport com.android.browser.search.SearchEngines;
514650033a3790598316d01deef8f52d0bf39d5837John Reck
5235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reckimport java.lang.ref.WeakReference;
5335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reckimport java.util.Iterator;
5435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reckimport java.util.LinkedList;
55b8b2af8be793c442add61afbe852d55ef978361cJohn Reckimport java.util.WeakHashMap;
560c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
5735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck/**
5835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck * Class for managing settings
590c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project */
6035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reckpublic class BrowserSettings implements OnSharedPreferenceChangeListener,
6135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        PreferenceKeys {
62376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb
6335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // TODO: Do something with this UserAgent stuff
647fd1e8f86ead29d4cfad3d16e54f4427ac7bf39fJohn Reck    private static final String DESKTOP_USERAGENT = "Mozilla/5.0 (X11; " +
657fd1e8f86ead29d4cfad3d16e54f4427ac7bf39fJohn Reck        "Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) " +
667fd1e8f86ead29d4cfad3d16e54f4427ac7bf39fJohn Reck        "Chrome/11.0.696.34 Safari/534.24";
670c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
680c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    private static final String IPHONE_USERAGENT = "Mozilla/5.0 (iPhone; U; " +
6935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        "CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 " +
7035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        "(KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7";
71f6915fbb568e513a1968f6a4311559b5c832064dBart Sears
72f6915fbb568e513a1968f6a4311559b5c832064dBart Sears    private static final String IPAD_USERAGENT = "Mozilla/5.0 (iPad; U; " +
7335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        "CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 " +
7435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        "(KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10";
75f6915fbb568e513a1968f6a4311559b5c832064dBart Sears
76f6915fbb568e513a1968f6a4311559b5c832064dBart Sears    private static final String FROYO_USERAGENT = "Mozilla/5.0 (Linux; U; " +
7735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        "Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 " +
7835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        "(KHTML, like Gecko) Version/4.0 Mobile Safari/533.1";
790c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
807fd1e8f86ead29d4cfad3d16e54f4427ac7bf39fJohn Reck    private static final String HONEYCOMB_USERAGENT = "Mozilla/5.0 (Linux; U; " +
817fd1e8f86ead29d4cfad3d16e54f4427ac7bf39fJohn Reck        "Android 3.1; en-us; Xoom Build/HMJ25) AppleWebKit/534.13 " +
827fd1e8f86ead29d4cfad3d16e54f4427ac7bf39fJohn Reck        "(KHTML, like Gecko) Version/4.0 Safari/534.13";
837fd1e8f86ead29d4cfad3d16e54f4427ac7bf39fJohn Reck
8435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    private static final String USER_AGENTS[] = { null,
8535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            DESKTOP_USERAGENT,
8635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            IPHONE_USERAGENT,
8735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            IPAD_USERAGENT,
887fd1e8f86ead29d4cfad3d16e54f4427ac7bf39fJohn Reck            FROYO_USERAGENT,
897fd1e8f86ead29d4cfad3d16e54f4427ac7bf39fJohn Reck            HONEYCOMB_USERAGENT,
9035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    };
910c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
928fc22a1c7846b4c7c7b74d1ec59ffc59c2695c15John Reck    // The minimum min font size
938fc22a1c7846b4c7c7b74d1ec59ffc59c2695c15John Reck    // Aka, the lower bounds for the min font size range
948fc22a1c7846b4c7c7b74d1ec59ffc59c2695c15John Reck    // which is 1:5..24
958fc22a1c7846b4c7c7b74d1ec59ffc59c2695c15John Reck    private static final int MIN_FONT_SIZE_OFFSET = 5;
967dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    // The initial value in the text zoom range
977dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    // This is what represents 100% in the SeekBarPreference range
987dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    private static final int TEXT_ZOOM_START_VAL = 10;
997dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    // The size of a single step in the text zoom range, in percent
1007dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    private static final int TEXT_ZOOM_STEP = 5;
10167f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware    // The initial value in the double tap zoom range
10267f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware    // This is what represents 100% in the SeekBarPreference range
10367f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware    private static final int DOUBLE_TAP_ZOOM_START_VAL = 5;
10467f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware    // The size of a single step in the double tap zoom range, in percent
10567f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware    private static final int DOUBLE_TAP_ZOOM_STEP = 5;
1068fc22a1c7846b4c7c7b74d1ec59ffc59c2695c15John Reck
10735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    private static BrowserSettings sInstance;
10863bb687da46c285f6a71ff47c9f00e46111ffec2John Reck
10935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    private Context mContext;
11035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    private SharedPreferences mPrefs;
11135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    private LinkedList<WeakReference<WebSettings>> mManagedSettings;
1128233facddcc51865d612a919d450db6954aa48e3Michael Kolb    private Controller mController;
11335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    private WebStorageSizeManager mWebStorageSizeManager;
11435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    private AutofillHandler mAutofillHandler;
115b8b2af8be793c442add61afbe852d55ef978361cJohn Reck    private WeakHashMap<WebSettings, String> mCustomUserAgents;
116aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch    private static boolean sInitialized = false;
117c477e71ec9b3b65d6ef633d4e536ae6cc19dd0f9John Reck    private boolean mNeedsSharedSync = true;
1185ba3c76b201c4448de4b520f2aee2e7d99fc712dJohn Reck    private float mFontSizeMult = 1.0f;
11978a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck
12096497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease    // Current state of network-dependent settings
12196497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease    private boolean mLinkPrefetchAllowed = true;
12296497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease
12378a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck    // Cached values
12478a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck    private int mPageCacheCapacity = 1;
12578a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck    private String mAppCachePath;
1260c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
12735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // Cached settings
12835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    private SearchEngine mSearchEngine;
1290c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
130aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch    private static String sFactoryResetUrl;
131aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch
13235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public static void initialize(final Context context) {
13335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        sInstance = new BrowserSettings(context);
13435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
1350c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
13635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public static BrowserSettings getInstance() {
13735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return sInstance;
13835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
139ef67165a877b1cd17d4afc6e2e17caa97fc399f2Ben Murdoch
14035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    private BrowserSettings(Context context) {
141914c5591baeb86bf30a5bc28930071442a822d60Ben Murdoch        mContext = context.getApplicationContext();
14235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        mPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);
14335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        mAutofillHandler = new AutofillHandler(mContext);
14435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        mManagedSettings = new LinkedList<WeakReference<WebSettings>>();
145b8b2af8be793c442add61afbe852d55ef978361cJohn Reck        mCustomUserAgents = new WeakHashMap<WebSettings, String>();
14635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        mAutofillHandler.asyncLoadFromDb();
147cadae72b6309303bc7b22e85181222b73e176c32John Reck        BackgroundHandler.execute(mSetup);
148ef67165a877b1cd17d4afc6e2e17caa97fc399f2Ben Murdoch    }
149ef67165a877b1cd17d4afc6e2e17caa97fc399f2Ben Murdoch
15035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void setController(Controller controller) {
15135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        mController = controller;
152c477e71ec9b3b65d6ef633d4e536ae6cc19dd0f9John Reck        if (sInitialized) {
153c477e71ec9b3b65d6ef633d4e536ae6cc19dd0f9John Reck            syncSharedSettings();
154c477e71ec9b3b65d6ef633d4e536ae6cc19dd0f9John Reck        }
15535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
1560c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
15735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void startManagingSettings(WebSettings settings) {
1584d2fcaba7fb8eb1723943ac9a10e76d509330bd1Jonathan Dixon        WebSettingsClassic settingsClassic = (WebSettingsClassic) settings;
159c477e71ec9b3b65d6ef633d4e536ae6cc19dd0f9John Reck        if (mNeedsSharedSync) {
160c477e71ec9b3b65d6ef633d4e536ae6cc19dd0f9John Reck            syncSharedSettings();
161c477e71ec9b3b65d6ef633d4e536ae6cc19dd0f9John Reck        }
16235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        synchronized (mManagedSettings) {
1634d2fcaba7fb8eb1723943ac9a10e76d509330bd1Jonathan Dixon            syncStaticSettings(settingsClassic);
1644d2fcaba7fb8eb1723943ac9a10e76d509330bd1Jonathan Dixon            syncSetting(settingsClassic);
16535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            mManagedSettings.add(new WeakReference<WebSettings>(settings));
1660c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project        }
1670c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
1680c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
169d1d87315942218816a509798a299612ed674c21cJohn Reck    public void stopManagingSettings(WebSettings settings) {
170d1d87315942218816a509798a299612ed674c21cJohn Reck        Iterator<WeakReference<WebSettings>> iter = mManagedSettings.iterator();
171d1d87315942218816a509798a299612ed674c21cJohn Reck        while (iter.hasNext()) {
172d1d87315942218816a509798a299612ed674c21cJohn Reck            WeakReference<WebSettings> ref = iter.next();
173d1d87315942218816a509798a299612ed674c21cJohn Reck            if (ref.get() == settings) {
174d1d87315942218816a509798a299612ed674c21cJohn Reck                iter.remove();
175d1d87315942218816a509798a299612ed674c21cJohn Reck                return;
176d1d87315942218816a509798a299612ed674c21cJohn Reck            }
177d1d87315942218816a509798a299612ed674c21cJohn Reck        }
178d1d87315942218816a509798a299612ed674c21cJohn Reck    }
179d1d87315942218816a509798a299612ed674c21cJohn Reck
180cadae72b6309303bc7b22e85181222b73e176c32John Reck    private Runnable mSetup = new Runnable() {
18178a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck
18278a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck        @Override
18378a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck        public void run() {
1845ba3c76b201c4448de4b520f2aee2e7d99fc712dJohn Reck            DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
1855ba3c76b201c4448de4b520f2aee2e7d99fc712dJohn Reck            mFontSizeMult = metrics.scaledDensity / metrics.density;
18678a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck            // the cost of one cached page is ~3M (measured using nytimes.com). For
18778a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck            // low end devices, we only cache one page. For high end devices, we try
18878a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck            // to cache more pages, currently choose 5.
18978a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck            if (ActivityManager.staticGetMemoryClass() > 16) {
19078a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                mPageCacheCapacity = 5;
19178a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck            }
19278a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck            mWebStorageSizeManager = new WebStorageSizeManager(mContext,
19378a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                    new WebStorageSizeManager.StatFsDiskInfo(getAppCachePath()),
19478a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                    new WebStorageSizeManager.WebKitAppCacheInfo(getAppCachePath()));
195276b1353fdc33cc91cfcd5c79f77b6857543859dJohn Reck            // Workaround b/5254577
196276b1353fdc33cc91cfcd5c79f77b6857543859dJohn Reck            mPrefs.registerOnSharedPreferenceChangeListener(BrowserSettings.this);
19778a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck            if (Build.VERSION.CODENAME.equals("REL")) {
19878a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                // This is a release build, always startup with debug disabled
19978a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                setDebugEnabled(false);
20078a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck            }
20178a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck            if (mPrefs.contains(PREF_TEXT_SIZE)) {
20278a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                /*
20378a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                 * Update from TextSize enum to zoom percent
20478a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                 * SMALLEST is 50%
20578a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                 * SMALLER is 75%
20678a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                 * NORMAL is 100%
20778a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                 * LARGER is 150%
20878a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                 * LARGEST is 200%
20978a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                 */
21078a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                switch (getTextSize()) {
21178a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                case SMALLEST:
21278a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                    setTextZoom(50);
21378a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                    break;
21478a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                case SMALLER:
21578a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                    setTextZoom(75);
21678a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                    break;
21778a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                case LARGER:
21878a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                    setTextZoom(150);
21978a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                    break;
22078a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                case LARGEST:
22178a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                    setTextZoom(200);
22278a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                    break;
22378a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                }
22478a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                mPrefs.edit().remove(PREF_TEXT_SIZE).apply();
22578a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck            }
226aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch
227aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch            sFactoryResetUrl = mContext.getResources().getString(R.string.homepage_base);
228aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch            if (sFactoryResetUrl.indexOf("{CID}") != -1) {
229aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch                sFactoryResetUrl = sFactoryResetUrl.replace("{CID}",
230aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch                    BrowserProvider.getClientId(mContext.getContentResolver()));
231aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch            }
232aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch
233aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch            synchronized (BrowserSettings.class) {
234aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch                sInitialized = true;
235aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch                BrowserSettings.class.notifyAll();
23678a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck            }
23778a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck        }
23878a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck    };
23978a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck
240aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch    private static void requireInitialization() {
241aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch        synchronized (BrowserSettings.class) {
242aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch            while (!sInitialized) {
24378a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                try {
244aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch                    BrowserSettings.class.wait();
24578a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                } catch (InterruptedException e) {
24678a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck                }
24778a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck            }
24878a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck        }
24978a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck    }
25078a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck
2510c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    /**
25235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck     * Syncs all the settings that have a Preference UI
2530c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project     */
2544d2fcaba7fb8eb1723943ac9a10e76d509330bd1Jonathan Dixon    private void syncSetting(WebSettingsClassic settings) {
25535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setGeolocationEnabled(enableGeolocation());
25635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setJavaScriptEnabled(enableJavascript());
25735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setLightTouchEnabled(enableLightTouch());
25835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setNavDump(enableNavDump());
25931adf671737521438499be855043296f33e1c3a6Derek Sollenberger        settings.setHardwareAccelSkiaEnabled(isSkiaHardwareAccelerated());
26035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setShowVisualIndicator(enableVisualIndicator());
26135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setDefaultTextEncodingName(getDefaultTextEncoding());
26235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setDefaultZoom(getDefaultZoom());
26335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setMinimumFontSize(getMinimumFontSize());
26435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setMinimumLogicalFontSize(getMinimumFontSize());
26592f25f806c50bb08de80e1e6741b9852e105b8d9John Reck        settings.setForceUserScalable(forceEnableUserScalable());
26635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setPluginState(getPluginState());
2677dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        settings.setTextZoom(getTextZoom());
26867f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware        settings.setDoubleTapZoom(getDoubleTapZoom());
26935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setAutoFillEnabled(isAutofillEnabled());
27035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setLayoutAlgorithm(getLayoutAlgorithm());
271dc657fa17179878ecf536ad1cb6e8891c4aab29eSteve Block        settings.setJavaScriptCanOpenWindowsAutomatically(!blockPopupWindows());
27235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setLoadsImagesAutomatically(loadImages());
27335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setLoadWithOverviewMode(loadPageInOverviewMode());
27435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setSavePassword(rememberPasswords());
27535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setSaveFormData(saveFormdata());
27635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setUseWideViewPort(isWideViewport());
27735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setAutoFillProfile(getAutoFillProfile());
278b8b2af8be793c442add61afbe852d55ef978361cJohn Reck
279b8b2af8be793c442add61afbe852d55ef978361cJohn Reck        String ua = mCustomUserAgents.get(settings);
2804650033a3790598316d01deef8f52d0bf39d5837John Reck        if (ua != null) {
281b8b2af8be793c442add61afbe852d55ef978361cJohn Reck            settings.setUserAgentString(ua);
282b8b2af8be793c442add61afbe852d55ef978361cJohn Reck        } else {
283b8b2af8be793c442add61afbe852d55ef978361cJohn Reck            settings.setUserAgentString(USER_AGENTS[getUserAgent()]);
284b8b2af8be793c442add61afbe852d55ef978361cJohn Reck        }
2852fd9d0e1db6c2f3bb364f651ef3b32189b7ef77dJohn Reck
286ea17e784b39f50160eb92487f4b166a8fd98e8c2John Reck        boolean useInverted = useInvertedRendering();
287eabe5dabe4e56a78c5d6cf99e6f171452bad2f23John Reck        settings.setProperty(WebViewProperties.gfxInvertedScreen,
288ea17e784b39f50160eb92487f4b166a8fd98e8c2John Reck                useInverted ? "true" : "false");
289ea17e784b39f50160eb92487f4b166a8fd98e8c2John Reck        if (useInverted) {
290ea17e784b39f50160eb92487f4b166a8fd98e8c2John Reck            settings.setProperty(WebViewProperties.gfxInvertedScreenContrast,
291ea17e784b39f50160eb92487f4b166a8fd98e8c2John Reck                    Float.toString(getInvertedContrast()));
292ea17e784b39f50160eb92487f4b166a8fd98e8c2John Reck        }
29385de57ad68c831729ebc46b87548ddb1e92ab6a5Teng-Hui Zhu
294ea17e784b39f50160eb92487f4b166a8fd98e8c2John Reck        if (isDebugEnabled()) {
295ea17e784b39f50160eb92487f4b166a8fd98e8c2John Reck            settings.setProperty(WebViewProperties.gfxEnableCpuUploadPath,
296ea17e784b39f50160eb92487f4b166a8fd98e8c2John Reck                    enableCpuUploadPath() ? "true" : "false");
297ea17e784b39f50160eb92487f4b166a8fd98e8c2John Reck        }
29896497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease
29996497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        settings.setLinkPrefetchEnabled(mLinkPrefetchAllowed);
300ef67165a877b1cd17d4afc6e2e17caa97fc399f2Ben Murdoch    }
301dd4f4297c08803b238af28dddb373a1aea06cc1eRamanan Rajeswaran
30235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    /**
30335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck     * Syncs all the settings that have no UI
30435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck     * These cannot change, so we only need to set them once per WebSettings
30535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck     */
3064d2fcaba7fb8eb1723943ac9a10e76d509330bd1Jonathan Dixon    private void syncStaticSettings(WebSettingsClassic settings) {
30735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setDefaultFontSize(16);
30835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setDefaultFixedFontSize(13);
30935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setPageCacheCapacity(getPageCacheCapacity());
31035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck
31135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        // WebView inside Browser doesn't want initial focus to be set.
31235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setNeedInitialFocus(false);
31335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        // Browser supports multiple windows
31435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setSupportMultipleWindows(true);
31535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        // enable smooth transition for better performance during panning or
31635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        // zooming
31735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setEnableSmoothTransition(true);
318164f74e38918ea01a5f631a7cf4d807d397c6a51Teng-Hui Zhu        // WebView should be preserving the memory as much as possible.
319164f74e38918ea01a5f631a7cf4d807d397c6a51Teng-Hui Zhu        // However, apps like browser wish to turn on the performance mode which
320164f74e38918ea01a5f631a7cf4d807d397c6a51Teng-Hui Zhu        // would require more memory.
321164f74e38918ea01a5f631a7cf4d807d397c6a51Teng-Hui Zhu        // TODO: We need to dynamically allocate/deallocate temporary memory for
322164f74e38918ea01a5f631a7cf4d807d397c6a51Teng-Hui Zhu        // apps which are trying to use minimal memory. Currently, double
323164f74e38918ea01a5f631a7cf4d807d397c6a51Teng-Hui Zhu        // buffering is always turned on, which is unnecessary.
324164f74e38918ea01a5f631a7cf4d807d397c6a51Teng-Hui Zhu        settings.setProperty(WebViewProperties.gfxUseMinimalMemory, "false");
32535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        // disable content url access
32635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setAllowContentAccess(false);
32735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck
32835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        // HTML5 API flags
32935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setAppCacheEnabled(true);
33035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setDatabaseEnabled(true);
33135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setDomStorageEnabled(true);
33235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setWorkersEnabled(true);  // This only affects V8.
3339804c433f5c73877e3b529eeee0e60d5395014e7Grace Kloba
33435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        // HTML5 configuration parametersettings.
33578a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck        settings.setAppCacheMaxSize(getWebStorageSizeManager().getAppCacheMaxSize());
33635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setAppCachePath(getAppCachePath());
33735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setDatabasePath(mContext.getDir("databases", 0).getPath());
33835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        settings.setGeolocationDatabasePath(mContext.getDir("geolocation", 0).getPath());
33937bf04438f6dcf781fe560b0c0c7cfa798e154c7Selim Gurun        // origin policy for file access
34037bf04438f6dcf781fe560b0c0c7cfa798e154c7Selim Gurun        settings.setAllowUniversalAccessFromFileURLs(false);
34137bf04438f6dcf781fe560b0c0c7cfa798e154c7Selim Gurun        settings.setAllowFileAccessFromFileURLs(false);
34235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
34335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck
34435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    private void syncSharedSettings() {
345c477e71ec9b3b65d6ef633d4e536ae6cc19dd0f9John Reck        mNeedsSharedSync = false;
34635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        CookieManager.getInstance().setAcceptCookie(acceptCookies());
34735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (mController != null) {
34835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            mController.setShouldShowErrorConsole(enableJavascriptConsole());
3490cb8189efd19242f4b2962378bf32de122dafde0Ben Murdoch        }
35035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
3510cb8189efd19242f4b2962378bf32de122dafde0Ben Murdoch
35235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    private void syncManagedSettings() {
35335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        syncSharedSettings();
35435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        synchronized (mManagedSettings) {
35535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            Iterator<WeakReference<WebSettings>> iter = mManagedSettings.iterator();
35635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            while (iter.hasNext()) {
35735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                WeakReference<WebSettings> ref = iter.next();
3584d2fcaba7fb8eb1723943ac9a10e76d509330bd1Jonathan Dixon                WebSettingsClassic settings = (WebSettingsClassic)ref.get();
35935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                if (settings == null) {
36035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                    iter.remove();
36135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                    continue;
36235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                }
36335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                syncSetting(settings);
364ef67165a877b1cd17d4afc6e2e17caa97fc399f2Ben Murdoch            }
36535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        }
36635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
367ef67165a877b1cd17d4afc6e2e17caa97fc399f2Ben Murdoch
36835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    @Override
36935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void onSharedPreferenceChanged(
37035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            SharedPreferences sharedPreferences, String key) {
37135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        syncManagedSettings();
37235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (PREF_SEARCH_ENGINE.equals(key)) {
37335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            updateSearchEngine(false);
37496497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        } else if (PREF_FULLSCREEN.equals(key)) {
37547ed4b883a66e08240066e0bd0aa66d1571005b3Magnus Hallqvist            if (mController != null && mController.getUi() != null) {
376c38c604eca3bd0620cd9284187aace78455e723dMichael Kolb                mController.getUi().setFullscreen(useFullscreen());
377c38c604eca3bd0620cd9284187aace78455e723dMichael Kolb            }
3780241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb        } else if (PREF_ENABLE_QUICK_CONTROLS.equals(key)) {
37947ed4b883a66e08240066e0bd0aa66d1571005b3Magnus Hallqvist            if (mController != null && mController.getUi() != null) {
3800241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb                mController.getUi().setUseQuickControls(sharedPreferences.getBoolean(key, false));
3810241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb            }
38296497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        } else if (PREF_LINK_PREFETCH.equals(key)) {
38396497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease            updateConnectionType();
384c38c604eca3bd0620cd9284187aace78455e723dMichael Kolb        }
38535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
38635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck
387961d35d6e9cd58d930d8572b91d7e0c9f928f1e8John Reck    public static String getFactoryResetHomeUrl(Context context) {
388aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch        requireInitialization();
389aaa1f375bc9d6a6a175819fac34d39202f69a166Ben Murdoch        return sFactoryResetUrl;
39035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
39135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck
39235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public LayoutAlgorithm getLayoutAlgorithm() {
39335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        LayoutAlgorithm layoutAlgorithm = LayoutAlgorithm.NORMAL;
39435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (autofitPages()) {
39535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            layoutAlgorithm = LayoutAlgorithm.NARROW_COLUMNS;
39635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        }
39735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (isDebugEnabled()) {
39835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            if (isSmallScreen()) {
39935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                layoutAlgorithm = LayoutAlgorithm.SINGLE_COLUMN;
400ef67165a877b1cd17d4afc6e2e17caa97fc399f2Ben Murdoch            } else {
40135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                if (isNormalLayout()) {
40235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                    layoutAlgorithm = LayoutAlgorithm.NORMAL;
40335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                } else {
40435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                    layoutAlgorithm = LayoutAlgorithm.NARROW_COLUMNS;
40535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                }
406ef67165a877b1cd17d4afc6e2e17caa97fc399f2Ben Murdoch            }
40735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        }
40835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return layoutAlgorithm;
40935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
410ef67165a877b1cd17d4afc6e2e17caa97fc399f2Ben Murdoch
41135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public int getPageCacheCapacity() {
41278a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck        requireInitialization();
41378a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck        return mPageCacheCapacity;
41435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
415ef67165a877b1cd17d4afc6e2e17caa97fc399f2Ben Murdoch
41635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public WebStorageSizeManager getWebStorageSizeManager() {
41778a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck        requireInitialization();
41835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mWebStorageSizeManager;
41935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
420ef67165a877b1cd17d4afc6e2e17caa97fc399f2Ben Murdoch
42135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    private String getAppCachePath() {
42278a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck        if (mAppCachePath == null) {
42378a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck            mAppCachePath = mContext.getDir("appcache", 0).getPath();
42478a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck        }
42578a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck        return mAppCachePath;
4260c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
4270c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
42835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    private void updateSearchEngine(boolean force) {
42935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        String searchEngineName = getSearchEngineName();
43035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (force || mSearchEngine == null ||
43135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                !mSearchEngine.getName().equals(searchEngineName)) {
43235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            mSearchEngine = SearchEngines.get(mContext, searchEngineName);
4335119edd5744cfc6d3a8ed480a8853586c737bed4Narayan Kamath         }
4345119edd5744cfc6d3a8ed480a8853586c737bed4Narayan Kamath    }
4355119edd5744cfc6d3a8ed480a8853586c737bed4Narayan Kamath
43635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public SearchEngine getSearchEngine() {
43735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (mSearchEngine == null) {
43835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            updateSearchEngine(false);
4390c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project        }
44035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mSearchEngine;
44135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
442ffa561e00d3934de9451bf599a2d4f355a33041bDerek Sollenberger
44335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean isDebugEnabled() {
444c477e71ec9b3b65d6ef633d4e536ae6cc19dd0f9John Reck        requireInitialization();
44535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_DEBUG_MENU, false);
44635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
447ffa561e00d3934de9451bf599a2d4f355a33041bDerek Sollenberger
44835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void setDebugEnabled(boolean value) {
4491da8188e950f6e68e1edd44fb5b5dbfc8cc2c349John Reck        Editor edit = mPrefs.edit();
4501da8188e950f6e68e1edd44fb5b5dbfc8cc2c349John Reck        edit.putBoolean(PREF_DEBUG_MENU, value);
4511da8188e950f6e68e1edd44fb5b5dbfc8cc2c349John Reck        if (!value) {
4521da8188e950f6e68e1edd44fb5b5dbfc8cc2c349John Reck            // Reset to "safe" value
4531da8188e950f6e68e1edd44fb5b5dbfc8cc2c349John Reck            edit.putBoolean(PREF_ENABLE_HARDWARE_ACCEL_SKIA, false);
4541da8188e950f6e68e1edd44fb5b5dbfc8cc2c349John Reck        }
4551da8188e950f6e68e1edd44fb5b5dbfc8cc2c349John Reck        edit.apply();
45635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
457bff2d603c022691237c31d9a57ad8c217c6e7e11Ben Murdoch
45835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void clearCache() {
45935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        WebIconDatabase.getInstance().removeAllIcons();
46035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (mController != null) {
46135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            WebView current = mController.getCurrentWebView();
46235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            if (current != null) {
46335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                current.clearCache(true);
46435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            }
46535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        }
46635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
467d9ee1391cac980768fe1364fa5b26f6f0c9c6068Grace Kloba
46835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void clearCookies() {
46935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        CookieManager.getInstance().removeAllCookie();
47035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
471f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block
47235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void clearHistory() {
47335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        ContentResolver resolver = mContext.getContentResolver();
47435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        Browser.clearHistory(resolver);
47535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        Browser.clearSearches(resolver);
4760c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
4770c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
47835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void clearFormData() {
47935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        WebViewDatabase.getInstance(mContext).clearFormData();
48035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (mController!= null) {
48135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            WebView currentTopView = mController.getCurrentTopWebView();
48235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            if (currentTopView != null) {
48335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                currentTopView.clearFormData();
48435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            }
485bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck        }
4860c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
4870c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
48835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void clearPasswords() {
48935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        WebViewDatabase db = WebViewDatabase.getInstance(mContext);
49035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        db.clearUsernamePassword();
49135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        db.clearHttpAuthUsernamePassword();
492d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert    }
493d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert
49435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void clearDatabases() {
49535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        WebStorage.getInstance().deleteAllData();
496b3c02da4553b1a629b16377970fdabae28394c94Feng Qian    }
497b3c02da4553b1a629b16377970fdabae28394c94Feng Qian
49835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void clearLocationAccess() {
49935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        GeolocationPermissions.getInstance().clearAll();
50079e82b7ba72a7278911edf0dd7b03c65c4ec0e9dAndrei Popescu    }
50179e82b7ba72a7278911edf0dd7b03c65c4ec0e9dAndrei Popescu
50235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void resetDefaultPreferences() {
503bd3151980baf8a7d3a13f735f4a7f2001d397e72John Reck        // Preserve autologin setting
504bd3151980baf8a7d3a13f735f4a7f2001d397e72John Reck        long gal = mPrefs.getLong(GoogleAccountLogin.PREF_AUTOLOGIN_TIME, -1);
505bd3151980baf8a7d3a13f735f4a7f2001d397e72John Reck        mPrefs.edit()
506bd3151980baf8a7d3a13f735f4a7f2001d397e72John Reck                .clear()
507bd3151980baf8a7d3a13f735f4a7f2001d397e72John Reck                .putLong(GoogleAccountLogin.PREF_AUTOLOGIN_TIME, gal)
508bd3151980baf8a7d3a13f735f4a7f2001d397e72John Reck                .apply();
509c885a24c145c085a2507f3ce39ce80ab1773956eBjörn Isaksson        resetCachedValues();
51035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        syncManagedSettings();
5110c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
5120c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
513c885a24c145c085a2507f3ce39ce80ab1773956eBjörn Isaksson    private void resetCachedValues() {
514c885a24c145c085a2507f3ce39ce80ab1773956eBjörn Isaksson        updateSearchEngine(false);
515c885a24c145c085a2507f3ce39ce80ab1773956eBjörn Isaksson    }
516c885a24c145c085a2507f3ce39ce80ab1773956eBjörn Isaksson
51735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public AutoFillProfile getAutoFillProfile() {
51835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mAutofillHandler.getAutoFillProfile();
5190c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
5200c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
52135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void setAutoFillProfile(AutoFillProfile profile, Message msg) {
52235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        mAutofillHandler.setAutoFillProfile(profile, msg);
523273330a8027dafbd742ba2ebcdaf875e273afb06Ben Murdoch        // Auto-fill will reuse the same profile ID when making edits to the profile,
524273330a8027dafbd742ba2ebcdaf875e273afb06Ben Murdoch        // so we need to force a settings sync (otherwise the SharedPreferences
525273330a8027dafbd742ba2ebcdaf875e273afb06Ben Murdoch        // manager will optimise out the call to onSharedPreferenceChanged(), as
526273330a8027dafbd742ba2ebcdaf875e273afb06Ben Murdoch        // it thinks nothing has changed).
527273330a8027dafbd742ba2ebcdaf875e273afb06Ben Murdoch        syncManagedSettings();
52840badf29facf6b5ca894a092062cc27897d2b434John Reck    }
52940badf29facf6b5ca894a092062cc27897d2b434John Reck
53035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void toggleDebugSettings() {
53135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        setDebugEnabled(!isDebugEnabled());
5322f83068b9e8835f97010bc2ee1d77f3a13827ae4Grace Kloba    }
5332f83068b9e8835f97010bc2ee1d77f3a13827ae4Grace Kloba
534b8b2af8be793c442add61afbe852d55ef978361cJohn Reck    public boolean hasDesktopUseragent(WebView view) {
535b8b2af8be793c442add61afbe852d55ef978361cJohn Reck        return view != null && mCustomUserAgents.get(view.getSettings()) != null;
536b8b2af8be793c442add61afbe852d55ef978361cJohn Reck    }
537b8b2af8be793c442add61afbe852d55ef978361cJohn Reck
538b8b2af8be793c442add61afbe852d55ef978361cJohn Reck    public void toggleDesktopUseragent(WebView view) {
539b0a86db3bfa39863977efd3bac5c9bf527d224aaJohn Reck        if (view == null) {
540b0a86db3bfa39863977efd3bac5c9bf527d224aaJohn Reck            return;
541b0a86db3bfa39863977efd3bac5c9bf527d224aaJohn Reck        }
542b8b2af8be793c442add61afbe852d55ef978361cJohn Reck        WebSettings settings = view.getSettings();
543b8b2af8be793c442add61afbe852d55ef978361cJohn Reck        if (mCustomUserAgents.get(settings) != null) {
544b8b2af8be793c442add61afbe852d55ef978361cJohn Reck            mCustomUserAgents.remove(settings);
545b8b2af8be793c442add61afbe852d55ef978361cJohn Reck            settings.setUserAgentString(USER_AGENTS[getUserAgent()]);
546b8b2af8be793c442add61afbe852d55ef978361cJohn Reck        } else {
547b8b2af8be793c442add61afbe852d55ef978361cJohn Reck            mCustomUserAgents.put(settings, DESKTOP_USERAGENT);
548b8b2af8be793c442add61afbe852d55ef978361cJohn Reck            settings.setUserAgentString(DESKTOP_USERAGENT);
549b8b2af8be793c442add61afbe852d55ef978361cJohn Reck        }
550b8b2af8be793c442add61afbe852d55ef978361cJohn Reck    }
551b8b2af8be793c442add61afbe852d55ef978361cJohn Reck
5527dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    public static int getAdjustedMinimumFontSize(int rawValue) {
5537dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        rawValue++; // Preference starts at 0, min font at 1
5547dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        if (rawValue > 1) {
5557dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck            rawValue += (MIN_FONT_SIZE_OFFSET - 2);
5567dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        }
5577dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        return rawValue;
5587dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    }
5597dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck
5605ba3c76b201c4448de4b520f2aee2e7d99fc712dJohn Reck    public int getAdjustedTextZoom(int rawValue) {
5617dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        rawValue = (rawValue - TEXT_ZOOM_START_VAL) * TEXT_ZOOM_STEP;
5625ba3c76b201c4448de4b520f2aee2e7d99fc712dJohn Reck        return (int) ((rawValue + 100) * mFontSizeMult);
5637dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    }
5647dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck
5657dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    static int getRawTextZoom(int percent) {
5667dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        return (percent - 100) / TEXT_ZOOM_STEP + TEXT_ZOOM_START_VAL;
5677dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    }
5687dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck
56967f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware    public int getAdjustedDoubleTapZoom(int rawValue) {
57067f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware        rawValue = (rawValue - DOUBLE_TAP_ZOOM_START_VAL) * DOUBLE_TAP_ZOOM_STEP;
57167f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware        return (int) ((rawValue + 100) * mFontSizeMult);
57267f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware    }
57367f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware
57467f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware    static int getRawDoubleTapZoom(int percent) {
57567f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware        return (percent - 100) / DOUBLE_TAP_ZOOM_STEP + DOUBLE_TAP_ZOOM_START_VAL;
57667f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware    }
57767f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware
578cadae72b6309303bc7b22e85181222b73e176c32John Reck    public SharedPreferences getPreferences() {
579cadae72b6309303bc7b22e85181222b73e176c32John Reck        return mPrefs;
580cadae72b6309303bc7b22e85181222b73e176c32John Reck    }
581cadae72b6309303bc7b22e85181222b73e176c32John Reck
58296497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease    // update connectivity-dependent options
58396497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease    public void updateConnectionType() {
58496497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        ConnectivityManager cm = (ConnectivityManager)
58596497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease            mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
58696497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        String linkPrefetchPreference = getLinkPrefetchEnabled();
58796497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        boolean linkPrefetchAllowed = linkPrefetchPreference.
58896497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease            equals(getLinkPrefetchAlwaysPreferenceString(mContext));
58996497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        NetworkInfo ni = cm.getActiveNetworkInfo();
59096497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        if (ni != null) {
59196497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease            switch (ni.getType()) {
59296497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease                case ConnectivityManager.TYPE_WIFI:
59396497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease                case ConnectivityManager.TYPE_ETHERNET:
59496497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease                case ConnectivityManager.TYPE_BLUETOOTH:
59596497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease                    linkPrefetchAllowed |= linkPrefetchPreference.
59696497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease                        equals(getLinkPrefetchOnWifiOnlyPreferenceString(mContext));
59796497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease                    break;
59896497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease                case ConnectivityManager.TYPE_MOBILE:
59996497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease                case ConnectivityManager.TYPE_MOBILE_DUN:
60096497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease                case ConnectivityManager.TYPE_MOBILE_MMS:
60196497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease                case ConnectivityManager.TYPE_MOBILE_SUPL:
60296497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease                case ConnectivityManager.TYPE_WIMAX:
60396497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease                default:
60496497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease                    break;
60596497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease            }
60696497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        }
60796497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        if (mLinkPrefetchAllowed != linkPrefetchAllowed) {
60896497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease            mLinkPrefetchAllowed = linkPrefetchAllowed;
60996497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease            syncManagedSettings();
61096497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        }
61196497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease    }
61296497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease
61335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // -----------------------------
61435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // getter/setters for accessibility_preferences.xml
61535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // -----------------------------
61635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck
6177dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    @Deprecated
6187dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    private TextSize getTextSize() {
61935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        String textSize = mPrefs.getString(PREF_TEXT_SIZE, "NORMAL");
62035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return TextSize.valueOf(textSize);
6210c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
6220c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
62335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public int getMinimumFontSize() {
6248fc22a1c7846b4c7c7b74d1ec59ffc59c2695c15John Reck        int minFont = mPrefs.getInt(PREF_MIN_FONT_SIZE, 0);
6257dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        return getAdjustedMinimumFontSize(minFont);
6260c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
6270c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
62892f25f806c50bb08de80e1e6741b9852e105b8d9John Reck    public boolean forceEnableUserScalable() {
62992f25f806c50bb08de80e1e6741b9852e105b8d9John Reck        return mPrefs.getBoolean(PREF_FORCE_USERSCALABLE, false);
63092f25f806c50bb08de80e1e6741b9852e105b8d9John Reck    }
63192f25f806c50bb08de80e1e6741b9852e105b8d9John Reck
6327dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    public int getTextZoom() {
63378a6a1d7c2f5666f90222ecc28fcc26740807cb7John Reck        requireInitialization();
6347dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        int textZoom = mPrefs.getInt(PREF_TEXT_ZOOM, 10);
6357dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        return getAdjustedTextZoom(textZoom);
6367dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    }
6377dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck
6387dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    public void setTextZoom(int percent) {
6397dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        mPrefs.edit().putInt(PREF_TEXT_ZOOM, getRawTextZoom(percent)).apply();
64067f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware    }
64167f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware
64267f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware    public int getDoubleTapZoom() {
64367f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware        requireInitialization();
64467f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware        int doubleTapZoom = mPrefs.getInt(PREF_DOUBLE_TAP_ZOOM, 5);
64567f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware        return getAdjustedDoubleTapZoom(doubleTapZoom);
64667f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware    }
64767f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware
64867f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware    public void setDoubleTapZoom(int percent) {
64967f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware        mPrefs.edit().putInt(PREF_DOUBLE_TAP_ZOOM, getRawDoubleTapZoom(percent)).apply();
6507dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    }
6517dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck
65235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // -----------------------------
65335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // getter/setters for advanced_preferences.xml
65435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // -----------------------------
65535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck
65635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public String getSearchEngineName() {
65735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getString(PREF_SEARCH_ENGINE, SearchEngine.GOOGLE);
6580c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
6590c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
6608d772b03fcfd83cea6ec81c9e826f700fac88b61Michael Kolb    public boolean allowAppTabs() {
6618d772b03fcfd83cea6ec81c9e826f700fac88b61Michael Kolb        return mPrefs.getBoolean(PREF_ALLOW_APP_TABS, false);
6628d772b03fcfd83cea6ec81c9e826f700fac88b61Michael Kolb    }
6638d772b03fcfd83cea6ec81c9e826f700fac88b61Michael Kolb
66435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean openInBackground() {
66535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_OPEN_IN_BACKGROUND, false);
6660c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
6670c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
66835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean enableJavascript() {
66935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_ENABLE_JAVASCRIPT, true);
6700c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
6710c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
67235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // TODO: Cache
67335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public PluginState getPluginState() {
67435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        String state = mPrefs.getString(PREF_PLUGIN_STATE, "ON");
67535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return PluginState.valueOf(state);
676ffa561e00d3934de9451bf599a2d4f355a33041bDerek Sollenberger    }
677ffa561e00d3934de9451bf599a2d4f355a33041bDerek Sollenberger
67835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // TODO: Cache
67935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public ZoomDensity getDefaultZoom() {
68035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        String zoom = mPrefs.getString(PREF_DEFAULT_ZOOM, "MEDIUM");
68135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return ZoomDensity.valueOf(zoom);
682930ea2259874ce44b6d1916061a641340123c4e8Teng-Hui Zhu    }
683930ea2259874ce44b6d1916061a641340123c4e8Teng-Hui Zhu
68435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean loadPageInOverviewMode() {
68535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_LOAD_PAGE, true);
686376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb    }
687376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb
68835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean autofitPages() {
68935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_AUTOFIT_PAGES, true);
690bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    }
691bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck
69235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean blockPopupWindows() {
69335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_BLOCK_POPUP_WINDOWS, true);
6945119edd5744cfc6d3a8ed480a8853586c737bed4Narayan Kamath    }
6955119edd5744cfc6d3a8ed480a8853586c737bed4Narayan Kamath
69635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean loadImages() {
69735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_LOAD_IMAGES, true);
6980c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
6990c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
70035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public String getDefaultTextEncoding() {
70135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getString(PREF_DEFAULT_TEXT_ENCODING, null);
7020c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
7030c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
70435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // -----------------------------
70535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // getter/setters for general_preferences.xml
70635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // -----------------------------
70735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck
70835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public String getHomePage() {
70935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getString(PREF_HOMEPAGE, getFactoryResetHomeUrl(mContext));
7100cb8189efd19242f4b2962378bf32de122dafde0Ben Murdoch    }
7110cb8189efd19242f4b2962378bf32de122dafde0Ben Murdoch
71235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void setHomePage(String value) {
71335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        mPrefs.edit().putString(PREF_HOMEPAGE, value).apply();
7140cb8189efd19242f4b2962378bf32de122dafde0Ben Murdoch    }
7150cb8189efd19242f4b2962378bf32de122dafde0Ben Murdoch
71635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean isAutofillEnabled() {
71735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_AUTOFILL_ENABLED, true);
7188029a777106fa6fb911ee1d58402b0de768a583aBen Murdoch    }
7198029a777106fa6fb911ee1d58402b0de768a583aBen Murdoch
72035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public void setAutofillEnabled(boolean value) {
72135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        mPrefs.edit().putBoolean(PREF_AUTOFILL_ENABLED, value).apply();
7226fa32ba4c6bf59a895b220f042a3977e1486ec3eBen Murdoch    }
7236fa32ba4c6bf59a895b220f042a3977e1486ec3eBen Murdoch
72435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // -----------------------------
72535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // getter/setters for debug_preferences.xml
72635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // -----------------------------
7270c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
72835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean isHardwareAccelerated() {
729f48314fcba4d6ddda8abf2e30f94112542363ca5John Reck        if (!isDebugEnabled()) {
73035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            return true;
7310c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project        }
73235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_ENABLE_HARDWARE_ACCEL, true);
7330c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
7340c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
73531adf671737521438499be855043296f33e1c3a6Derek Sollenberger    public boolean isSkiaHardwareAccelerated() {
73631adf671737521438499be855043296f33e1c3a6Derek Sollenberger        if (!isDebugEnabled()) {
73731adf671737521438499be855043296f33e1c3a6Derek Sollenberger            return false;
73831adf671737521438499be855043296f33e1c3a6Derek Sollenberger        }
73931adf671737521438499be855043296f33e1c3a6Derek Sollenberger        return mPrefs.getBoolean(PREF_ENABLE_HARDWARE_ACCEL_SKIA, false);
74031adf671737521438499be855043296f33e1c3a6Derek Sollenberger    }
74131adf671737521438499be855043296f33e1c3a6Derek Sollenberger
74235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public int getUserAgent() {
743f48314fcba4d6ddda8abf2e30f94112542363ca5John Reck        if (!isDebugEnabled()) {
74435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            return 0;
7450c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project        }
74635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return Integer.parseInt(mPrefs.getString(PREF_USER_AGENT, "0"));
7470c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
7480c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
74935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // -----------------------------
75035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // getter/setters for hidden_debug_preferences.xml
75135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // -----------------------------
7525119edd5744cfc6d3a8ed480a8853586c737bed4Narayan Kamath
75335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean enableVisualIndicator() {
75435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (!isDebugEnabled()) {
75535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            return false;
7565119edd5744cfc6d3a8ed480a8853586c737bed4Narayan Kamath        }
75735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_ENABLE_VISUAL_INDICATOR, false);
7580c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
7590c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
76085de57ad68c831729ebc46b87548ddb1e92ab6a5Teng-Hui Zhu    public boolean enableCpuUploadPath() {
76185de57ad68c831729ebc46b87548ddb1e92ab6a5Teng-Hui Zhu        if (!isDebugEnabled()) {
762dbe001b3ce8f6d1b763caee138b8b6846176b213Teng-Hui Zhu            return false;
76385de57ad68c831729ebc46b87548ddb1e92ab6a5Teng-Hui Zhu        }
764dbe001b3ce8f6d1b763caee138b8b6846176b213Teng-Hui Zhu        return mPrefs.getBoolean(PREF_ENABLE_CPU_UPLOAD_PATH, false);
76585de57ad68c831729ebc46b87548ddb1e92ab6a5Teng-Hui Zhu    }
76685de57ad68c831729ebc46b87548ddb1e92ab6a5Teng-Hui Zhu
76735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean enableJavascriptConsole() {
76835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (!isDebugEnabled()) {
76935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            return false;
77035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        }
77135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_JAVASCRIPT_CONSOLE, true);
7720c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
7730c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
77435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean isSmallScreen() {
77535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (!isDebugEnabled()) {
77635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            return false;
7770c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project        }
77835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_SMALL_SCREEN, false);
7790c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
7800c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
78135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean isWideViewport() {
78235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (!isDebugEnabled()) {
78335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            return true;
78435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        }
78535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_WIDE_VIEWPORT, true);
7860c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
7870c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
78835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean isNormalLayout() {
78935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (!isDebugEnabled()) {
79035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            return false;
79135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        }
79235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_NORMAL_LAYOUT, false);
7930c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
7940c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
79535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean isTracing() {
79635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (!isDebugEnabled()) {
79735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            return false;
7980c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project        }
79935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_ENABLE_TRACING, false);
8000c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
8010c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
80235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean enableLightTouch() {
80335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (!isDebugEnabled()) {
80435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            return false;
80535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        }
80635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_ENABLE_LIGHT_TOUCH, false);
8070c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
8080c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
80935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean enableNavDump() {
81035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (!isDebugEnabled()) {
81135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            return false;
81235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        }
81335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_ENABLE_NAV_DUMP, false);
814161974f7f198e1e821297ab1aa46f9f124a972edShimeng (Simon) Wang    }
815161974f7f198e1e821297ab1aa46f9f124a972edShimeng (Simon) Wang
81635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public String getJsEngineFlags() {
81735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (!isDebugEnabled()) {
81835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck            return "";
81935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        }
82035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getString(PREF_JS_ENGINE_FLAGS, "");
821f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block    }
822f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block
82335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // -----------------------------
82435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // getter/setters for lab_preferences.xml
82535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // -----------------------------
82678a98e459323f938e97789a6131beddbebb459ceNicolas Roard
82735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean useQuickControls() {
82835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_ENABLE_QUICK_CONTROLS, false);
829f2c5c1b555904400f4092888ae81b8ed74bfe026Grace Kloba    }
830f2c5c1b555904400f4092888ae81b8ed74bfe026Grace Kloba
83135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean useMostVisitedHomepage() {
832961d35d6e9cd58d930d8572b91d7e0c9f928f1e8John Reck        return HomeProvider.MOST_VISITED.equals(getHomePage());
8330c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project    }
8340c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project
835c38c604eca3bd0620cd9284187aace78455e723dMichael Kolb    public boolean useFullscreen() {
836c38c604eca3bd0620cd9284187aace78455e723dMichael Kolb        return mPrefs.getBoolean(PREF_FULLSCREEN, false);
837c38c604eca3bd0620cd9284187aace78455e723dMichael Kolb    }
838c38c604eca3bd0620cd9284187aace78455e723dMichael Kolb
8392fd9d0e1db6c2f3bb364f651ef3b32189b7ef77dJohn Reck    public boolean useInvertedRendering() {
8402fd9d0e1db6c2f3bb364f651ef3b32189b7ef77dJohn Reck        return mPrefs.getBoolean(PREF_INVERTED, false);
8412fd9d0e1db6c2f3bb364f651ef3b32189b7ef77dJohn Reck    }
8422fd9d0e1db6c2f3bb364f651ef3b32189b7ef77dJohn Reck
8435d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard    public float getInvertedContrast() {
8445d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard        return 1 + (mPrefs.getInt(PREF_INVERTED_CONTRAST, 0) / 10f);
8455d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard    }
8465d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard
84735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // -----------------------------
84835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // getter/setters for privacy_security_preferences.xml
84935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    // -----------------------------
85023da30e29c15ac47aab3fa7ec7091d22dbf86177Ben Murdoch
85135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean showSecurityWarnings() {
85235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_SHOW_SECURITY_WARNINGS, true);
85323da30e29c15ac47aab3fa7ec7091d22dbf86177Ben Murdoch    }
85423da30e29c15ac47aab3fa7ec7091d22dbf86177Ben Murdoch
85535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean acceptCookies() {
85635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_ACCEPT_COOKIES, true);
85723da30e29c15ac47aab3fa7ec7091d22dbf86177Ben Murdoch    }
8580cb8189efd19242f4b2962378bf32de122dafde0Ben Murdoch
85935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean saveFormdata() {
86035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_SAVE_FORMDATA, true);
86135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    }
8620cb8189efd19242f4b2962378bf32de122dafde0Ben Murdoch
86335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean enableGeolocation() {
86435e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_ENABLE_GEOLOCATION, true);
86523da30e29c15ac47aab3fa7ec7091d22dbf86177Ben Murdoch    }
86663bb687da46c285f6a71ff47c9f00e46111ffec2John Reck
86735e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck    public boolean rememberPasswords() {
86835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        return mPrefs.getBoolean(PREF_REMEMBER_PASSWORDS, true);
86963bb687da46c285f6a71ff47c9f00e46111ffec2John Reck    }
87035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck
8711461244018a225006a8d4c203f9dfe294ffe94faMichael Kolb    // -----------------------------
8721461244018a225006a8d4c203f9dfe294ffe94faMichael Kolb    // getter/setters for bandwidth_preferences.xml
8731461244018a225006a8d4c203f9dfe294ffe94faMichael Kolb    // -----------------------------
8741461244018a225006a8d4c203f9dfe294ffe94faMichael Kolb
875467813fba07c4dcc4ce350a3d4576f5739c5c940Mathew Inwood    public static String getPreloadOnWifiOnlyPreferenceString(Context context) {
876467813fba07c4dcc4ce350a3d4576f5739c5c940Mathew Inwood        return context.getResources().getString(R.string.pref_data_preload_value_wifi_only);
8771461244018a225006a8d4c203f9dfe294ffe94faMichael Kolb    }
878467813fba07c4dcc4ce350a3d4576f5739c5c940Mathew Inwood
879467813fba07c4dcc4ce350a3d4576f5739c5c940Mathew Inwood    public static String getPreloadAlwaysPreferenceString(Context context) {
880467813fba07c4dcc4ce350a3d4576f5739c5c940Mathew Inwood        return context.getResources().getString(R.string.pref_data_preload_value_always);
881467813fba07c4dcc4ce350a3d4576f5739c5c940Mathew Inwood    }
882467813fba07c4dcc4ce350a3d4576f5739c5c940Mathew Inwood
883825fba7eb4dae7911f84d8a48a662c4cd6a4db1fMathew Inwood    private static final String DEAULT_PRELOAD_SECURE_SETTING_KEY =
884825fba7eb4dae7911f84d8a48a662c4cd6a4db1fMathew Inwood            "browser_default_preload_setting";
885825fba7eb4dae7911f84d8a48a662c4cd6a4db1fMathew Inwood
886825fba7eb4dae7911f84d8a48a662c4cd6a4db1fMathew Inwood    public String getDefaultPreloadSetting() {
887825fba7eb4dae7911f84d8a48a662c4cd6a4db1fMathew Inwood        String preload = Settings.Secure.getString(mContext.getContentResolver(),
888825fba7eb4dae7911f84d8a48a662c4cd6a4db1fMathew Inwood                DEAULT_PRELOAD_SECURE_SETTING_KEY);
889825fba7eb4dae7911f84d8a48a662c4cd6a4db1fMathew Inwood        if (preload == null) {
890825fba7eb4dae7911f84d8a48a662c4cd6a4db1fMathew Inwood            preload = mContext.getResources().getString(R.string.pref_data_preload_default_value);
891825fba7eb4dae7911f84d8a48a662c4cd6a4db1fMathew Inwood        }
892825fba7eb4dae7911f84d8a48a662c4cd6a4db1fMathew Inwood        return preload;
893467813fba07c4dcc4ce350a3d4576f5739c5c940Mathew Inwood    }
894467813fba07c4dcc4ce350a3d4576f5739c5c940Mathew Inwood
895467813fba07c4dcc4ce350a3d4576f5739c5c940Mathew Inwood    public String getPreloadEnabled() {
896467813fba07c4dcc4ce350a3d4576f5739c5c940Mathew Inwood        return mPrefs.getString(PREF_DATA_PRELOAD, getDefaultPreloadSetting());
897467813fba07c4dcc4ce350a3d4576f5739c5c940Mathew Inwood    }
898467813fba07c4dcc4ce350a3d4576f5739c5c940Mathew Inwood
89996497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease    public static String getLinkPrefetchOnWifiOnlyPreferenceString(Context context) {
90096497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        return context.getResources().getString(R.string.pref_link_prefetch_value_wifi_only);
90196497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease    }
90296497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease
90396497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease    public static String getLinkPrefetchAlwaysPreferenceString(Context context) {
90496497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        return context.getResources().getString(R.string.pref_link_prefetch_value_always);
90596497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease    }
90696497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease
90796497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease    private static final String DEFAULT_LINK_PREFETCH_SECURE_SETTING_KEY =
90896497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease            "browser_default_link_prefetch_setting";
90996497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease
91096497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease    public String getDefaultLinkPrefetchSetting() {
91196497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        String preload = Settings.Secure.getString(mContext.getContentResolver(),
91296497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease            DEFAULT_LINK_PREFETCH_SECURE_SETTING_KEY);
91396497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        if (preload == null) {
91496497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease            preload = mContext.getResources().getString(R.string.pref_link_prefetch_default_value);
91596497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        }
91696497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        return preload;
91796497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease    }
91896497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease
91996497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease    public String getLinkPrefetchEnabled() {
92096497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease        return mPrefs.getString(PREF_LINK_PREFETCH, getDefaultLinkPrefetchSetting());
92196497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease    }
92296497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease
9233636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount    // -----------------------------
9243636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount    // getter/setters for browser recovery
9253636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount    // -----------------------------
9263636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount    /**
9273636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     * The last time browser was started.
9283636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     * @return The last browser start time as System.currentTimeMillis. This
9293636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     * can be 0 if this is the first time or the last tab was closed.
9303636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     */
9313636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount    public long getLastRecovered() {
9323636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount        return mPrefs.getLong(KEY_LAST_RECOVERED, 0);
9333636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount    }
9343636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount
9353636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount    /**
9363636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     * Sets the last browser start time.
9373636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     * @param time The last time as System.currentTimeMillis that the browser
9383636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     * was started. This should be set to 0 if the last tab is closed.
9393636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     */
9403636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount    public void setLastRecovered(long time) {
9413636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount        mPrefs.edit()
9423636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount            .putLong(KEY_LAST_RECOVERED, time)
9433636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount            .apply();
9443636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount    }
9453636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount
9463636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount    /**
9473636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     * Used to determine whether or not the previous browser run crashed. Once
9483636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     * the previous state has been determined, the value will be set to false
9493636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     * until a pause is received.
9503636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     * @return true if the last browser run was paused or false if it crashed.
9513636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     */
9523636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount    public boolean wasLastRunPaused() {
9533636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount        return mPrefs.getBoolean(KEY_LAST_RUN_PAUSED, false);
9543636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount    }
9553636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount
9563636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount    /**
9573636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     * Sets whether or not the last run was a pause or crash.
9583636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     * @param isPaused Set to true When a pause is received or false after
9593636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     * resuming.
9603636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount     */
9613636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount    public void setLastRunPaused(boolean isPaused) {
9623636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount        mPrefs.edit()
9633636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount            .putBoolean(KEY_LAST_RUN_PAUSED, isPaused)
9643636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount            .apply();
9653636d0a6d90fd8de55a4894210b2dbe23f32aac9George Mount    }
9660c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project}
967