BrowserPreferencesPage.java revision b81735a96d5e44ff9acf275619ad797ec0467670
1/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.browser;
18
19import java.util.List;
20import java.util.Vector;
21import java.util.Set;
22
23import android.content.Intent;
24import android.net.Uri;
25import android.os.Bundle;
26import android.preference.EditTextPreference;
27import android.preference.ListPreference;
28import android.preference.Preference;
29import android.preference.PreferenceActivity;
30import android.preference.PreferenceScreen;
31import android.util.Log;
32import android.webkit.GeolocationPermissions;
33import android.webkit.WebStorage;
34import android.webkit.WebView;
35
36public class BrowserPreferencesPage extends PreferenceActivity
37        implements Preference.OnPreferenceChangeListener {
38
39    String TAG = "BrowserPreferencesPage";
40
41    @Override
42    protected void onCreate(Bundle savedInstanceState) {
43        super.onCreate(savedInstanceState);
44
45        // Load the XML preferences file
46        addPreferencesFromResource(R.xml.browser_preferences);
47
48        Preference e = findPreference(BrowserSettings.PREF_HOMEPAGE);
49        e.setOnPreferenceChangeListener(this);
50        e.setSummary(getPreferenceScreen().getSharedPreferences()
51                .getString(BrowserSettings.PREF_HOMEPAGE, null));
52
53        e = findPreference(BrowserSettings.PREF_EXTRAS_RESET_DEFAULTS);
54        e.setOnPreferenceChangeListener(this);
55
56        e = findPreference(BrowserSettings.PREF_TEXT_SIZE);
57        e.setOnPreferenceChangeListener(this);
58        e.setSummary(getVisualTextSizeName(
59                getPreferenceScreen().getSharedPreferences()
60                .getString(BrowserSettings.PREF_TEXT_SIZE, null)) );
61
62        e = findPreference(BrowserSettings.PREF_DEFAULT_ZOOM);
63        e.setOnPreferenceChangeListener(this);
64        e.setSummary(getVisualDefaultZoomName(
65                getPreferenceScreen().getSharedPreferences()
66                .getString(BrowserSettings.PREF_DEFAULT_ZOOM, null)) );
67
68        e = findPreference(BrowserSettings.PREF_DEFAULT_TEXT_ENCODING);
69        e.setOnPreferenceChangeListener(this);
70
71        if (BrowserSettings.getInstance().showDebugSettings()) {
72            addPreferencesFromResource(R.xml.debug_preferences);
73        }
74
75        PreferenceScreen websiteSettings = (PreferenceScreen)
76            findPreference(BrowserSettings.PREF_WEBSITE_SETTINGS);
77        Intent intent = new Intent(this, WebsiteSettingsActivity.class);
78        websiteSettings.setIntent(intent);
79    }
80
81    /*
82     * We need to set the PreferenceScreen state in onResume(), as the number of
83     * origins with active features (WebStorage, Geolocation etc) could have
84     * changed after calling the WebsiteSettingsActivity.
85     */
86    @Override
87    protected void onResume() {
88        super.onResume();
89        PreferenceScreen websiteSettings = (PreferenceScreen)
90            findPreference(BrowserSettings.PREF_WEBSITE_SETTINGS);
91        Set webStorageOrigins = WebStorage.getInstance().getOrigins();
92        Set geolocationOrigins =
93            GeolocationPermissions.getInstance().getOrigins();
94        websiteSettings.setEnabled(
95            ((webStorageOrigins != null) && !webStorageOrigins.isEmpty()) ||
96            ((geolocationOrigins != null) && !geolocationOrigins.isEmpty()));
97    }
98
99    @Override
100    protected void onPause() {
101        super.onPause();
102
103        // sync the shared preferences back to BrowserSettings
104        BrowserSettings.getInstance().syncSharedPreferences(
105                getPreferenceScreen().getSharedPreferences());
106    }
107
108    public boolean onPreferenceChange(Preference pref, Object objValue) {
109        if (pref.getKey().equals(BrowserSettings.PREF_EXTRAS_RESET_DEFAULTS)) {
110            Boolean value = (Boolean) objValue;
111            if (value.booleanValue() == true) {
112                finish();
113            }
114        } else if (pref.getKey().equals(BrowserSettings.PREF_HOMEPAGE)) {
115            String value = (String) objValue;
116            boolean needUpdate = value.indexOf(' ') != -1;
117            if (needUpdate) {
118                value = value.trim().replace(" ", "%20");
119            }
120            if (value.length() != 0 && Uri.parse(value).getScheme() == null) {
121                value = "http://" + value;
122                needUpdate = true;
123            }
124            // Set the summary value.
125            pref.setSummary(value);
126            if (needUpdate) {
127                // Update through the EditText control as it has a cached copy
128                // of the string and it will handle persisting the value
129                ((EditTextPreference) pref).setText(value);
130
131                // as we update the value above, we need to return false
132                // here so that setText() is not called by EditTextPref
133                // with the old value.
134                return false;
135            } else {
136                return true;
137            }
138        } else if (pref.getKey().equals(BrowserSettings.PREF_TEXT_SIZE)) {
139            pref.setSummary(getVisualTextSizeName((String) objValue));
140            return true;
141        } else if (pref.getKey().equals(BrowserSettings.PREF_DEFAULT_ZOOM)) {
142            pref.setSummary(getVisualDefaultZoomName((String) objValue));
143            return true;
144        } else if (pref.getKey().equals(
145                BrowserSettings.PREF_DEFAULT_TEXT_ENCODING)) {
146            pref.setSummary((String) objValue);
147            return true;
148        }
149
150        return false;
151    }
152
153    private CharSequence getVisualTextSizeName(String enumName) {
154        CharSequence[] visualNames = getResources().getTextArray(
155                R.array.pref_text_size_choices);
156        CharSequence[] enumNames = getResources().getTextArray(
157                R.array.pref_text_size_values);
158
159        // Sanity check
160        if (visualNames.length != enumNames.length) {
161            return "";
162        }
163
164        for (int i = 0; i < enumNames.length; i++) {
165            if (enumNames[i].equals(enumName)) {
166                return visualNames[i];
167            }
168        }
169
170        return "";
171    }
172
173    private CharSequence getVisualDefaultZoomName(String enumName) {
174        CharSequence[] visualNames = getResources().getTextArray(
175                R.array.pref_default_zoom_choices);
176        CharSequence[] enumNames = getResources().getTextArray(
177                R.array.pref_default_zoom_values);
178
179        // Sanity check
180        if (visualNames.length != enumNames.length) {
181            return "";
182        }
183
184        for (int i = 0; i < enumNames.length; i++) {
185            if (enumNames[i].equals(enumName)) {
186                return visualNames[i];
187            }
188        }
189
190        return "";
191    }
192}
193