| Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java
|
| index b3a4288fb80d6dc3130a6d9ed48eaa4228646401..d71b0d2e1faa134940ad4df1c7d534e73fb272d0 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java
|
| @@ -4,6 +4,8 @@
|
|
|
| package org.chromium.chrome.browser.preferences.website;
|
|
|
| +import android.content.DialogInterface;
|
| +import android.content.res.Resources;
|
| import android.os.Bundle;
|
| import android.preference.Preference;
|
| import android.preference.Preference.OnPreferenceChangeListener;
|
| @@ -12,11 +14,17 @@ import android.preference.PreferenceFragment;
|
| import android.preference.PreferenceGroup;
|
| import android.preference.PreferenceScreen;
|
| import android.support.v4.view.MenuItemCompat;
|
| +import android.support.v7.app.AlertDialog;
|
| import android.support.v7.widget.SearchView;
|
| +import android.text.format.Formatter;
|
| +import android.view.LayoutInflater;
|
| import android.view.Menu;
|
| import android.view.MenuInflater;
|
| import android.view.MenuItem;
|
| +import android.view.View;
|
| +import android.view.ViewGroup;
|
| import android.view.inputmethod.EditorInfo;
|
| +import android.widget.Button;
|
| import android.widget.ListView;
|
| import android.widget.TextView;
|
|
|
| @@ -33,6 +41,7 @@ import org.chromium.chrome.browser.preferences.ManagedPreferenceDelegate;
|
| import org.chromium.chrome.browser.preferences.ManagedPreferencesUtils;
|
| import org.chromium.chrome.browser.preferences.PrefServiceBridge;
|
| import org.chromium.chrome.browser.preferences.ProtectedContentResetCredentialConfirmDialogFragment;
|
| +import org.chromium.chrome.browser.preferences.website.Website.StoredDataClearedCallback;
|
| import org.chromium.chrome.browser.profiles.Profile;
|
| import org.chromium.chrome.browser.widget.TintedDrawable;
|
| import org.chromium.ui.widget.Toast;
|
| @@ -52,7 +61,8 @@ import java.util.Set;
|
| public class SingleCategoryPreferences extends PreferenceFragment
|
| implements OnPreferenceChangeListener, OnPreferenceClickListener,
|
| AddExceptionPreference.SiteAddedCallback,
|
| - ProtectedContentResetCredentialConfirmDialogFragment.Listener {
|
| + ProtectedContentResetCredentialConfirmDialogFragment.Listener,
|
| + View.OnClickListener {
|
| // The key to use to pass which category this preference should display,
|
| // e.g. Location/Popups/All sites (if blank).
|
| public static final String EXTRA_CATEGORY = "category";
|
| @@ -62,6 +72,8 @@ public class SingleCategoryPreferences extends PreferenceFragment
|
| private TextView mEmptyView;
|
| // The view for searching the list of items.
|
| private SearchView mSearchView;
|
| + // The clear button displayed in the Storage view.
|
| + private Button mClearButton;
|
| // The Site Settings Category we are showing.
|
| private SiteSettingsCategory mCategory;
|
| // If not blank, represents a substring to use to search for site names.
|
| @@ -76,6 +88,8 @@ public class SingleCategoryPreferences extends PreferenceFragment
|
| private boolean mIsInitialRun = true;
|
| // The number of sites that are on the Allowed list.
|
| private int mAllowedSiteCount = 0;
|
| + // The websites that are currently displayed to the user.
|
| + private List<WebsitePreference> mWebsites;
|
|
|
| // Keys for individual preferences.
|
| public static final String READ_WRITE_TOGGLE_KEY = "read_write_toggle";
|
| @@ -112,6 +126,7 @@ public class SingleCategoryPreferences extends PreferenceFragment
|
| // This method may be called after the activity has been destroyed.
|
| // In that case, bail out.
|
| if (getActivity() == null) return;
|
| + mWebsites = null;
|
|
|
| // First we scan origins to get settings from there.
|
| List<WebsitePreference> websites = new ArrayList<>();
|
| @@ -189,6 +204,7 @@ public class SingleCategoryPreferences extends PreferenceFragment
|
| }
|
| }
|
|
|
| + mWebsites = websites;
|
| updateBlockedHeader(blocked);
|
| ChromeSwitchPreference globalToggle = (ChromeSwitchPreference)
|
| getPreferenceScreen().findPreference(READ_WRITE_TOGGLE_KEY);
|
| @@ -281,13 +297,8 @@ public class SingleCategoryPreferences extends PreferenceFragment
|
| }
|
|
|
| @Override
|
| - public void onActivityCreated(Bundle savedInstanceState) {
|
| - addPreferencesFromResource(R.xml.website_preferences);
|
| - ListView listView = (ListView) getView().findViewById(android.R.id.list);
|
| - mEmptyView = (TextView) getView().findViewById(android.R.id.empty);
|
| - listView.setEmptyView(mEmptyView);
|
| - listView.setDivider(null);
|
| -
|
| + public View onCreateView(
|
| + LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
| // Read which category we should be showing.
|
| String category = "";
|
| if (getArguments() != null) {
|
| @@ -297,6 +308,51 @@ public class SingleCategoryPreferences extends PreferenceFragment
|
| if (mCategory == null) {
|
| mCategory = SiteSettingsCategory.fromString(SiteSettingsCategory.CATEGORY_ALL_SITES);
|
| }
|
| + if (!mCategory.showStorageSites()) {
|
| + return super.onCreateView(inflater, container, savedInstanceState);
|
| + } else {
|
| + return inflater.inflate(R.layout.storage_preferences, container, false);
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * This clears all the storage for websites that are displayed to the user. This happens
|
| + * asynchronously, and then we call {@link #getInfoForOrigins()} when we're done.
|
| + * TODO(dmurph): Add UMA metrics for button clicks and clears.
|
| + */
|
| + public void clearStorage() {
|
| + if (mWebsites == null) {
|
| + return;
|
| + }
|
| + // The goal is to refresh the info for origins again after we've cleared all of them, so we
|
| + // wait until the last website is cleared to refresh the origin list.
|
| + final int[] numLeft = new int[1];
|
| + numLeft[0] = mWebsites.size();
|
| + for (int i = 0; i < mWebsites.size(); i++) {
|
| + WebsitePreference preference = mWebsites.get(i);
|
| + preference.site().clearAllStoredData(new StoredDataClearedCallback() {
|
| + @Override
|
| + public void onStoredDataCleared() {
|
| + if (--numLeft[0] <= 0) {
|
| + getInfoForOrigins();
|
| + }
|
| + }
|
| + });
|
| + }
|
| + }
|
| +
|
| + @Override
|
| + public void onActivityCreated(Bundle savedInstanceState) {
|
| + addPreferencesFromResource(R.xml.website_preferences);
|
| + ListView listView = (ListView) getView().findViewById(android.R.id.list);
|
| + mEmptyView = (TextView) getView().findViewById(android.R.id.empty);
|
| + listView.setEmptyView(mEmptyView);
|
| + listView.setDivider(null);
|
| +
|
| + mClearButton = (Button) getView().findViewById(R.id.clear_button);
|
| + if (mClearButton != null) {
|
| + mClearButton.setOnClickListener(this);
|
| + }
|
|
|
| String title = getArguments().getString(EXTRA_TITLE);
|
| if (title != null) getActivity().setTitle(title);
|
| @@ -393,6 +449,35 @@ public class SingleCategoryPreferences extends PreferenceFragment
|
| return super.onPreferenceTreeClick(screen, preference);
|
| }
|
|
|
| + /** OnClickListener for the clear button. We show an alert dialog to confirm the action */
|
| + @Override
|
| + public void onClick(View v) {
|
| + if (getActivity() == null || v != mClearButton) return;
|
| +
|
| + long totalUsage = 0;
|
| + if (mWebsites != null) {
|
| + for (WebsitePreference preference : mWebsites) {
|
| + totalUsage += preference.site().getTotalUsage();
|
| + }
|
| + }
|
| +
|
| + AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
|
| + builder.setPositiveButton(R.string.storage_clear_dialog_clear_storage_option,
|
| + new DialogInterface.OnClickListener() {
|
| + @Override
|
| + public void onClick(DialogInterface dialog, int id) {
|
| + clearStorage();
|
| + }
|
| + });
|
| + builder.setNegativeButton(R.string.cancel, null);
|
| + builder.setTitle(R.string.storage_clear_site_storage_title);
|
| + Resources res = getResources();
|
| + String dialogFormattedText = res.getString(R.string.storage_clear_dialog_text,
|
| + Formatter.formatShortFileSize(getContext(), totalUsage));
|
| + builder.setMessage(dialogFormattedText);
|
| + builder.create().show();
|
| + }
|
| +
|
| // OnPreferenceChangeListener:
|
| @Override
|
| public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|