diff options
-rw-r--r-- | Android.mk | 2 | ||||
-rw-r--r-- | CleanSpec.mk | 1 | ||||
-rw-r--r-- | proguard.flags | 2 | ||||
-rw-r--r-- | res/xml/advanced_preferences.xml | 41 | ||||
-rw-r--r-- | res/xml/debug_preferences.xml | 89 | ||||
-rw-r--r-- | res/xml/page_content_preferences.xml | 98 | ||||
-rw-r--r-- | res/xml/preference_headers.xml | 38 | ||||
-rw-r--r-- | res/xml/privacy_preferences.xml | 85 | ||||
-rw-r--r-- | res/xml/security_preferences.xml | 40 | ||||
-rw-r--r-- | src/com/android/browser/BrowserHomepagePreference.java | 2 | ||||
-rw-r--r-- | src/com/android/browser/BrowserPreferencesPage.java | 190 | ||||
-rw-r--r-- | src/com/android/browser/BrowserSettings.java | 35 | ||||
-rw-r--r-- | src/com/android/browser/preferences/AdvancedPreferencesFragment.java | 91 | ||||
-rw-r--r-- | src/com/android/browser/preferences/DebugPreferencesFragment.java | 32 | ||||
-rw-r--r-- | src/com/android/browser/preferences/PageContentPreferencesFragment.java | 143 | ||||
-rw-r--r-- | src/com/android/browser/preferences/PrivacyPreferencesFragment.java | 55 | ||||
-rw-r--r-- | src/com/android/browser/preferences/SecurityPreferencesFragment.java | 32 |
17 files changed, 725 insertions, 251 deletions
@@ -12,6 +12,8 @@ LOCAL_SRC_FILES := \ LOCAL_PACKAGE_NAME := Browser +LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.flags + LOCAL_EMMA_COVERAGE_FILTER := *,-com.android.common.* include $(BUILD_PACKAGE) diff --git a/CleanSpec.mk b/CleanSpec.mk index b84e1b6..722b4a4 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -43,6 +43,7 @@ #$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates) #$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f) #$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*) +$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Browser_intermediates) # ************************************************ # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST diff --git a/proguard.flags b/proguard.flags new file mode 100644 index 0000000..888c238 --- /dev/null +++ b/proguard.flags @@ -0,0 +1,2 @@ +# Most of the classes in this package are fragments only referenced from XML +-keep class com.android.browser.preferences.* diff --git a/res/xml/advanced_preferences.xml b/res/xml/advanced_preferences.xml new file mode 100644 index 0000000..075232d --- /dev/null +++ b/res/xml/advanced_preferences.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2008 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. +--> + +<PreferenceScreen + xmlns:android="http://schemas.android.com/apk/res/android"> + + <!-- Entries and values in this list are set dynamically. --> + <com.android.browser.search.SearchEnginePreference + android:key="search_engine" + android:title="@string/pref_content_search_engine" + android:defaultValue="google" + android:summary="@string/pref_content_search_engine_summary" + android:dialogTitle="@string/pref_content_search_engine" /> + + <PreferenceScreen + android:key="website_settings" + android:title="@string/pref_extras_website_settings" + android:summary="@string/pref_extras_website_settings_summary" /> + + <com.android.browser.BrowserYesNoPreference + android:key="reset_default_preferences" + android:title="@string/pref_extras_reset_default" + android:summary="@string/pref_extras_reset_default_summary" + android:dialogMessage="@string/pref_extras_reset_default_dlg" + android:dialogTitle="@string/pref_extras_reset_default_dlg_title" + android:dialogIcon="@android:drawable/ic_dialog_alert" /> + +</PreferenceScreen> diff --git a/res/xml/debug_preferences.xml b/res/xml/debug_preferences.xml index c1ed1e6..54b2bd5 100644 --- a/res/xml/debug_preferences.xml +++ b/res/xml/debug_preferences.xml @@ -16,59 +16,54 @@ <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > - <PreferenceCategory - android:title="@string/pref_development_title" - android:key="debug_menu" > - <!-- The javascript console is enabled by default when the user has - also enabled debug mode by navigating to about:debug. --> - <CheckBoxPreference - android:key="javascript_console" - android:defaultValue="true" - android:title="@string/pref_development_error_console" /> - - <CheckBoxPreference - android:key="small_screen" - android:defaultValue="false" - android:title="@string/pref_development_single_column_rendering" /> - - <CheckBoxPreference - android:key="wide_viewport" - android:defaultValue="true" - android:title="@string/pref_development_viewport" /> + <!-- The javascript console is enabled by default when the user has + also enabled debug mode by navigating to about:debug. --> + <CheckBoxPreference + android:key="javascript_console" + android:defaultValue="true" + android:title="@string/pref_development_error_console" /> - <CheckBoxPreference - android:key="normal_layout" - android:defaultValue="false" - android:title="@string/pref_development_normal_rendering" /> - - <CheckBoxPreference - android:key="enable_tracing" - android:defaultValue="false" - android:title="@string/pref_development_trace" /> + <CheckBoxPreference + android:key="small_screen" + android:defaultValue="false" + android:title="@string/pref_development_single_column_rendering" /> + + <CheckBoxPreference + android:key="wide_viewport" + android:defaultValue="true" + android:title="@string/pref_development_viewport" /> + + <CheckBoxPreference + android:key="normal_layout" + android:defaultValue="false" + android:title="@string/pref_development_normal_rendering" /> - <CheckBoxPreference - android:key="enable_light_touch" - android:defaultValue="false" - android:title="Enable light touch" /> + <CheckBoxPreference + android:key="enable_tracing" + android:defaultValue="false" + android:title="@string/pref_development_trace" /> - <CheckBoxPreference - android:key="enable_nav_dump" - android:defaultValue="false" - android:title="@string/pref_development_nav_dump" /> + <CheckBoxPreference + android:key="enable_light_touch" + android:defaultValue="false" + android:title="Enable light touch" /> - <EditTextPreference - android:key="js_engine_flags" - android:title="@string/js_engine_flags" - android:singleLine="true" /> + <CheckBoxPreference + android:key="enable_nav_dump" + android:defaultValue="false" + android:title="@string/pref_development_nav_dump" /> - <ListPreference - android:key="user_agent" - android:title="@string/pref_development_uastring" - android:entries="@array/pref_development_ua_choices" - android:entryValues="@array/pref_development_ua_values" - android:defaultValue="0"/> + <EditTextPreference + android:key="js_engine_flags" + android:title="@string/js_engine_flags" + android:singleLine="true" /> - </PreferenceCategory> + <ListPreference + android:key="user_agent" + android:title="@string/pref_development_uastring" + android:entries="@array/pref_development_ua_choices" + android:entryValues="@array/pref_development_ua_values" + android:defaultValue="0"/> </PreferenceScreen> diff --git a/res/xml/page_content_preferences.xml b/res/xml/page_content_preferences.xml new file mode 100644 index 0000000..84497dc --- /dev/null +++ b/res/xml/page_content_preferences.xml @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2008 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. +--> + +<PreferenceScreen + xmlns:android="http://schemas.android.com/apk/res/android"> + + <ListPreference + android:key="text_size" + android:title="@string/pref_text_size" + android:defaultValue="NORMAL" + android:entries="@array/pref_text_size_choices" + android:entryValues="@array/pref_text_size_values" + android:dialogTitle="@string/pref_text_size_dialogtitle" /> + + <ListPreference + android:key="default_zoom" + android:title="@string/pref_default_zoom" + android:defaultValue="MEDIUM" + android:entries="@array/pref_default_zoom_choices" + android:entryValues="@array/pref_default_zoom_values" + android:dialogTitle="@string/pref_default_zoom_dialogtitle" /> + + <CheckBoxPreference + android:key="load_page" + android:defaultValue="true" + android:title="@string/pref_content_load_page" + android:summary="@string/pref_content_load_page_summary" /> + + <ListPreference + android:key="default_text_encoding" + android:title="@string/pref_default_text_encoding" + android:defaultValue="@string/pref_default_text_encoding_default" + android:entries="@array/pref_default_text_encoding_choices" + android:entryValues="@array/pref_default_text_encoding_values" + android:dialogTitle="@string/pref_default_text_encoding_dialogtitle" /> + + <CheckBoxPreference + android:key="block_popup_windows" + android:defaultValue="true" + android:title="@string/pref_content_block_popups" /> + + <CheckBoxPreference + android:key="load_images" + android:defaultValue="true" + android:title="@string/pref_content_load_images" + android:summary="@string/pref_content_load_images_summary" /> + + <CheckBoxPreference + android:key="autofit_pages" + android:defaultValue="true" + android:title="@string/pref_content_autofit" + android:summary="@string/pref_content_autofit_summary" /> + + <CheckBoxPreference + android:key="landscape_only" + android:defaultValue="false" + android:title="@string/pref_content_landscape_only" + android:summary="@string/pref_content_landscape_only_summary" /> + + <CheckBoxPreference + android:key="enable_javascript" + android:defaultValue="true" + android:title="@string/pref_content_javascript" /> + + <ListPreference + android:key="plugin_state" + android:title="@string/pref_content_plugins" + android:defaultValue="ON" + android:entries="@array/pref_content_plugins_choices" + android:entryValues="@array/pref_content_plugins_values" + android:dialogTitle="@string/pref_content_plugins" /> + + <CheckBoxPreference + android:key="open_in_background" + android:defaultValue="false" + android:title="@string/pref_content_open_in_background" + android:summary="@string/pref_content_open_in_background_summary" /> + + <com.android.browser.BrowserHomepagePreference + android:key="homepage" + android:title="@string/pref_content_homepage" + android:hint="@string/http" + android:inputType="textUri|textMultiLine" /> + +</PreferenceScreen> diff --git a/res/xml/preference_headers.xml b/res/xml/preference_headers.xml new file mode 100644 index 0000000..54660b4 --- /dev/null +++ b/res/xml/preference_headers.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. +--> + +<preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> + + <header android:fragment="com.android.browser.preferences.PageContentPreferencesFragment" + android:title="@string/pref_content_title" + /> +<!-- + <header android:fragment="com.example.android.apis.preference.PreferenceWithHeaders$Prefs2Fragment" + android:title="Personal settings" + </header> +--> + <header android:fragment="com.android.browser.preferences.PrivacyPreferencesFragment" + android:title="@string/pref_privacy_title" + /> + + <header android:fragment="com.android.browser.preferences.SecurityPreferencesFragment" + android:title="@string/pref_security_title" + /> + + <header android:fragment="com.android.browser.preferences.AdvancedPreferencesFragment" + android:title="@string/pref_extras_title" + /> +</preference-headers> diff --git a/res/xml/privacy_preferences.xml b/res/xml/privacy_preferences.xml new file mode 100644 index 0000000..f8a8d91 --- /dev/null +++ b/res/xml/privacy_preferences.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2008 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. +--> + +<PreferenceScreen + xmlns:android="http://schemas.android.com/apk/res/android"> + + <com.android.browser.BrowserYesNoPreference + android:key="privacy_clear_cache" + android:title="@string/pref_privacy_clear_cache" + android:summary="@string/pref_privacy_clear_cache_summary" + android:dialogMessage="@string/pref_privacy_clear_cache_dlg" + android:dialogTitle="@string/clear" + android:dialogIcon="@android:drawable/ic_dialog_alert" /> + + <com.android.browser.BrowserYesNoPreference + android:key="privacy_clear_history" + android:title="@string/pref_privacy_clear_history" + android:summary="@string/pref_privacy_clear_history_summary" + android:dialogMessage="@string/pref_privacy_clear_history_dlg" + android:dialogTitle="@string/clear" + android:dialogIcon="@android:drawable/ic_dialog_alert"/> + + <CheckBoxPreference + android:key="accept_cookies" + android:defaultValue="true" + android:title="@string/pref_security_accept_cookies" + android:summary="@string/pref_security_accept_cookies_summary" /> + + <com.android.browser.BrowserYesNoPreference + android:key="privacy_clear_cookies" + android:title="@string/pref_privacy_clear_cookies" + android:summary="@string/pref_privacy_clear_cookies_summary" + android:dialogMessage="@string/pref_privacy_clear_cookies_dlg" + android:dialogTitle="@string/clear" + android:dialogIcon="@android:drawable/ic_dialog_alert"/> + + <CheckBoxPreference + android:key="save_formdata" + android:defaultValue="true" + android:title="@string/pref_security_save_form_data" + android:summary="@string/pref_security_save_form_data_summary" /> + + <CheckBoxPreference + android:key="autoFill_enabled" + android:defaultValue="false" + android:title="@string/pref_autoFill_enabled" + android:summary="@string/pref_autoFill_enabled_summary" /> + + <com.android.browser.BrowserYesNoPreference + android:key="privacy_clear_form_data" + android:title="@string/pref_privacy_clear_form_data" + android:summary="@string/pref_privacy_clear_form_data_summary" + android:dialogMessage="@string/pref_privacy_clear_form_data_dlg" + android:dialogTitle="@string/clear" + android:dialogIcon="@android:drawable/ic_dialog_alert"/> + + <CheckBoxPreference + android:key="enable_geolocation" + android:defaultValue="true" + android:title="@string/pref_privacy_enable_geolocation" + android:summary="@string/pref_privacy_enable_geolocation_summary" /> + + <com.android.browser.BrowserYesNoPreference + android:key="privacy_clear_geolocation_access" + android:dependency="enable_geolocation" + android:title="@string/pref_privacy_clear_geolocation_access" + android:summary="@string/pref_privacy_clear_geolocation_access_summary" + android:dialogMessage="@string/pref_privacy_clear_geolocation_access_dlg" + android:dialogTitle="@string/clear" + android:dialogIcon="@android:drawable/ic_dialog_alert"/> + +</PreferenceScreen> diff --git a/res/xml/security_preferences.xml b/res/xml/security_preferences.xml new file mode 100644 index 0000000..8d4464b --- /dev/null +++ b/res/xml/security_preferences.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2008 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. +--> + +<PreferenceScreen + xmlns:android="http://schemas.android.com/apk/res/android"> + + <CheckBoxPreference + android:key="remember_passwords" + android:defaultValue="true" + android:title="@string/pref_security_remember_passwords" + android:summary="@string/pref_security_remember_passwords_summary" /> + + <com.android.browser.BrowserYesNoPreference + android:key="privacy_clear_passwords" + android:title="@string/pref_privacy_clear_passwords" + android:summary="@string/pref_privacy_clear_passwords_summary" + android:dialogMessage="@string/pref_privacy_clear_passwords_dlg" + android:dialogTitle="@string/clear" + android:dialogIcon="@android:drawable/ic_dialog_alert"/> + + <CheckBoxPreference + android:key="show_security_warnings" + android:defaultValue="true" + android:title="@string/pref_security_show_security_warning" + android:summary="@string/pref_security_show_security_warning_summary" /> + +</PreferenceScreen> diff --git a/src/com/android/browser/BrowserHomepagePreference.java b/src/com/android/browser/BrowserHomepagePreference.java index 4f18bd5..057e691 100644 --- a/src/com/android/browser/BrowserHomepagePreference.java +++ b/src/com/android/browser/BrowserHomepagePreference.java @@ -97,7 +97,7 @@ public class BrowserHomepagePreference extends EditTextPreference { * @param currentPage This String will replace the text in the EditText * when the user clicks the "Use current page" button. */ - /* package */ void setCurrentPage(String currentPage) { + public void setCurrentPage(String currentPage) { mCurrentPage = currentPage; } diff --git a/src/com/android/browser/BrowserPreferencesPage.java b/src/com/android/browser/BrowserPreferencesPage.java index 9af66f1..d93e70f 100644 --- a/src/com/android/browser/BrowserPreferencesPage.java +++ b/src/com/android/browser/BrowserPreferencesPage.java @@ -16,96 +16,30 @@ package com.android.browser; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.preference.EditTextPreference; -import android.preference.Preference; +import com.android.browser.preferences.DebugPreferencesFragment; + import android.preference.PreferenceActivity; -import android.preference.PreferenceScreen; -import android.webkit.GeolocationPermissions; -import android.webkit.ValueCallback; -import android.webkit.WebStorage; +import android.preference.PreferenceManager; -import java.util.Map; -import java.util.Set; +import java.util.List; -public class BrowserPreferencesPage extends PreferenceActivity - implements Preference.OnPreferenceChangeListener { +public class BrowserPreferencesPage extends PreferenceActivity { - private String LOGTAG = "BrowserPreferencesPage"; - /* package */ static final String CURRENT_PAGE = "currentPage"; + public static final String CURRENT_PAGE = "currentPage"; + /** + * Populate the activity with the top-level headers. + */ @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - // Load the XML preferences file - addPreferencesFromResource(R.xml.browser_preferences); - - Preference e = findPreference(BrowserSettings.PREF_HOMEPAGE); - e.setOnPreferenceChangeListener(this); - e.setSummary(getPreferenceScreen().getSharedPreferences() - .getString(BrowserSettings.PREF_HOMEPAGE, null)); - ((BrowserHomepagePreference) e).setCurrentPage( - getIntent().getStringExtra(CURRENT_PAGE)); - - e = findPreference(BrowserSettings.PREF_EXTRAS_RESET_DEFAULTS); - e.setOnPreferenceChangeListener(this); - - e = findPreference(BrowserSettings.PREF_TEXT_SIZE); - e.setOnPreferenceChangeListener(this); - e.setSummary(getVisualTextSizeName( - getPreferenceScreen().getSharedPreferences() - .getString(BrowserSettings.PREF_TEXT_SIZE, null)) ); - - e = findPreference(BrowserSettings.PREF_DEFAULT_ZOOM); - e.setOnPreferenceChangeListener(this); - e.setSummary(getVisualDefaultZoomName( - getPreferenceScreen().getSharedPreferences() - .getString(BrowserSettings.PREF_DEFAULT_ZOOM, null)) ); - - e = findPreference(BrowserSettings.PREF_DEFAULT_TEXT_ENCODING); - e.setOnPreferenceChangeListener(this); - - e = findPreference(BrowserSettings.PREF_CLEAR_HISTORY); - e.setOnPreferenceChangeListener(this); + public void onBuildHeaders(List<Header> target) { + loadHeadersFromResource(R.xml.preference_headers, target); if (BrowserSettings.getInstance().showDebugSettings()) { - addPreferencesFromResource(R.xml.debug_preferences); + Header debug = new Header(); + debug.title = getText(R.string.pref_development_title); + debug.fragment = DebugPreferencesFragment.class.getName(); + target.add(debug); } - - PreferenceScreen websiteSettings = (PreferenceScreen) - findPreference(BrowserSettings.PREF_WEBSITE_SETTINGS); - Intent intent = new Intent(this, WebsiteSettingsActivity.class); - websiteSettings.setIntent(intent); - } - - /* - * 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 - protected void onResume() { - super.onResume(); - final PreferenceScreen websiteSettings = (PreferenceScreen) - findPreference(BrowserSettings.PREF_WEBSITE_SETTINGS); - websiteSettings.setEnabled(false); - WebStorage.getInstance().getOrigins(new ValueCallback<Map>() { - public void onReceiveValue(Map webStorageOrigins) { - if ((webStorageOrigins != null) && !webStorageOrigins.isEmpty()) { - websiteSettings.setEnabled(true); - } - } - }); - GeolocationPermissions.getInstance().getOrigins(new ValueCallback<Set<String> >() { - public void onReceiveValue(Set<String> geolocationOrigins) { - if ((geolocationOrigins != null) && !geolocationOrigins.isEmpty()) { - websiteSettings.setEnabled(true); - } - } - }); } @Override @@ -115,98 +49,6 @@ public class BrowserPreferencesPage extends PreferenceActivity // sync the shared preferences back to BrowserSettings BrowserSettings.getInstance().syncSharedPreferences( getApplicationContext(), - getPreferenceScreen().getSharedPreferences()); - } - - public boolean onPreferenceChange(Preference pref, Object objValue) { - if (pref.getKey().equals(BrowserSettings.PREF_EXTRAS_RESET_DEFAULTS)) { - Boolean value = (Boolean) objValue; - if (value.booleanValue() == true) { - finish(); - } - } else if (pref.getKey().equals(BrowserSettings.PREF_HOMEPAGE)) { - String value = (String) objValue; - boolean needUpdate = value.indexOf(' ') != -1; - if (needUpdate) { - value = value.trim().replace(" ", "%20"); - } - if (value.length() != 0 && Uri.parse(value).getScheme() == null) { - value = "http://" + value; - needUpdate = true; - } - // Set the summary value. - pref.setSummary(value); - if (needUpdate) { - // Update through the EditText control as it has a cached copy - // of the string and it will handle persisting the value - ((EditTextPreference) pref).setText(value); - - // as we update the value above, we need to return false - // here so that setText() is not called by EditTextPref - // with the old value. - return false; - } else { - return true; - } - } else if (pref.getKey().equals(BrowserSettings.PREF_TEXT_SIZE)) { - pref.setSummary(getVisualTextSizeName((String) objValue)); - return true; - } else if (pref.getKey().equals(BrowserSettings.PREF_DEFAULT_ZOOM)) { - pref.setSummary(getVisualDefaultZoomName((String) objValue)); - return true; - } else if (pref.getKey().equals( - BrowserSettings.PREF_DEFAULT_TEXT_ENCODING)) { - pref.setSummary((String) objValue); - return true; - } else if (pref.getKey().equals(BrowserSettings.PREF_CLEAR_HISTORY) - && ((Boolean) objValue).booleanValue() == true) { - // Need to tell the browser to remove the parent/child relationship - // between tabs - setResult(RESULT_OK, (new Intent()).putExtra(Intent.EXTRA_TEXT, - pref.getKey())); - return true; - } - - return false; - } - - private CharSequence getVisualTextSizeName(String enumName) { - CharSequence[] visualNames = getResources().getTextArray( - R.array.pref_text_size_choices); - CharSequence[] enumNames = getResources().getTextArray( - R.array.pref_text_size_values); - - // Sanity check - if (visualNames.length != enumNames.length) { - return ""; - } - - for (int i = 0; i < enumNames.length; i++) { - if (enumNames[i].equals(enumName)) { - return visualNames[i]; - } - } - - return ""; - } - - private CharSequence getVisualDefaultZoomName(String enumName) { - CharSequence[] visualNames = getResources().getTextArray( - R.array.pref_default_zoom_choices); - CharSequence[] enumNames = getResources().getTextArray( - R.array.pref_default_zoom_values); - - // Sanity check - if (visualNames.length != enumNames.length) { - return ""; - } - - for (int i = 0; i < enumNames.length; i++) { - if (enumNames[i].equals(enumName)) { - return visualNames[i]; - } - } - - return ""; + PreferenceManager.getDefaultSharedPreferences(this)); } } diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java index c733e17..8860bbd 100644 --- a/src/com/android/browser/BrowserSettings.java +++ b/src/com/android/browser/BrowserSettings.java @@ -63,7 +63,7 @@ import java.util.Observable; * To remove an observer: * s.deleteObserver(webView.getSettings()); */ -class BrowserSettings extends Observable { +public class BrowserSettings extends Observable { // Private variables for settings // NOTE: these defaults need to be kept in sync with the XML @@ -579,45 +579,22 @@ class BrowserSettings extends Observable { : ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); } - private void maybeDisableWebsiteSettings(Context context) { - PreferenceActivity activity = (PreferenceActivity) context; - final PreferenceScreen screen = (PreferenceScreen) - activity.findPreference(BrowserSettings.PREF_WEBSITE_SETTINGS); - screen.setEnabled(false); - WebStorage.getInstance().getOrigins(new ValueCallback<Map>() { - public void onReceiveValue(Map webStorageOrigins) { - if ((webStorageOrigins != null) && !webStorageOrigins.isEmpty()) { - screen.setEnabled(true); - } - } - }); - - GeolocationPermissions.getInstance().getOrigins(new ValueCallback<Set<String> >() { - public void onReceiveValue(Set<String> geolocationOrigins) { - if ((geolocationOrigins != null) && !geolocationOrigins.isEmpty()) { - screen.setEnabled(true); - } - } - }); - } - /*package*/ void clearDatabases(Context context) { WebStorage.getInstance().deleteAllData(); - maybeDisableWebsiteSettings(context); } /*package*/ void clearLocationAccess(Context context) { GeolocationPermissions.getInstance().clearAll(); - maybeDisableWebsiteSettings(context); } /*package*/ void resetDefaultPreferences(Context ctx) { reset(); - SharedPreferences p = - PreferenceManager.getDefaultSharedPreferences(ctx); + SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(ctx); p.edit().clear().apply(); - PreferenceManager.setDefaultValues(ctx, R.xml.browser_preferences, - true); + PreferenceManager.setDefaultValues(ctx, R.xml.page_content_preferences, true); + PreferenceManager.setDefaultValues(ctx, R.xml.privacy_preferences, true); + PreferenceManager.setDefaultValues(ctx, R.xml.security_preferences, true); + PreferenceManager.setDefaultValues(ctx, R.xml.advanced_preferences, true); // reset homeUrl setHomePage(ctx, getFactoryResetHomeUrl(ctx)); // reset appcache max size diff --git a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java new file mode 100644 index 0000000..59b6ce1 --- /dev/null +++ b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java @@ -0,0 +1,91 @@ +/* + * 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.BrowserSettings; +import com.android.browser.R; +import com.android.browser.WebsiteSettingsActivity; + +import android.content.Intent; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.PreferenceFragment; +import android.preference.PreferenceScreen; +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( + BrowserSettings.PREF_WEBSITE_SETTINGS); + Intent intent = new Intent(getActivity(), WebsiteSettingsActivity.class); + websiteSettings.setIntent(intent); + } + + /* + * 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( + BrowserSettings.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 (pref.getKey().equals(BrowserSettings.PREF_EXTRAS_RESET_DEFAULTS)) { + Boolean value = (Boolean) objValue; + if (value.booleanValue() == true) { + getActivity().finish(); + return true; + } + } + return false; + } +}
\ No newline at end of file diff --git a/src/com/android/browser/preferences/DebugPreferencesFragment.java b/src/com/android/browser/preferences/DebugPreferencesFragment.java new file mode 100644 index 0000000..d643a97 --- /dev/null +++ b/src/com/android/browser/preferences/DebugPreferencesFragment.java @@ -0,0 +1,32 @@ +/* + * 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.R; + +import android.os.Bundle; +import android.preference.PreferenceFragment; + +public class DebugPreferencesFragment extends PreferenceFragment { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Load the XML preferences file + addPreferencesFromResource(R.xml.debug_preferences); + } +} diff --git a/src/com/android/browser/preferences/PageContentPreferencesFragment.java b/src/com/android/browser/preferences/PageContentPreferencesFragment.java new file mode 100644 index 0000000..4bb2fab --- /dev/null +++ b/src/com/android/browser/preferences/PageContentPreferencesFragment.java @@ -0,0 +1,143 @@ +/* + * 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.BrowserHomepagePreference; +import com.android.browser.BrowserPreferencesPage; +import com.android.browser.BrowserSettings; +import com.android.browser.R; + +import android.content.res.Resources; +import android.net.Uri; +import android.os.Bundle; +import android.preference.EditTextPreference; +import android.preference.Preference; +import android.preference.PreferenceFragment; + +public class PageContentPreferencesFragment extends PreferenceFragment + implements Preference.OnPreferenceChangeListener { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Load the preferences from an XML resource + addPreferencesFromResource(R.xml.page_content_preferences); + + Preference e = findPreference(BrowserSettings.PREF_HOMEPAGE); + e.setOnPreferenceChangeListener(this); + e.setSummary(getPreferenceScreen().getSharedPreferences() + .getString(BrowserSettings.PREF_HOMEPAGE, null)); + ((BrowserHomepagePreference) e).setCurrentPage( + getActivity().getIntent().getStringExtra(BrowserPreferencesPage.CURRENT_PAGE)); + + e = findPreference(BrowserSettings.PREF_TEXT_SIZE); + e.setOnPreferenceChangeListener(this); + e.setSummary(getVisualTextSizeName( + getPreferenceScreen().getSharedPreferences() + .getString(BrowserSettings.PREF_TEXT_SIZE, null)) ); + + e = findPreference(BrowserSettings.PREF_DEFAULT_ZOOM); + e.setOnPreferenceChangeListener(this); + e.setSummary(getVisualDefaultZoomName( + getPreferenceScreen().getSharedPreferences() + .getString(BrowserSettings.PREF_DEFAULT_ZOOM, null)) ); + + e = findPreference(BrowserSettings.PREF_DEFAULT_TEXT_ENCODING); + e.setOnPreferenceChangeListener(this); + } + + @Override + public boolean onPreferenceChange(Preference pref, Object objValue) { + if (pref.getKey().equals(BrowserSettings.PREF_HOMEPAGE)) { + String value = (String) objValue; + boolean needUpdate = value.indexOf(' ') != -1; + if (needUpdate) { + value = value.trim().replace(" ", "%20"); + } + if (value.length() != 0 && Uri.parse(value).getScheme() == null) { + value = "http://" + value; + needUpdate = true; + } + // Set the summary value. + pref.setSummary(value); + if (needUpdate) { + // Update through the EditText control as it has a cached copy + // of the string and it will handle persisting the value + ((EditTextPreference) pref).setText(value); + + // as we update the value above, we need to return false + // here so that setText() is not called by EditTextPref + // with the old value. + return false; + } else { + return true; + } + } else if (pref.getKey().equals(BrowserSettings.PREF_TEXT_SIZE)) { + pref.setSummary(getVisualTextSizeName((String) objValue)); + return true; + } else if (pref.getKey().equals(BrowserSettings.PREF_DEFAULT_ZOOM)) { + pref.setSummary(getVisualDefaultZoomName((String) objValue)); + return true; + } else if (pref.getKey().equals(BrowserSettings.PREF_DEFAULT_TEXT_ENCODING)) { + pref.setSummary((String) objValue); + return true; + } + + return false; + } + + private CharSequence getVisualTextSizeName(String enumName) { + Resources res = getActivity().getResources(); + CharSequence[] visualNames = res.getTextArray(R.array.pref_text_size_choices); + CharSequence[] enumNames = res.getTextArray(R.array.pref_text_size_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 ""; + } + + 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 ""; + } +}
\ No newline at end of file diff --git a/src/com/android/browser/preferences/PrivacyPreferencesFragment.java b/src/com/android/browser/preferences/PrivacyPreferencesFragment.java new file mode 100644 index 0000000..79f2084 --- /dev/null +++ b/src/com/android/browser/preferences/PrivacyPreferencesFragment.java @@ -0,0 +1,55 @@ +/* + * 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.BrowserSettings; +import com.android.browser.R; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.PreferenceFragment; + +public class PrivacyPreferencesFragment extends PreferenceFragment + implements Preference.OnPreferenceChangeListener { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Load the preferences from an XML resource + addPreferencesFromResource(R.xml.privacy_preferences); + + Preference e = findPreference(BrowserSettings.PREF_CLEAR_HISTORY); + e.setOnPreferenceChangeListener(this); + } + + @Override + public boolean onPreferenceChange(Preference pref, Object objValue) { + if (pref.getKey().equals(BrowserSettings.PREF_CLEAR_HISTORY) + && ((Boolean) objValue).booleanValue() == true) { + // Need to tell the browser to remove the parent/child relationship + // between tabs + getActivity().setResult(Activity.RESULT_OK, (new Intent()).putExtra(Intent.EXTRA_TEXT, + pref.getKey())); + return true; + } + + return false; + } +} diff --git a/src/com/android/browser/preferences/SecurityPreferencesFragment.java b/src/com/android/browser/preferences/SecurityPreferencesFragment.java new file mode 100644 index 0000000..d20a50c --- /dev/null +++ b/src/com/android/browser/preferences/SecurityPreferencesFragment.java @@ -0,0 +1,32 @@ +/* + * 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.R; + +import android.os.Bundle; +import android.preference.PreferenceFragment; + +public class SecurityPreferencesFragment extends PreferenceFragment { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Load the XML preferences file + addPreferencesFromResource(R.xml.security_preferences); + } +} |