1462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton/* 2462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * Copyright (C) 2010 The Android Open Source Project 3462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * 4462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * Licensed under the Apache License, Version 2.0 (the "License"); 5462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * you may not use this file except in compliance with the License. 6462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * You may obtain a copy of the License at 7462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * 8462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * http://www.apache.org/licenses/LICENSE-2.0 9462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * 10462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * Unless required by applicable law or agreed to in writing, software 11462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * distributed under the License is distributed on an "AS IS" BASIS, 12462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * See the License for the specific language governing permissions and 14462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * limitations under the License 15462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton */ 16462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton 17462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonpackage com.android.browser.preferences; 18462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton 19a9496e1ab66fda87ea406f31d5ec4a213e0b6307John Reckimport com.android.browser.BrowserActivity; 2035e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reckimport com.android.browser.PreferenceKeys; 21462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport com.android.browser.R; 22462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton 23a9496e1ab66fda87ea406f31d5ec4a213e0b6307John Reckimport android.content.Intent; 24035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reckimport android.content.res.Resources; 25462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport android.os.Bundle; 26282431b494b5d904713b9b6afd3fdc5672d49074John Reckimport android.preference.ListPreference; 27462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport android.preference.Preference; 28462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport android.preference.PreferenceFragment; 29462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport android.preference.PreferenceScreen; 30035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reckimport android.util.Log; 31462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport android.webkit.GeolocationPermissions; 32462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport android.webkit.ValueCallback; 33462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport android.webkit.WebStorage; 34462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton 35462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport java.util.Map; 36462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamiltonimport java.util.Set; 37462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton 38035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reckpublic class AdvancedPreferencesFragment extends PreferenceFragment 39462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton implements Preference.OnPreferenceChangeListener { 40462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton 41462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton @Override 42462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton public void onCreate(Bundle savedInstanceState) { 43462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton super.onCreate(savedInstanceState); 44462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton 45462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton // Load the XML preferences file 46462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton addPreferencesFromResource(R.xml.advanced_preferences); 47462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton 48462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton PreferenceScreen websiteSettings = (PreferenceScreen) findPreference( 4935e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck PreferenceKeys.PREF_WEBSITE_SETTINGS); 5010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck websiteSettings.setFragment(WebsiteSettingsFragment.class.getName()); 51035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck 5235e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck Preference e = findPreference(PreferenceKeys.PREF_DEFAULT_ZOOM); 53035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck e.setOnPreferenceChangeListener(this); 54035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck e.setSummary(getVisualDefaultZoomName( 55035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck getPreferenceScreen().getSharedPreferences() 5635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck .getString(PreferenceKeys.PREF_DEFAULT_ZOOM, null)) ); 57035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck 5835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck e = findPreference(PreferenceKeys.PREF_DEFAULT_TEXT_ENCODING); 59035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck e.setOnPreferenceChangeListener(this); 60282431b494b5d904713b9b6afd3fdc5672d49074John Reck 6135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck e = findPreference(PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES); 62a9496e1ab66fda87ea406f31d5ec4a213e0b6307John Reck e.setOnPreferenceChangeListener(this); 63a9496e1ab66fda87ea406f31d5ec4a213e0b6307John Reck 6415bdd87d767fc105f53e74a83e71967a80b78f89John Reck e = findPreference(PreferenceKeys.PREF_SEARCH_ENGINE); 6515bdd87d767fc105f53e74a83e71967a80b78f89John Reck e.setOnPreferenceChangeListener(this); 6615bdd87d767fc105f53e74a83e71967a80b78f89John Reck updateListPreferenceSummary((ListPreference) e); 6715bdd87d767fc105f53e74a83e71967a80b78f89John Reck 6835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck e = findPreference(PreferenceKeys.PREF_PLUGIN_STATE); 69282431b494b5d904713b9b6afd3fdc5672d49074John Reck e.setOnPreferenceChangeListener(this); 7015bdd87d767fc105f53e74a83e71967a80b78f89John Reck updateListPreferenceSummary((ListPreference) e); 71282431b494b5d904713b9b6afd3fdc5672d49074John Reck } 72282431b494b5d904713b9b6afd3fdc5672d49074John Reck 7315bdd87d767fc105f53e74a83e71967a80b78f89John Reck void updateListPreferenceSummary(ListPreference e) { 74282431b494b5d904713b9b6afd3fdc5672d49074John Reck e.setSummary(e.getEntry()); 75462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton } 76462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton 77462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton /* 78462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * We need to set the PreferenceScreen state in onResume(), as the number of 79462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * origins with active features (WebStorage, Geolocation etc) could have 80462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton * changed after calling the WebsiteSettingsActivity. 81462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton */ 82462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton @Override 83462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton public void onResume() { 84462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton super.onResume(); 85462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton final PreferenceScreen websiteSettings = (PreferenceScreen) findPreference( 8635e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck PreferenceKeys.PREF_WEBSITE_SETTINGS); 87462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton websiteSettings.setEnabled(false); 88462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton WebStorage.getInstance().getOrigins(new ValueCallback<Map>() { 89462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton @Override 90462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton public void onReceiveValue(Map webStorageOrigins) { 91462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton if ((webStorageOrigins != null) && !webStorageOrigins.isEmpty()) { 92462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton websiteSettings.setEnabled(true); 93462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton } 94462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton } 95462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton }); 96462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton GeolocationPermissions.getInstance().getOrigins(new ValueCallback<Set<String> >() { 97462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton @Override 98462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton public void onReceiveValue(Set<String> geolocationOrigins) { 99462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton if ((geolocationOrigins != null) && !geolocationOrigins.isEmpty()) { 100462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton websiteSettings.setEnabled(true); 101462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton } 102462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton } 103462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton }); 104462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton } 105462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton 106462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton @Override 107462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton public boolean onPreferenceChange(Preference pref, Object objValue) { 108035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck if (getActivity() == null) { 109035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck // We aren't attached, so don't accept preferences changes from the 110035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck // invisible UI. 111035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck Log.w("PageContentPreferencesFragment", "onPreferenceChange called from detached fragment!"); 112035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck return false; 113035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck } 114035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck 11535e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck if (pref.getKey().equals(PreferenceKeys.PREF_DEFAULT_ZOOM)) { 116035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck pref.setSummary(getVisualDefaultZoomName((String) objValue)); 117035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck return true; 11835e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck } else if (pref.getKey().equals(PreferenceKeys.PREF_DEFAULT_TEXT_ENCODING)) { 119035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck pref.setSummary((String) objValue); 120035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck return true; 12135e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck } else if (pref.getKey().equals(PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES)) { 122462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton Boolean value = (Boolean) objValue; 123462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton if (value.booleanValue() == true) { 124a9496e1ab66fda87ea406f31d5ec4a213e0b6307John Reck startActivity(new Intent(BrowserActivity.ACTION_RESTART, null, 125a9496e1ab66fda87ea406f31d5ec4a213e0b6307John Reck getActivity(), BrowserActivity.class)); 126462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton return true; 127462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton } 12815bdd87d767fc105f53e74a83e71967a80b78f89John Reck } else if (pref.getKey().equals(PreferenceKeys.PREF_PLUGIN_STATE) 12915bdd87d767fc105f53e74a83e71967a80b78f89John Reck || pref.getKey().equals(PreferenceKeys.PREF_SEARCH_ENGINE)) { 130282431b494b5d904713b9b6afd3fdc5672d49074John Reck ListPreference lp = (ListPreference) pref; 131282431b494b5d904713b9b6afd3fdc5672d49074John Reck lp.setValue((String) objValue); 13215bdd87d767fc105f53e74a83e71967a80b78f89John Reck updateListPreferenceSummary(lp); 133282431b494b5d904713b9b6afd3fdc5672d49074John Reck return false; 134462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton } 135462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton return false; 136462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton } 137035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck 138035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck private CharSequence getVisualDefaultZoomName(String enumName) { 139035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck Resources res = getActivity().getResources(); 140035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck CharSequence[] visualNames = res.getTextArray(R.array.pref_default_zoom_choices); 141035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck CharSequence[] enumNames = res.getTextArray(R.array.pref_default_zoom_values); 142035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck 143035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck // Sanity check 144035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck if (visualNames.length != enumNames.length) { 145035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck return ""; 146035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck } 147035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck 148035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck int length = enumNames.length; 149035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck for (int i = 0; i < length; i++) { 150035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck if (enumNames[i].equals(enumName)) { 151035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck return visualNames[i]; 152035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck } 153035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck } 154035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck 155035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck return ""; 156035a56419c1d2562be1e86273ebfe4c43c4f0c66John Reck } 157462b8e8442d0fb734b4fe4bd13c21303f2b154fcJeff Hamilton}