Chromium Code Reviews| 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 d5dc057e206e8403d1a310d0219d1149348f5b98..7b9a76a0ff3d7e8f8d654abbc5e600bcd6877cd9 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 = null; |
| // Keys for individual preferences. |
| public static final String READ_WRITE_TOGGLE_KEY = "read_write_toggle"; |
| @@ -111,6 +125,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<>(); |
| @@ -188,6 +203,7 @@ public class SingleCategoryPreferences extends PreferenceFragment |
| } |
| } |
| + mWebsites = websites; |
| updateBlockedHeader(blocked); |
| ChromeSwitchPreference globalToggle = (ChromeSwitchPreference) |
| getPreferenceScreen().findPreference(READ_WRITE_TOGGLE_KEY); |
| @@ -280,13 +296,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) { |
| @@ -296,6 +307,49 @@ 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_preference_fragment, 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. |
| + */ |
| + 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 (WebsitePreference preference : mWebsites) { |
| + 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); |
| @@ -392,6 +446,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) return; |
|
Theresa
2016/05/13 06:02:30
As an extra precaution, should we also check that
dmurph
2016/05/13 23:46:24
Done.
|
| + |
| + 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) { |