| /* |
| * Copyright (C) 2010 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License |
| */ |
| |
| package com.android.browser.preferences; |
| |
| import com.android.browser.BrowserActivity; |
| import com.android.browser.PreferenceKeys; |
| import com.android.browser.R; |
| |
| import android.content.Intent; |
| import android.content.res.Resources; |
| import android.os.Bundle; |
| import android.preference.ListPreference; |
| import android.preference.Preference; |
| import android.preference.PreferenceFragment; |
| import android.preference.PreferenceScreen; |
| import android.util.Log; |
| import android.webkit.GeolocationPermissions; |
| import android.webkit.ValueCallback; |
| import android.webkit.WebStorage; |
| |
| import java.util.Map; |
| import java.util.Set; |
| |
| public class AdvancedPreferencesFragment extends PreferenceFragment |
| implements Preference.OnPreferenceChangeListener { |
| |
| @Override |
| public void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| |
| // Load the XML preferences file |
| addPreferencesFromResource(R.xml.advanced_preferences); |
| |
| PreferenceScreen websiteSettings = (PreferenceScreen) findPreference( |
| PreferenceKeys.PREF_WEBSITE_SETTINGS); |
| websiteSettings.setFragment(WebsiteSettingsFragment.class.getName()); |
| |
| Preference e = findPreference(PreferenceKeys.PREF_DEFAULT_ZOOM); |
| e.setOnPreferenceChangeListener(this); |
| e.setSummary(getVisualDefaultZoomName( |
| getPreferenceScreen().getSharedPreferences() |
| .getString(PreferenceKeys.PREF_DEFAULT_ZOOM, null)) ); |
| |
| e = findPreference(PreferenceKeys.PREF_DEFAULT_TEXT_ENCODING); |
| e.setOnPreferenceChangeListener(this); |
| |
| e = findPreference(PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES); |
| e.setOnPreferenceChangeListener(this); |
| |
| e = findPreference(PreferenceKeys.PREF_SEARCH_ENGINE); |
| e.setOnPreferenceChangeListener(this); |
| updateListPreferenceSummary((ListPreference) e); |
| |
| e = findPreference(PreferenceKeys.PREF_PLUGIN_STATE); |
| e.setOnPreferenceChangeListener(this); |
| updateListPreferenceSummary((ListPreference) e); |
| } |
| |
| void updateListPreferenceSummary(ListPreference e) { |
| e.setSummary(e.getEntry()); |
| } |
| |
| /* |
| * We need to set the PreferenceScreen state in onResume(), as the number of |
| * origins with active features (WebStorage, Geolocation etc) could have |
| * changed after calling the WebsiteSettingsActivity. |
| */ |
| @Override |
| public void onResume() { |
| super.onResume(); |
| final PreferenceScreen websiteSettings = (PreferenceScreen) findPreference( |
| PreferenceKeys.PREF_WEBSITE_SETTINGS); |
| websiteSettings.setEnabled(false); |
| WebStorage.getInstance().getOrigins(new ValueCallback<Map>() { |
| @Override |
| public void onReceiveValue(Map webStorageOrigins) { |
| if ((webStorageOrigins != null) && !webStorageOrigins.isEmpty()) { |
| websiteSettings.setEnabled(true); |
| } |
| } |
| }); |
| GeolocationPermissions.getInstance().getOrigins(new ValueCallback<Set<String> >() { |
| @Override |
| public void onReceiveValue(Set<String> geolocationOrigins) { |
| if ((geolocationOrigins != null) && !geolocationOrigins.isEmpty()) { |
| websiteSettings.setEnabled(true); |
| } |
| } |
| }); |
| } |
| |
| @Override |
| public boolean onPreferenceChange(Preference pref, Object objValue) { |
| if (getActivity() == null) { |
| // We aren't attached, so don't accept preferences changes from the |
| // invisible UI. |
| Log.w("PageContentPreferencesFragment", "onPreferenceChange called from detached fragment!"); |
| return false; |
| } |
| |
| if (pref.getKey().equals(PreferenceKeys.PREF_DEFAULT_ZOOM)) { |
| pref.setSummary(getVisualDefaultZoomName((String) objValue)); |
| return true; |
| } else if (pref.getKey().equals(PreferenceKeys.PREF_DEFAULT_TEXT_ENCODING)) { |
| pref.setSummary((String) objValue); |
| return true; |
| } else if (pref.getKey().equals(PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES)) { |
| Boolean value = (Boolean) objValue; |
| if (value.booleanValue() == true) { |
| startActivity(new Intent(BrowserActivity.ACTION_RESTART, null, |
| getActivity(), BrowserActivity.class)); |
| return true; |
| } |
| } else if (pref.getKey().equals(PreferenceKeys.PREF_PLUGIN_STATE) |
| || pref.getKey().equals(PreferenceKeys.PREF_SEARCH_ENGINE)) { |
| ListPreference lp = (ListPreference) pref; |
| lp.setValue((String) objValue); |
| updateListPreferenceSummary(lp); |
| return false; |
| } |
| return false; |
| } |
| |
| private CharSequence getVisualDefaultZoomName(String enumName) { |
| Resources res = getActivity().getResources(); |
| CharSequence[] visualNames = res.getTextArray(R.array.pref_default_zoom_choices); |
| CharSequence[] enumNames = res.getTextArray(R.array.pref_default_zoom_values); |
| |
| // Sanity check |
| if (visualNames.length != enumNames.length) { |
| return ""; |
| } |
| |
| int length = enumNames.length; |
| for (int i = 0; i < length; i++) { |
| if (enumNames[i].equals(enumName)) { |
| return visualNames[i]; |
| } |
| } |
| |
| return ""; |
| } |
| } |