1462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton/*
2462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * Copyright (C) 2010 The Android Open Source Project
3462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton *
4462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * Licensed under the Apache License, Version 2.0 (the "License");
5462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * you may not use this file except in compliance with the License.
6462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * You may obtain a copy of the License at
7462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton *
8462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton *      http://www.apache.org/licenses/LICENSE-2.0
9462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton *
10462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * Unless required by applicable law or agreed to in writing, software
11462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * distributed under the License is distributed on an "AS IS" BASIS,
12462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * See the License for the specific language governing permissions and
14462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * limitations under the License
15462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton */
16462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton
17462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonpackage com.android.browser.preferences;
18462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton
19a9496e1ab66fda87ea406f31d5ec4a213e0b6307John Reckimport com.android.browser.BrowserActivity;
2035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reckimport com.android.browser.PreferenceKeys;
21462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport com.android.browser.R;
22462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton
23a9496e1ab66fda87ea406f31d5ec4a213e0b6307John Reckimport android.content.Intent;
24035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reckimport android.content.res.Resources;
25462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport android.os.Bundle;
26282431b494b5d904713b9b6afd3fdc5672d49074John Reckimport android.preference.ListPreference;
27462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport android.preference.Preference;
28462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport android.preference.PreferenceFragment;
29462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport android.preference.PreferenceScreen;
30035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reckimport android.util.Log;
31462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport android.webkit.GeolocationPermissions;
32462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport android.webkit.ValueCallback;
33462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport android.webkit.WebStorage;
34462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton
35462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport java.util.Map;
36462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport java.util.Set;
37462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton
38035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reckpublic class AdvancedPreferencesFragment extends PreferenceFragment
39462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton        implements Preference.OnPreferenceChangeListener {
40462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton
41462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton    @Override
42462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton    public void onCreate(Bundle savedInstanceState) {
43462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton        super.onCreate(savedInstanceState);
44462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton
45462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton        // Load the XML preferences file
46462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton        addPreferencesFromResource(R.xml.advanced_preferences);
47462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton
48462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton        PreferenceScreen websiteSettings = (PreferenceScreen) findPreference(
4935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                PreferenceKeys.PREF_WEBSITE_SETTINGS);
5010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck        websiteSettings.setFragment(WebsiteSettingsFragment.class.getName());
51035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck
5235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        Preference e = findPreference(PreferenceKeys.PREF_DEFAULT_ZOOM);
53035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck        e.setOnPreferenceChangeListener(this);
54035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck        e.setSummary(getVisualDefaultZoomName(
55035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck                getPreferenceScreen().getSharedPreferences()
5635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                .getString(PreferenceKeys.PREF_DEFAULT_ZOOM, null)) );
57035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck
5835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        e = findPreference(PreferenceKeys.PREF_DEFAULT_TEXT_ENCODING);
59035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck        e.setOnPreferenceChangeListener(this);
60282431b494b5d904713b9b6afd3fdc5672d49074John Reck
6135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        e = findPreference(PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES);
62a9496e1ab66fda87ea406f31d5ec4a213e0b6307John Reck        e.setOnPreferenceChangeListener(this);
63a9496e1ab66fda87ea406f31d5ec4a213e0b6307John Reck
6415bdd87d767fc105f53e74a83e71967a80b78f89John Reck        e = findPreference(PreferenceKeys.PREF_SEARCH_ENGINE);
6515bdd87d767fc105f53e74a83e71967a80b78f89John Reck        e.setOnPreferenceChangeListener(this);
6615bdd87d767fc105f53e74a83e71967a80b78f89John Reck        updateListPreferenceSummary((ListPreference) e);
6715bdd87d767fc105f53e74a83e71967a80b78f89John Reck
6835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        e = findPreference(PreferenceKeys.PREF_PLUGIN_STATE);
69282431b494b5d904713b9b6afd3fdc5672d49074John Reck        e.setOnPreferenceChangeListener(this);
7015bdd87d767fc105f53e74a83e71967a80b78f89John Reck        updateListPreferenceSummary((ListPreference) e);
71282431b494b5d904713b9b6afd3fdc5672d49074John Reck    }
72282431b494b5d904713b9b6afd3fdc5672d49074John Reck
7315bdd87d767fc105f53e74a83e71967a80b78f89John Reck    void updateListPreferenceSummary(ListPreference e) {
74282431b494b5d904713b9b6afd3fdc5672d49074John Reck        e.setSummary(e.getEntry());
75462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton    }
76462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton
77462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton    /*
78462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton     * We need to set the PreferenceScreen state in onResume(), as the number of
79462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton     * origins with active features (WebStorage, Geolocation etc) could have
80462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton     * changed after calling the WebsiteSettingsActivity.
81462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton     */
82462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton    @Override
83462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton    public void onResume() {
84462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton        super.onResume();
85462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton        final PreferenceScreen websiteSettings = (PreferenceScreen) findPreference(
8635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck                PreferenceKeys.PREF_WEBSITE_SETTINGS);
87462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton        websiteSettings.setEnabled(false);
88462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton        WebStorage.getInstance().getOrigins(new ValueCallback<Map>() {
89462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton            @Override
90462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton            public void onReceiveValue(Map webStorageOrigins) {
91462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton                if ((webStorageOrigins != null) && !webStorageOrigins.isEmpty()) {
92462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton                    websiteSettings.setEnabled(true);
93462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton                }
94462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton            }
95462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton        });
96462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton        GeolocationPermissions.getInstance().getOrigins(new ValueCallback<Set<String> >() {
97462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton            @Override
98462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton            public void onReceiveValue(Set<String> geolocationOrigins) {
99462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton                if ((geolocationOrigins != null) && !geolocationOrigins.isEmpty()) {
100462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton                    websiteSettings.setEnabled(true);
101462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton                }
102462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton            }
103462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton        });
104462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton    }
105462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton
106462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton    @Override
107462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton    public boolean onPreferenceChange(Preference pref, Object objValue) {
108035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck        if (getActivity() == null) {
109035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck            // We aren't attached, so don't accept preferences changes from the
110035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck            // invisible UI.
111035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck            Log.w("PageContentPreferencesFragment", "onPreferenceChange called from detached fragment!");
112035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck            return false;
113035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck        }
114035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck
11535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        if (pref.getKey().equals(PreferenceKeys.PREF_DEFAULT_ZOOM)) {
116035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck            pref.setSummary(getVisualDefaultZoomName((String) objValue));
117035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck            return true;
11835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        } else if (pref.getKey().equals(PreferenceKeys.PREF_DEFAULT_TEXT_ENCODING)) {
119035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck            pref.setSummary((String) objValue);
120035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck            return true;
12135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck        } else if (pref.getKey().equals(PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES)) {
122462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton            Boolean value = (Boolean) objValue;
123462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton            if (value.booleanValue() == true) {
124a9496e1ab66fda87ea406f31d5ec4a213e0b6307John Reck                startActivity(new Intent(BrowserActivity.ACTION_RESTART, null,
125a9496e1ab66fda87ea406f31d5ec4a213e0b6307John Reck                        getActivity(), BrowserActivity.class));
126462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton                return true;
127462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton            }
12815bdd87d767fc105f53e74a83e71967a80b78f89John Reck        } else if (pref.getKey().equals(PreferenceKeys.PREF_PLUGIN_STATE)
12915bdd87d767fc105f53e74a83e71967a80b78f89John Reck                || pref.getKey().equals(PreferenceKeys.PREF_SEARCH_ENGINE)) {
130282431b494b5d904713b9b6afd3fdc5672d49074John Reck            ListPreference lp = (ListPreference) pref;
131282431b494b5d904713b9b6afd3fdc5672d49074John Reck            lp.setValue((String) objValue);
13215bdd87d767fc105f53e74a83e71967a80b78f89John Reck            updateListPreferenceSummary(lp);
133282431b494b5d904713b9b6afd3fdc5672d49074John Reck            return false;
134462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton        }
135462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton        return false;
136462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton    }
137035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck
138035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck    private CharSequence getVisualDefaultZoomName(String enumName) {
139035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck        Resources res = getActivity().getResources();
140035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck        CharSequence[] visualNames = res.getTextArray(R.array.pref_default_zoom_choices);
141035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck        CharSequence[] enumNames = res.getTextArray(R.array.pref_default_zoom_values);
142035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck
143035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck        // Sanity check
144035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck        if (visualNames.length != enumNames.length) {
145035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck            return "";
146035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck        }
147035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck
148035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck        int length = enumNames.length;
149035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck        for (int i = 0; i < length; i++) {
150035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck            if (enumNames[i].equals(enumName)) {
151035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck                return visualNames[i];
152035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck            }
153035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck        }
154035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck
155035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck        return "";
156035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck    }
157462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton}