140badf29facf6b5ca894a092062cc27897d2b434John Reck/*
240badf29facf6b5ca894a092062cc27897d2b434John Reck * Copyright (C) 2011 The Android Open Source Project
340badf29facf6b5ca894a092062cc27897d2b434John Reck *
440badf29facf6b5ca894a092062cc27897d2b434John Reck * Licensed under the Apache License, Version 2.0 (the "License");
540badf29facf6b5ca894a092062cc27897d2b434John Reck * you may not use this file except in compliance with the License.
640badf29facf6b5ca894a092062cc27897d2b434John Reck * You may obtain a copy of the License at
740badf29facf6b5ca894a092062cc27897d2b434John Reck *
840badf29facf6b5ca894a092062cc27897d2b434John Reck *      http://www.apache.org/licenses/LICENSE-2.0
940badf29facf6b5ca894a092062cc27897d2b434John Reck *
1040badf29facf6b5ca894a092062cc27897d2b434John Reck * Unless required by applicable law or agreed to in writing, software
1140badf29facf6b5ca894a092062cc27897d2b434John Reck * distributed under the License is distributed on an "AS IS" BASIS,
1240badf29facf6b5ca894a092062cc27897d2b434John Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1340badf29facf6b5ca894a092062cc27897d2b434John Reck * See the License for the specific language governing permissions and
1440badf29facf6b5ca894a092062cc27897d2b434John Reck * limitations under the License
1540badf29facf6b5ca894a092062cc27897d2b434John Reck */
1640badf29facf6b5ca894a092062cc27897d2b434John Reck
1740badf29facf6b5ca894a092062cc27897d2b434John Reckpackage com.android.browser.preferences;
1840badf29facf6b5ca894a092062cc27897d2b434John Reck
197dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reckimport android.content.Context;
2040badf29facf6b5ca894a092062cc27897d2b434John Reckimport android.os.Bundle;
2140badf29facf6b5ca894a092062cc27897d2b434John Reckimport android.preference.Preference;
2240badf29facf6b5ca894a092062cc27897d2b434John Reckimport android.preference.PreferenceFragment;
23600928560852c7b9ffffbfc91ee9fe1016465329John Reckimport android.webkit.WebView;
247dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck
257dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reckimport com.android.browser.BrowserSettings;
267dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reckimport com.android.browser.PreferenceKeys;
277dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reckimport com.android.browser.R;
287dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck
297dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reckimport java.text.NumberFormat;
3040badf29facf6b5ca894a092062cc27897d2b434John Reck
3140badf29facf6b5ca894a092062cc27897d2b434John Reckpublic class AccessibilityPreferencesFragment extends PreferenceFragment
3240badf29facf6b5ca894a092062cc27897d2b434John Reck        implements Preference.OnPreferenceChangeListener {
3340badf29facf6b5ca894a092062cc27897d2b434John Reck
347dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    NumberFormat mFormat;
35600928560852c7b9ffffbfc91ee9fe1016465329John Reck    // Used to pause/resume timers, which are required for WebViewPreview
36600928560852c7b9ffffbfc91ee9fe1016465329John Reck    WebView mControlWebView;
377dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck
3840badf29facf6b5ca894a092062cc27897d2b434John Reck    @Override
3940badf29facf6b5ca894a092062cc27897d2b434John Reck    public void onCreate(Bundle savedInstanceState) {
4040badf29facf6b5ca894a092062cc27897d2b434John Reck        super.onCreate(savedInstanceState);
41600928560852c7b9ffffbfc91ee9fe1016465329John Reck        mControlWebView = new WebView(getActivity());
4240badf29facf6b5ca894a092062cc27897d2b434John Reck        addPreferencesFromResource(R.xml.accessibility_preferences);
437dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        BrowserSettings settings = BrowserSettings.getInstance();
447dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        mFormat = NumberFormat.getPercentInstance();
4540badf29facf6b5ca894a092062cc27897d2b434John Reck
467dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        Preference e = findPreference(PreferenceKeys.PREF_MIN_FONT_SIZE);
477dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        e.setOnPreferenceChangeListener(this);
487dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        updateMinFontSummary(e, settings.getMinimumFontSize());
497dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        e = findPreference(PreferenceKeys.PREF_TEXT_ZOOM);
5040badf29facf6b5ca894a092062cc27897d2b434John Reck        e.setOnPreferenceChangeListener(this);
517dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        updateTextZoomSummary(e, settings.getTextZoom());
5267f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware        e = findPreference(PreferenceKeys.PREF_DOUBLE_TAP_ZOOM);
5367f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware        e.setOnPreferenceChangeListener(this);
5467f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware        updateDoubleTapZoomSummary(e, settings.getDoubleTapZoom());
555d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard        e = findPreference(PreferenceKeys.PREF_INVERTED_CONTRAST);
565d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard        e.setOnPreferenceChangeListener(this);
575d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard        updateInvertedContrastSummary(e, (int) (settings.getInvertedContrast() * 100));
5840badf29facf6b5ca894a092062cc27897d2b434John Reck    }
5940badf29facf6b5ca894a092062cc27897d2b434John Reck
60600928560852c7b9ffffbfc91ee9fe1016465329John Reck    @Override
61600928560852c7b9ffffbfc91ee9fe1016465329John Reck    public void onResume() {
62600928560852c7b9ffffbfc91ee9fe1016465329John Reck        super.onResume();
63600928560852c7b9ffffbfc91ee9fe1016465329John Reck        mControlWebView.resumeTimers();
64600928560852c7b9ffffbfc91ee9fe1016465329John Reck    }
65600928560852c7b9ffffbfc91ee9fe1016465329John Reck
66600928560852c7b9ffffbfc91ee9fe1016465329John Reck    @Override
67600928560852c7b9ffffbfc91ee9fe1016465329John Reck    public void onPause() {
68600928560852c7b9ffffbfc91ee9fe1016465329John Reck        super.onPause();
69600928560852c7b9ffffbfc91ee9fe1016465329John Reck        mControlWebView.pauseTimers();
70600928560852c7b9ffffbfc91ee9fe1016465329John Reck    }
71600928560852c7b9ffffbfc91ee9fe1016465329John Reck
72600928560852c7b9ffffbfc91ee9fe1016465329John Reck    @Override
73600928560852c7b9ffffbfc91ee9fe1016465329John Reck    public void onDestroy() {
74600928560852c7b9ffffbfc91ee9fe1016465329John Reck        super.onDestroy();
75600928560852c7b9ffffbfc91ee9fe1016465329John Reck        mControlWebView.destroy();
76600928560852c7b9ffffbfc91ee9fe1016465329John Reck        mControlWebView = null;
77600928560852c7b9ffffbfc91ee9fe1016465329John Reck    }
78600928560852c7b9ffffbfc91ee9fe1016465329John Reck
797dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    void updateMinFontSummary(Preference pref, int minFontSize) {
807dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        Context c = getActivity();
817dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        pref.setSummary(c.getString(R.string.pref_min_font_size_value, minFontSize));
827dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    }
837dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck
847dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck    void updateTextZoomSummary(Preference pref, int textZoom) {
857dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        pref.setSummary(mFormat.format(textZoom / 100.0));
8640badf29facf6b5ca894a092062cc27897d2b434John Reck    }
8740badf29facf6b5ca894a092062cc27897d2b434John Reck
8867f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware    void updateDoubleTapZoomSummary(Preference pref, int doubleTapZoom) {
8967f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware        pref.setSummary(mFormat.format(doubleTapZoom / 100.0));
9067f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware    }
9167f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware
925d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard    void updateInvertedContrastSummary(Preference pref, int contrast) {
935d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard        pref.setSummary(mFormat.format(contrast / 100.0));
945d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard    }
955d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard
9640badf29facf6b5ca894a092062cc27897d2b434John Reck    @Override
9740badf29facf6b5ca894a092062cc27897d2b434John Reck    public boolean onPreferenceChange(Preference pref, Object objValue) {
9840badf29facf6b5ca894a092062cc27897d2b434John Reck        if (getActivity() == null) {
9940badf29facf6b5ca894a092062cc27897d2b434John Reck            // We aren't attached, so don't accept preferences changes from the
10040badf29facf6b5ca894a092062cc27897d2b434John Reck            // invisible UI.
10140badf29facf6b5ca894a092062cc27897d2b434John Reck            return false;
10240badf29facf6b5ca894a092062cc27897d2b434John Reck        }
10340badf29facf6b5ca894a092062cc27897d2b434John Reck
1047dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        if (PreferenceKeys.PREF_MIN_FONT_SIZE.equals(pref.getKey())) {
1057dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck            updateMinFontSummary(pref, BrowserSettings
1067dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck                    .getAdjustedMinimumFontSize((Integer) objValue));
10740badf29facf6b5ca894a092062cc27897d2b434John Reck        }
1087dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        if (PreferenceKeys.PREF_TEXT_ZOOM.equals(pref.getKey())) {
1095ba3c76b201c4448de4b520f2aee2e7d99fc712dJohn Reck            BrowserSettings settings = BrowserSettings.getInstance();
1105ba3c76b201c4448de4b520f2aee2e7d99fc712dJohn Reck            updateTextZoomSummary(pref, settings
1117dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck                    .getAdjustedTextZoom((Integer) objValue));
11240badf29facf6b5ca894a092062cc27897d2b434John Reck        }
11367f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware        if (PreferenceKeys.PREF_DOUBLE_TAP_ZOOM.equals(pref.getKey())) {
11467f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware            BrowserSettings settings = BrowserSettings.getInstance();
11567f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware            updateDoubleTapZoomSummary(pref, settings
11667f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware                    .getAdjustedDoubleTapZoom((Integer) objValue));
11767f45c29882e5f9400a38d5387fe474a42cbb620Mangesh Ghiware        }
1185d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard        if (PreferenceKeys.PREF_INVERTED_CONTRAST.equals(pref.getKey())) {
1195d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard            updateInvertedContrastSummary(pref,
1205d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard                    (int) ((10 + (Integer) objValue) * 10));
1215d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard        }
1227dc444b4c3b70a09a33c0892fb8677922bdf1eccJohn Reck        return true;
12340badf29facf6b5ca894a092062cc27897d2b434John Reck    }
12440badf29facf6b5ca894a092062cc27897d2b434John Reck
1255d513105dff9f453872be40f8bed2391396cf9c7Nicolas Roard}
126