• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
17 package com.android.browser;
18 
19 import java.util.List;
20 import java.util.Map;
21 import java.util.Set;
22 import java.util.Vector;
23 
24 import android.content.Intent;
25 import android.net.Uri;
26 import android.os.Bundle;
27 import android.preference.EditTextPreference;
28 import android.preference.ListPreference;
29 import android.preference.Preference;
30 import android.preference.PreferenceActivity;
31 import android.preference.PreferenceScreen;
32 import android.util.Log;
33 import android.webkit.GeolocationPermissions;
34 import android.webkit.ValueCallback;
35 import android.webkit.WebStorage;
36 import android.webkit.WebView;
37 
38 public class BrowserPreferencesPage extends PreferenceActivity
39         implements Preference.OnPreferenceChangeListener {
40 
41     private String LOGTAG = "BrowserPreferencesPage";
42 
43     @Override
onCreate(Bundle savedInstanceState)44     protected void onCreate(Bundle savedInstanceState) {
45         super.onCreate(savedInstanceState);
46 
47         // Load the XML preferences file
48         addPreferencesFromResource(R.xml.browser_preferences);
49 
50         Preference e = findPreference(BrowserSettings.PREF_HOMEPAGE);
51         e.setOnPreferenceChangeListener(this);
52         e.setSummary(getPreferenceScreen().getSharedPreferences()
53                 .getString(BrowserSettings.PREF_HOMEPAGE, null));
54 
55         e = findPreference(BrowserSettings.PREF_EXTRAS_RESET_DEFAULTS);
56         e.setOnPreferenceChangeListener(this);
57 
58         e = findPreference(BrowserSettings.PREF_TEXT_SIZE);
59         e.setOnPreferenceChangeListener(this);
60         e.setSummary(getVisualTextSizeName(
61                 getPreferenceScreen().getSharedPreferences()
62                 .getString(BrowserSettings.PREF_TEXT_SIZE, null)) );
63 
64         e = findPreference(BrowserSettings.PREF_DEFAULT_ZOOM);
65         e.setOnPreferenceChangeListener(this);
66         e.setSummary(getVisualDefaultZoomName(
67                 getPreferenceScreen().getSharedPreferences()
68                 .getString(BrowserSettings.PREF_DEFAULT_ZOOM, null)) );
69 
70         e = findPreference(BrowserSettings.PREF_DEFAULT_TEXT_ENCODING);
71         e.setOnPreferenceChangeListener(this);
72 
73         if (BrowserSettings.getInstance().showDebugSettings()) {
74             addPreferencesFromResource(R.xml.debug_preferences);
75         }
76 
77         PreferenceScreen websiteSettings = (PreferenceScreen)
78             findPreference(BrowserSettings.PREF_WEBSITE_SETTINGS);
79         Intent intent = new Intent(this, WebsiteSettingsActivity.class);
80         websiteSettings.setIntent(intent);
81     }
82 
83     /*
84      * We need to set the PreferenceScreen state in onResume(), as the number of
85      * origins with active features (WebStorage, Geolocation etc) could have
86      * changed after calling the WebsiteSettingsActivity.
87      */
88     @Override
onResume()89     protected void onResume() {
90         super.onResume();
91         final PreferenceScreen websiteSettings = (PreferenceScreen)
92             findPreference(BrowserSettings.PREF_WEBSITE_SETTINGS);
93         websiteSettings.setEnabled(false);
94         WebStorage.getInstance().getOrigins(new ValueCallback<Map>() {
95             public void onReceiveValue(Map webStorageOrigins) {
96                 if ((webStorageOrigins != null) && !webStorageOrigins.isEmpty()) {
97                     websiteSettings.setEnabled(true);
98                 }
99             }
100         });
101         GeolocationPermissions.getInstance().getOrigins(new ValueCallback<Set>() {
102             public void onReceiveValue(Set geolocationOrigins) {
103                 if ((geolocationOrigins != null) && !geolocationOrigins.isEmpty()) {
104                     websiteSettings.setEnabled(true);
105                 }
106             }
107         });
108     }
109 
110     @Override
onPause()111     protected void onPause() {
112         super.onPause();
113 
114         // sync the shared preferences back to BrowserSettings
115         BrowserSettings.getInstance().syncSharedPreferences(
116                 getPreferenceScreen().getSharedPreferences());
117     }
118 
onPreferenceChange(Preference pref, Object objValue)119     public boolean onPreferenceChange(Preference pref, Object objValue) {
120         if (pref.getKey().equals(BrowserSettings.PREF_EXTRAS_RESET_DEFAULTS)) {
121             Boolean value = (Boolean) objValue;
122             if (value.booleanValue() == true) {
123                 finish();
124             }
125         } else if (pref.getKey().equals(BrowserSettings.PREF_HOMEPAGE)) {
126             String value = (String) objValue;
127             boolean needUpdate = value.indexOf(' ') != -1;
128             if (needUpdate) {
129                 value = value.trim().replace(" ", "%20");
130             }
131             if (value.length() != 0 && Uri.parse(value).getScheme() == null) {
132                 value = "http://" + value;
133                 needUpdate = true;
134             }
135             // Set the summary value.
136             pref.setSummary(value);
137             if (needUpdate) {
138                 // Update through the EditText control as it has a cached copy
139                 // of the string and it will handle persisting the value
140                 ((EditTextPreference) pref).setText(value);
141 
142                 // as we update the value above, we need to return false
143                 // here so that setText() is not called by EditTextPref
144                 // with the old value.
145                 return false;
146             } else {
147                 return true;
148             }
149         } else if (pref.getKey().equals(BrowserSettings.PREF_TEXT_SIZE)) {
150             pref.setSummary(getVisualTextSizeName((String) objValue));
151             return true;
152         } else if (pref.getKey().equals(BrowserSettings.PREF_DEFAULT_ZOOM)) {
153             pref.setSummary(getVisualDefaultZoomName((String) objValue));
154             return true;
155         } else if (pref.getKey().equals(
156                 BrowserSettings.PREF_DEFAULT_TEXT_ENCODING)) {
157             pref.setSummary((String) objValue);
158             return true;
159         }
160 
161         return false;
162     }
163 
getVisualTextSizeName(String enumName)164     private CharSequence getVisualTextSizeName(String enumName) {
165         CharSequence[] visualNames = getResources().getTextArray(
166                 R.array.pref_text_size_choices);
167         CharSequence[] enumNames = getResources().getTextArray(
168                 R.array.pref_text_size_values);
169 
170         // Sanity check
171         if (visualNames.length != enumNames.length) {
172             return "";
173         }
174 
175         for (int i = 0; i < enumNames.length; i++) {
176             if (enumNames[i].equals(enumName)) {
177                 return visualNames[i];
178             }
179         }
180 
181         return "";
182     }
183 
getVisualDefaultZoomName(String enumName)184     private CharSequence getVisualDefaultZoomName(String enumName) {
185         CharSequence[] visualNames = getResources().getTextArray(
186                 R.array.pref_default_zoom_choices);
187         CharSequence[] enumNames = getResources().getTextArray(
188                 R.array.pref_default_zoom_values);
189 
190         // Sanity check
191         if (visualNames.length != enumNames.length) {
192             return "";
193         }
194 
195         for (int i = 0; i < enumNames.length; i++) {
196             if (enumNames[i].equals(enumName)) {
197                 return visualNames[i];
198             }
199         }
200 
201         return "";
202     }
203 }
204