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