blob: 2524eb8ee7bea775e6a539d70a2cd3c071da261d [file] [log] [blame]
The Android Open Source Project0c908882009-03-03 19:32:16 -08001/*
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;
Nicolas Roard78a98e42009-05-11 13:34:17 +010020import java.util.Vector;
The Android Open Source Project0c908882009-03-03 19:32:16 -080021
Nicolas Roard78a98e42009-05-11 13:34:17 +010022import android.content.Intent;
The Android Open Source Project0c908882009-03-03 19:32:16 -080023import android.net.Uri;
24import android.os.Bundle;
25import android.preference.EditTextPreference;
Nicolas Roard78a98e42009-05-11 13:34:17 +010026import android.preference.ListPreference;
The Android Open Source Project0c908882009-03-03 19:32:16 -080027import android.preference.Preference;
28import android.preference.PreferenceActivity;
Nicolas Roard78a98e42009-05-11 13:34:17 +010029import android.preference.PreferenceScreen;
30import android.util.Log;
31import android.webkit.Plugin;
32import android.webkit.WebStorage;
The Android Open Source Project0c908882009-03-03 19:32:16 -080033import android.webkit.WebView;
34import android.webkit.Plugin;
35
36public class BrowserPreferencesPage extends PreferenceActivity
37 implements Preference.OnPreferenceChangeListener,
38 Preference.OnPreferenceClickListener {
39
Nicolas Roard78a98e42009-05-11 13:34:17 +010040 String TAG = "BrowserPreferencesPage";
41
The Android Open Source Project0c908882009-03-03 19:32:16 -080042 @Override
43 protected void onCreate(Bundle savedInstanceState) {
44 super.onCreate(savedInstanceState);
45
46 // Load the XML preferences file
47 addPreferencesFromResource(R.xml.browser_preferences);
48
49 Preference e = findPreference(BrowserSettings.PREF_HOMEPAGE);
50 e.setOnPreferenceChangeListener(this);
51 e.setSummary(getPreferenceScreen().getSharedPreferences()
52 .getString(BrowserSettings.PREF_HOMEPAGE, null));
53
54 e = findPreference(BrowserSettings.PREF_EXTRAS_RESET_DEFAULTS);
55 e.setOnPreferenceChangeListener(this);
56
57 e = findPreference(BrowserSettings.PREF_TEXT_SIZE);
58 e.setOnPreferenceChangeListener(this);
59 e.setSummary(getVisualTextSizeName(
60 getPreferenceScreen().getSharedPreferences()
61 .getString(BrowserSettings.PREF_TEXT_SIZE, null)) );
62
Grace Kloba2f830682009-06-25 11:08:53 -070063 e = findPreference(BrowserSettings.PREF_DEFAULT_ZOOM);
64 e.setOnPreferenceChangeListener(this);
65 e.setSummary(getVisualDefaultZoomName(
66 getPreferenceScreen().getSharedPreferences()
67 .getString(BrowserSettings.PREF_DEFAULT_ZOOM, null)) );
68
The Android Open Source Project0c908882009-03-03 19:32:16 -080069 e = findPreference(BrowserSettings.PREF_DEFAULT_TEXT_ENCODING);
70 e.setOnPreferenceChangeListener(this);
71
72 if (BrowserSettings.getInstance().showDebugSettings()) {
73 addPreferencesFromResource(R.xml.debug_preferences);
74 }
75
76 e = findPreference(BrowserSettings.PREF_GEARS_SETTINGS);
77 e.setOnPreferenceClickListener(this);
Nicolas Roard78a98e42009-05-11 13:34:17 +010078
Nicolas Roard6f480422009-05-12 16:31:33 +010079 PreferenceScreen manageDatabases = (PreferenceScreen)
Nicolas Roarde46990e2009-06-19 16:27:49 +010080 findPreference(BrowserSettings.PREF_WEBSITE_SETTINGS);
81 Intent intent = new Intent(this, WebsiteSettingsActivity.class);
82 manageDatabases.setIntent(intent);
83 }
Nicolas Roard78a98e42009-05-11 13:34:17 +010084
Nicolas Roarde46990e2009-06-19 16:27:49 +010085 /*
86 * We need to set the manageDatabases PreferenceScreen state
87 * in the onResume(), as the number of origins with databases
88 * could have changed after calling the WebsiteSettingsActivity.
89 */
90 @Override
91 protected void onResume() {
92 super.onResume();
93 PreferenceScreen manageDatabases = (PreferenceScreen)
94 findPreference(BrowserSettings.PREF_WEBSITE_SETTINGS);
Nicolas Roard6f480422009-05-12 16:31:33 +010095 manageDatabases.setEnabled(false);
Nicolas Roarde46990e2009-06-19 16:27:49 +010096 Vector origins = WebStorage.getInstance().getOrigins();
97 if ((origins != null) && (origins.size() > 0)) {
98 manageDatabases.setEnabled(true);
Nicolas Roard78a98e42009-05-11 13:34:17 +010099 }
The Android Open Source Project0c908882009-03-03 19:32:16 -0800100 }
101
102 @Override
103 protected void onPause() {
104 super.onPause();
105
106 // sync the shared preferences back to BrowserSettings
107 BrowserSettings.getInstance().syncSharedPreferences(
108 getPreferenceScreen().getSharedPreferences());
109 }
110
111 public boolean onPreferenceChange(Preference pref, Object objValue) {
112 if (pref.getKey().equals(BrowserSettings.PREF_EXTRAS_RESET_DEFAULTS)) {
113 Boolean value = (Boolean) objValue;
114 if (value.booleanValue() == true) {
115 finish();
116 }
117 } else if (pref.getKey().equals(BrowserSettings.PREF_HOMEPAGE)) {
118 String value = (String) objValue;
119 boolean needUpdate = value.indexOf(' ') != -1;
120 if (needUpdate) {
121 value = value.trim().replace(" ", "%20");
122 }
123 if (value.length() != 0 && Uri.parse(value).getScheme() == null) {
124 value = "http://" + value;
125 needUpdate = true;
126 }
127 // Set the summary value.
128 pref.setSummary(value);
129 if (needUpdate) {
130 // Update through the EditText control as it has a cached copy
131 // of the string and it will handle persisting the value
132 ((EditTextPreference) pref).setText(value);
133
134 // as we update the value above, we need to return false
135 // here so that setText() is not called by EditTextPref
136 // with the old value.
137 return false;
138 } else {
139 return true;
140 }
141 } else if (pref.getKey().equals(BrowserSettings.PREF_TEXT_SIZE)) {
142 pref.setSummary(getVisualTextSizeName((String) objValue));
143 return true;
Grace Kloba2f830682009-06-25 11:08:53 -0700144 } else if (pref.getKey().equals(BrowserSettings.PREF_DEFAULT_ZOOM)) {
145 pref.setSummary(getVisualDefaultZoomName((String) objValue));
146 return true;
The Android Open Source Project0c908882009-03-03 19:32:16 -0800147 } else if (pref.getKey().equals(
148 BrowserSettings.PREF_DEFAULT_TEXT_ENCODING)) {
149 pref.setSummary((String) objValue);
150 return true;
151 }
152
153 return false;
154 }
155
156 public boolean onPreferenceClick(Preference pref) {
157 if (pref.getKey().equals(BrowserSettings.PREF_GEARS_SETTINGS)) {
158 List<Plugin> loadedPlugins = WebView.getPluginList().getList();
159 for(Plugin p : loadedPlugins) {
160 if (p.getName().equals("gears")) {
161 p.dispatchClickEvent(this);
162 return true;
163 }
164 }
165
166 }
167 return true;
168 }
Grace Kloba2f830682009-06-25 11:08:53 -0700169
The Android Open Source Project0c908882009-03-03 19:32:16 -0800170 private CharSequence getVisualTextSizeName(String enumName) {
Grace Kloba2f830682009-06-25 11:08:53 -0700171 CharSequence[] visualNames = getResources().getTextArray(
172 R.array.pref_text_size_choices);
173 CharSequence[] enumNames = getResources().getTextArray(
174 R.array.pref_text_size_values);
175
The Android Open Source Project0c908882009-03-03 19:32:16 -0800176 // Sanity check
177 if (visualNames.length != enumNames.length) {
178 return "";
179 }
Grace Kloba2f830682009-06-25 11:08:53 -0700180
The Android Open Source Project0c908882009-03-03 19:32:16 -0800181 for (int i = 0; i < enumNames.length; i++) {
182 if (enumNames[i].equals(enumName)) {
183 return visualNames[i];
184 }
185 }
Grace Kloba2f830682009-06-25 11:08:53 -0700186
187 return "";
188 }
189
190 private CharSequence getVisualDefaultZoomName(String enumName) {
191 CharSequence[] visualNames = getResources().getTextArray(
192 R.array.pref_default_zoom_choices);
193 CharSequence[] enumNames = getResources().getTextArray(
194 R.array.pref_default_zoom_values);
195
196 // Sanity check
197 if (visualNames.length != enumNames.length) {
198 return "";
199 }
200
201 for (int i = 0; i < enumNames.length; i++) {
202 if (enumNames[i].equals(enumName)) {
203 return visualNames[i];
204 }
205 }
206
The Android Open Source Project0c908882009-03-03 19:32:16 -0800207 return "";
208 }
209}