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