| Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataDialogFragment.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataDialogFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataDialogFragment.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fdaac2f632d31a8a3a548baf57b91763001faff6
|
| --- /dev/null
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataDialogFragment.java
|
| @@ -0,0 +1,225 @@
|
| +// 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.app.AlertDialog;
|
| +import android.app.Dialog;
|
| +import android.app.DialogFragment;
|
| +import android.app.ProgressDialog;
|
| +import android.content.DialogInterface;
|
| +import android.content.res.Resources;
|
| +import android.os.Bundle;
|
| +import android.text.SpannableString;
|
| +import android.text.TextPaint;
|
| +import android.text.method.LinkMovementMethod;
|
| +import android.text.style.ClickableSpan;
|
| +import android.view.View;
|
| +import android.widget.Button;
|
| +import android.widget.TextView;
|
| +
|
| +import org.chromium.chrome.R;
|
| +import org.chromium.chrome.browser.preferences.PrefServiceBridge;
|
| +import org.chromium.chrome.browser.preferences.Preferences;
|
| +import org.chromium.chrome.browser.signin.AccountManagementFragment;
|
| +import org.chromium.sync.signin.ChromeSigninController;
|
| +import org.chromium.ui.text.SpanApplier;
|
| +
|
| +import java.util.Arrays;
|
| +import java.util.EnumSet;
|
| +
|
| +/**
|
| + * Modal dialog with options for selection the type of browsing data
|
| + * to clear (history, cookies), triggered from a preference.
|
| + */
|
| +public class ClearBrowsingDataDialogFragment extends DialogFragment implements
|
| + PrefServiceBridge.OnClearBrowsingDataListener,
|
| + DialogInterface.OnMultiChoiceClickListener, DialogInterface.OnClickListener {
|
| +
|
| + /** The tag used when showing the clear browsing fragment. */
|
| + public static final String FRAGMENT_TAG = "ClearBrowsingDataDialogFragment";
|
| +
|
| + /**
|
| + * Enum for Dialog options to be displayed in the dialog.
|
| + */
|
| + public enum DialogOption {
|
| + CLEAR_HISTORY(R.string.clear_history_title),
|
| + CLEAR_CACHE(R.string.clear_cache_title),
|
| + CLEAR_COOKIES_AND_SITE_DATA(R.string.clear_cookies_and_site_data_title),
|
| + CLEAR_PASSWORDS(R.string.clear_passwords_title),
|
| + CLEAR_FORM_DATA(R.string.clear_formdata_title),
|
| + // Clear bookmarks is only used by ClearSyncData dialog.
|
| + CLEAR_BOOKMARKS_DATA(R.string.clear_bookmarks_title);
|
| +
|
| + private final int mResourceId;
|
| +
|
| + private DialogOption(int resourceId) {
|
| + mResourceId = resourceId;
|
| + }
|
| +
|
| + /**
|
| + * @return resource id of the Dialog option.
|
| + */
|
| + public int getResourceId() {
|
| + return mResourceId;
|
| + }
|
| + }
|
| +
|
| + private EnumSet<DialogOption> mSelectedOptions;
|
| + private DialogOption[] mOptions;
|
| + private AlertDialog mDialog;
|
| + private ProgressDialog mProgressDialog;
|
| +
|
| + protected final void clearBrowsingData(EnumSet<DialogOption> selectedOptions) {
|
| + PrefServiceBridge.getInstance().clearBrowsingData(this,
|
| + selectedOptions.contains(DialogOption.CLEAR_HISTORY),
|
| + selectedOptions.contains(DialogOption.CLEAR_CACHE),
|
| + selectedOptions.contains(DialogOption.CLEAR_COOKIES_AND_SITE_DATA),
|
| + selectedOptions.contains(DialogOption.CLEAR_PASSWORDS),
|
| + selectedOptions.contains(DialogOption.CLEAR_FORM_DATA));
|
| + }
|
| +
|
| + protected void dismissProgressDialog() {
|
| + android.util.Log.i(FRAGMENT_TAG, "in dismissProgressDialog");
|
| + if (mProgressDialog != null && mProgressDialog.isShowing()) {
|
| + android.util.Log.i(FRAGMENT_TAG, "progress dialog dismissed");
|
| + mProgressDialog.dismiss();
|
| + }
|
| + mProgressDialog = null;
|
| + }
|
| +
|
| + /**
|
| + * Returns the Array of dialog options. Options are displayed in the same
|
| + * order as they appear in the array.
|
| + */
|
| + protected DialogOption[] getDialogOptions() {
|
| + return new DialogOption[] {
|
| + DialogOption.CLEAR_HISTORY,
|
| + DialogOption.CLEAR_CACHE,
|
| + DialogOption.CLEAR_COOKIES_AND_SITE_DATA,
|
| + DialogOption.CLEAR_PASSWORDS,
|
| + DialogOption.CLEAR_FORM_DATA};
|
| + }
|
| +
|
| + /**
|
| + * Get the default selections for the dialog.
|
| + * @return EnumSet containing dialog options to be selected.
|
| + */
|
| + protected EnumSet<DialogOption> getDefaultDialogOptionsSelections() {
|
| + return EnumSet.of(DialogOption.CLEAR_HISTORY, DialogOption.CLEAR_CACHE,
|
| + DialogOption.CLEAR_COOKIES_AND_SITE_DATA);
|
| + }
|
| +
|
| + // Called when "clear browsing data" completes.
|
| + // Implements the ChromePreferences.OnClearBrowsingDataListener interface.
|
| + @Override
|
| + public void onBrowsingDataCleared() {
|
| + dismissProgressDialog();
|
| + }
|
| +
|
| + @Override
|
| + public void onClick(DialogInterface dialog, int which) {
|
| + if (which == AlertDialog.BUTTON_POSITIVE) {
|
| + dismissProgressDialog();
|
| + onOptionSelected(mSelectedOptions);
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * Disable the "Clear" button if none of the options are selected. Otherwise, enable it.
|
| + */
|
| + private void updateButtonState() {
|
| + Button clearButton = mDialog.getButton(AlertDialog.BUTTON_POSITIVE);
|
| + if (clearButton != null) clearButton.setEnabled(!mSelectedOptions.isEmpty());
|
| + }
|
| +
|
| + @Override
|
| + public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) {
|
| + if (isChecked) {
|
| + mSelectedOptions.add(mOptions[whichButton]);
|
| + } else {
|
| + mSelectedOptions.remove(mOptions[whichButton]);
|
| + }
|
| + updateButtonState();
|
| + }
|
| +
|
| + @Override
|
| + public Dialog onCreateDialog(Bundle savedInstanceState) {
|
| + DialogOption[] options = getDialogOptions();
|
| + mOptions = Arrays.copyOf(options, options.length);
|
| + mSelectedOptions = getDefaultDialogOptionsSelections();
|
| +
|
| + String[] items = new String[mOptions.length];
|
| + boolean[] itemsChecked = new boolean[mOptions.length];
|
| + Resources resources = getResources();
|
| + for (int i = 0; i < mOptions.length; i++) {
|
| + items[i] = resources.getString(mOptions[i].getResourceId());
|
| + itemsChecked[i] = mSelectedOptions.contains(mOptions[i]);
|
| + }
|
| +
|
| + final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
|
| + .setTitle(R.string.clear_browsing_data_title)
|
| + .setPositiveButton(R.string.clear_data_delete, this)
|
| + .setNegativeButton(R.string.cancel, this)
|
| + .setMultiChoiceItems(items, itemsChecked, this);
|
| +
|
| + if (ChromeSigninController.get(getActivity()).isSignedIn()) {
|
| + final String message = getString(R.string.clear_cookies_no_sign_out_summary);
|
| + final SpannableString messageWithLink = SpanApplier.applySpans(message,
|
| + new SpanApplier.SpanInfo("<link>", "</link>", new ClickableSpan() {
|
| + @Override
|
| + public void onClick(View widget) {
|
| + dismiss();
|
| + Preferences prefActivity = (Preferences) getActivity();
|
| + prefActivity.startFragment(AccountManagementFragment.class.getName(),
|
| + null);
|
| + }
|
| +
|
| + // Change link formatting to use no underline
|
| + @Override
|
| + public void updateDrawState(TextPaint textPaint) {
|
| + textPaint.setColor(textPaint.linkColor);
|
| + textPaint.setUnderlineText(false);
|
| + }
|
| + }));
|
| +
|
| + View view = getActivity().getLayoutInflater().inflate(
|
| + R.layout.single_line_bottom_text_dialog, null);
|
| + TextView summaryView = (TextView) view.findViewById(R.id.summary);
|
| + summaryView.setText(messageWithLink);
|
| + summaryView.setMovementMethod(LinkMovementMethod.getInstance());
|
| + builder.setView(view);
|
| + }
|
| +
|
| + mDialog = builder.create();
|
| + return mDialog;
|
| + }
|
| +
|
| + @Override
|
| + public void onActivityCreated(Bundle savedInstanceState) {
|
| + super.onActivityCreated(savedInstanceState);
|
| + // Now that the dialog's view has been created, update the button state.
|
| + updateButtonState();
|
| + }
|
| +
|
| + /**
|
| + * Called when PositiveButton is clicked for the dialog.
|
| + *
|
| + * @param selectedOptions options which were selected.
|
| + */
|
| + protected void onOptionSelected(final EnumSet<DialogOption> selectedOptions) {
|
| + showProgressDialog();
|
| + clearBrowsingData(selectedOptions);
|
| + }
|
| +
|
| + protected final void showProgressDialog() {
|
| + if (getActivity() == null) return;
|
| +
|
| + android.util.Log.i(FRAGMENT_TAG, "progress dialog shown");
|
| + mProgressDialog = ProgressDialog.show(getActivity(),
|
| + getActivity().getString(R.string.clear_browsing_data_progress_title),
|
| + getActivity().getString(R.string.clear_browsing_data_progress_message), true,
|
| + false);
|
| + }
|
| +}
|
|
|