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) { |