| Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..efd8ebedcc018ea73e9ea9f36bcd0bea72e25a89
|
| --- /dev/null
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
|
| @@ -0,0 +1,265 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.chrome.browser.preferences.privacy;
|
| +
|
| +import android.os.Bundle;
|
| +import android.preference.CheckBoxPreference;
|
| +import android.preference.Preference;
|
| +import android.preference.Preference.OnPreferenceChangeListener;
|
| +import android.preference.Preference.OnPreferenceClickListener;
|
| +import android.preference.PreferenceFragment;
|
| +import android.view.Menu;
|
| +import android.view.MenuInflater;
|
| +import android.view.MenuItem;
|
| +
|
| +import org.chromium.chrome.R;
|
| +import org.chromium.chrome.browser.preferences.ButtonPreference;
|
| +import org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference;
|
| +import org.chromium.chrome.browser.preferences.ManagedPreferenceDelegate;
|
| +import org.chromium.chrome.browser.preferences.NetworkPredictionOptions;
|
| +import org.chromium.chrome.browser.preferences.PrefServiceBridge;
|
| +import org.chromium.chrome.browser.preferences.Preferences;
|
| +
|
| +/**
|
| + * Fragment to keep track of the all the privacy related preferences.
|
| + */
|
| +public class PrivacyPreferences extends PreferenceFragment
|
| + implements OnPreferenceChangeListener {
|
| +
|
| + /**
|
| + * Set to true in the {@link Preferences#EXTRA_SHOW_FRAGMENT_ARGUMENTS} bundle to
|
| + * trigger the clear browsing data dialog when showing the privacy preferences.
|
| + */
|
| + public static final String SHOW_CLEAR_BROWSING_DATA_EXTRA =
|
| + "ShowClearBrowsingData";
|
| +
|
| + private static final String PREF_NAVIGATION_ERROR = "navigation_error";
|
| + private static final String PREF_SEARCH_SUGGESTIONS = "search_suggestions";
|
| + private static final String PREF_CONTEXTUAL_SEARCH = "contextual_search";
|
| + private static final String PREF_NETWORK_PREDICTIONS = "network_predictions";
|
| + private static final String PREF_NETWORK_PREDICTIONS_NO_CELLULAR =
|
| + "network_predictions_no_cellular";
|
| + private static final String PREF_CRASH_DUMP_UPLOAD = "crash_dump_upload";
|
| + private static final String PREF_CRASH_DUMP_UPLOAD_NO_CELLULAR =
|
| + "crash_dump_upload_no_cellular";
|
| + private static final String PREF_DO_NOT_TRACK = "do_not_track";
|
| + private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data";
|
| +
|
| + private ClearBrowsingDataDialogFragment mClearBrowsingDataDialogFragment;
|
| + private ManagedPreferenceDelegate mManagedPreferenceDelegate;
|
| +
|
| + @Override
|
| + public void onCreate(Bundle savedInstanceState) {
|
| + super.onCreate(savedInstanceState);
|
| + PrivacyPreferencesManager.getInstance(getActivity()).migrateNetworkPredictionPreferences();
|
| + addPreferencesFromResource(R.xml.privacy_preferences);
|
| + getActivity().setTitle(R.string.prefs_privacy);
|
| + setHasOptionsMenu(true);
|
| +
|
| + mManagedPreferenceDelegate = createManagedPreferenceDelegate();
|
| +
|
| + NetworkPredictionPreference networkPredictionPref =
|
| + (NetworkPredictionPreference) findPreference(PREF_NETWORK_PREDICTIONS);
|
| + ChromeBaseCheckBoxPreference networkPredictionNoCellularPref =
|
| + (ChromeBaseCheckBoxPreference) findPreference(PREF_NETWORK_PREDICTIONS_NO_CELLULAR);
|
| + NetworkPredictionOptions networkPredictionOptions = PrefServiceBridge.getInstance()
|
| + .getNetworkPredictionOptions();
|
| +
|
| + boolean isMobileNetworkCapable =
|
| + PrivacyPreferencesManager.getInstance(getActivity()).isMobileNetworkCapable();
|
| + if (isMobileNetworkCapable) {
|
| + getPreferenceScreen().removePreference(networkPredictionNoCellularPref);
|
| + networkPredictionPref.setValue(networkPredictionOptions.enumToString());
|
| + networkPredictionPref.setOnPreferenceChangeListener(this);
|
| + networkPredictionPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
|
| + } else {
|
| + getPreferenceScreen().removePreference(networkPredictionPref);
|
| + networkPredictionNoCellularPref.setChecked(
|
| + networkPredictionOptions != NetworkPredictionOptions.NETWORK_PREDICTION_NEVER);
|
| + networkPredictionNoCellularPref.setOnPreferenceChangeListener(this);
|
| + networkPredictionNoCellularPref.setManagedPreferenceDelegate(
|
| + mManagedPreferenceDelegate);
|
| + }
|
| +
|
| + CrashDumpUploadPreference uploadCrashDumpPref =
|
| + (CrashDumpUploadPreference) findPreference(PREF_CRASH_DUMP_UPLOAD);
|
| + ChromeBaseCheckBoxPreference uploadCrashDumpNoCellularPref =
|
| + (ChromeBaseCheckBoxPreference) findPreference(PREF_CRASH_DUMP_UPLOAD_NO_CELLULAR);
|
| +
|
| + if (isMobileNetworkCapable) {
|
| + getPreferenceScreen().removePreference(uploadCrashDumpNoCellularPref);
|
| + uploadCrashDumpPref.setOnPreferenceChangeListener(this);
|
| + uploadCrashDumpPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
|
| + } else {
|
| + getPreferenceScreen().removePreference(uploadCrashDumpPref);
|
| + uploadCrashDumpNoCellularPref.setOnPreferenceChangeListener(this);
|
| + uploadCrashDumpNoCellularPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
|
| + }
|
| +
|
| + ChromeBaseCheckBoxPreference navigationErrorPref =
|
| + (ChromeBaseCheckBoxPreference) findPreference(PREF_NAVIGATION_ERROR);
|
| + navigationErrorPref.setOnPreferenceChangeListener(this);
|
| + navigationErrorPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
|
| +
|
| + ChromeBaseCheckBoxPreference searchSuggestionsPref =
|
| + (ChromeBaseCheckBoxPreference) findPreference(PREF_SEARCH_SUGGESTIONS);
|
| + searchSuggestionsPref.setOnPreferenceChangeListener(this);
|
| + searchSuggestionsPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
|
| +
|
| + if (!((Preferences) getActivity()).isContextualSearchEnabled()) {
|
| + getPreferenceScreen().removePreference(findPreference(PREF_CONTEXTUAL_SEARCH));
|
| + }
|
| +
|
| + ButtonPreference clearBrowsingData =
|
| + (ButtonPreference) findPreference(PREF_CLEAR_BROWSING_DATA);
|
| + clearBrowsingData.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
| + @Override
|
| + public boolean onPreferenceClick(Preference preference) {
|
| + showClearBrowsingDialog();
|
| + return true;
|
| + }
|
| + });
|
| +
|
| + if (getArguments() != null) {
|
| + boolean showClearBrowsingData =
|
| + getArguments().getBoolean(SHOW_CLEAR_BROWSING_DATA_EXTRA, false);
|
| + if (showClearBrowsingData) showClearBrowsingDialog();
|
| + }
|
| + updateSummaries();
|
| + }
|
| +
|
| + @Override
|
| + public boolean onPreferenceChange(Preference preference, Object newValue) {
|
| + // CrashDumpUploadPreference listens to its own PreferenceChanged to update its text.
|
| + // We have replaced the listener. If we do run into a CrashDumpUploadPreference change,
|
| + // we will call onPreferenceChange to change the displayed text.
|
| + if (preference instanceof CrashDumpUploadPreference) {
|
| + ((CrashDumpUploadPreference) preference).onPreferenceChange(preference, newValue);
|
| + }
|
| +
|
| + // NetworkPredictionPreference listens to its own PreferenceChanged to update its text.
|
| + // We have replaced the listener. If we do run into a NetworkPredictionPreference change,
|
| + // we will call onPreferenceChange to change the displayed text.
|
| + if (preference instanceof NetworkPredictionPreference) {
|
| + ((NetworkPredictionPreference) preference).onPreferenceChange(preference, newValue);
|
| + }
|
| +
|
| + String key = preference.getKey();
|
| + if (PREF_SEARCH_SUGGESTIONS.equals(key)) {
|
| + PrefServiceBridge.getInstance().setSearchSuggestEnabled((boolean) newValue);
|
| + } else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
|
| + PrefServiceBridge.getInstance().setNetworkPredictionOptions(
|
| + NetworkPredictionOptions.stringToEnum((String) newValue));
|
| + ((Preferences) getActivity()).updatePrecachingEnabled();
|
| + } else if (PREF_NETWORK_PREDICTIONS_NO_CELLULAR.equals(key)) {
|
| + PrefServiceBridge.getInstance().setNetworkPredictionOptions((boolean) newValue
|
| + ? NetworkPredictionOptions.NETWORK_PREDICTION_ALWAYS
|
| + : NetworkPredictionOptions.NETWORK_PREDICTION_NEVER);
|
| + ((Preferences) getActivity()).updatePrecachingEnabled();
|
| + } else if (PREF_NAVIGATION_ERROR.equals(key)) {
|
| + PrefServiceBridge.getInstance().setResolveNavigationErrorEnabled((boolean) newValue);
|
| + } else if (PREF_CRASH_DUMP_UPLOAD_NO_CELLULAR.equals(key)) {
|
| + PrefServiceBridge.getInstance().setCrashReporting((boolean) newValue);
|
| + } else if (PREF_CRASH_DUMP_UPLOAD.equals(key)) {
|
| + PrivacyPreferencesManager.getInstance(getActivity()).setUploadCrashDump(
|
| + (String) newValue);
|
| + }
|
| +
|
| + return true;
|
| + }
|
| +
|
| + @Override
|
| + public void onResume() {
|
| + super.onResume();
|
| + updateSummaries();
|
| + }
|
| +
|
| + /**
|
| + * Updates the summaries for several preferences.
|
| + */
|
| + public void updateSummaries() {
|
| + PrefServiceBridge prefServiceBridge = PrefServiceBridge.getInstance();
|
| +
|
| + CheckBoxPreference navigationErrorPref = (CheckBoxPreference) findPreference(
|
| + PREF_NAVIGATION_ERROR);
|
| + navigationErrorPref.setChecked(prefServiceBridge.isResolveNavigationErrorEnabled());
|
| +
|
| + CheckBoxPreference searchSuggestionsPref = (CheckBoxPreference) findPreference(
|
| + PREF_SEARCH_SUGGESTIONS);
|
| + searchSuggestionsPref.setChecked(prefServiceBridge.isSearchSuggestEnabled());
|
| +
|
| + Preference doNotTrackPref = findPreference(PREF_DO_NOT_TRACK);
|
| + if (prefServiceBridge.isDoNotTrackEnabled()) {
|
| + doNotTrackPref.setSummary(getActivity().getResources().getText(R.string.text_on));
|
| + } else {
|
| + doNotTrackPref.setSummary(getActivity().getResources().getText(R.string.text_off));
|
| + }
|
| + Preference contextualPref = findPreference(PREF_CONTEXTUAL_SEARCH);
|
| + if (contextualPref != null) {
|
| + if (prefServiceBridge.isContextualSearchDisabled()) {
|
| + contextualPref.setSummary(getActivity().getResources().getText(R.string.text_off));
|
| + } else {
|
| + contextualPref.setSummary(getActivity().getResources().getText(R.string.text_on));
|
| + }
|
| + }
|
| + }
|
| +
|
| + private ManagedPreferenceDelegate createManagedPreferenceDelegate() {
|
| + return new ManagedPreferenceDelegate() {
|
| + @Override
|
| + public boolean isPreferenceControlledByPolicy(Preference preference) {
|
| + String key = preference.getKey();
|
| + PrefServiceBridge prefs = PrefServiceBridge.getInstance();
|
| + if (PREF_NAVIGATION_ERROR.equals(key)) {
|
| + return prefs.isResolveNavigationErrorManaged();
|
| + }
|
| + if (PREF_SEARCH_SUGGESTIONS.equals(key)) {
|
| + return prefs.isSearchSuggestManaged();
|
| + }
|
| + if (PREF_NETWORK_PREDICTIONS_NO_CELLULAR.equals(key)
|
| + || PREF_NETWORK_PREDICTIONS.equals(key)) {
|
| + return prefs.isNetworkPredictionManaged();
|
| + }
|
| + if (PREF_CRASH_DUMP_UPLOAD.equals(key)
|
| + || PREF_CRASH_DUMP_UPLOAD_NO_CELLULAR.equals(key)) {
|
| + return prefs.isCrashReportManaged();
|
| + }
|
| + return false;
|
| + }
|
| + };
|
| + }
|
| +
|
| + private void showClearBrowsingDialog() {
|
| + mClearBrowsingDataDialogFragment = new ClearBrowsingDataDialogFragment();
|
| + mClearBrowsingDataDialogFragment.show(
|
| + getFragmentManager(), ClearBrowsingDataDialogFragment.FRAGMENT_TAG);
|
| + }
|
| +
|
| + @Override
|
| + public void onDestroy() {
|
| + super.onDestroy();
|
| + if (mClearBrowsingDataDialogFragment != null) {
|
| + // In case the progress dialog is still showing and waiting for a callback, dismiss it.
|
| + // See bug http://b/13396757.
|
| + mClearBrowsingDataDialogFragment.dismissProgressDialog();
|
| + }
|
| + mClearBrowsingDataDialogFragment = null;
|
| + }
|
| +
|
| + @Override
|
| + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
| + menu.clear();
|
| + menu.add(Menu.NONE, R.id.menu_id_help_privacy, Menu.NONE, R.string.menu_help);
|
| + }
|
| +
|
| + @Override
|
| + public boolean onOptionsItemSelected(MenuItem item) {
|
| + if (item.getItemId() == R.id.menu_id_help_privacy) {
|
| + ((Preferences) getActivity()).showPrivacyPreferencesHelp();
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| +}
|
|
|