Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(662)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java

Issue 1465363002: [Storage] Android - ManageSpace UI, Important Origins, and CBD Dialog (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698