Storage item to represent cached data.

When touched, offers to clear all cached data.

Bug: 7216370
Change-Id: I86afe66b819fb7deeba909bef507925fc5a590f3
This commit is contained in:
Jeff Sharkey
2012-09-23 17:40:47 -07:00
parent b105531116
commit 0e9cf8a723
4 changed files with 97 additions and 1 deletions

View File

@@ -18,11 +18,15 @@ package com.android.settings.deviceinfo;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.IPackageDataObserver;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
import android.os.Environment;
@@ -48,6 +52,7 @@ import com.android.settings.Utils;
import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.List;
/**
* Panel showing storage usage on disk for known {@link StorageVolume} returned
@@ -56,6 +61,8 @@ import java.util.ArrayList;
public class Memory extends SettingsPreferenceFragment {
private static final String TAG = "MemorySettings";
private static final String TAG_CONFIRM_CLEAR_CACHE = "confirmClearCache";
private static final int DLG_CONFIRM_UNMOUNT = 1;
private static final int DLG_ERROR_UNMOUNT = 2;
@@ -202,6 +209,11 @@ public class Memory extends SettingsPreferenceFragment {
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
if (StorageVolumePreferenceCategory.KEY_CACHE.equals(preference.getKey())) {
ConfirmClearCacheFragment.show(this);
return true;
}
for (StorageVolumePreferenceCategory category : mCategories) {
Intent intent = category.intentForClick(preference);
if (intent != null) {
@@ -339,4 +351,68 @@ public class Memory extends SettingsPreferenceFragment {
// Not much can be done
}
}
private void onCacheCleared() {
for (StorageVolumePreferenceCategory category : mCategories) {
category.onCacheCleared();
}
}
private static class ClearCacheObserver extends IPackageDataObserver.Stub {
private final Memory mTarget;
private int mRemaining;
public ClearCacheObserver(Memory target, int remaining) {
mTarget = target;
mRemaining = remaining;
}
@Override
public void onRemoveCompleted(final String packageName, final boolean succeeded) {
synchronized (this) {
if (--mRemaining == 0) {
mTarget.onCacheCleared();
}
}
}
}
/**
* Dialog to request user confirmation before clearing all cache data.
*/
public static class ConfirmClearCacheFragment extends DialogFragment {
public static void show(Memory parent) {
if (!parent.isAdded()) return;
final ConfirmClearCacheFragment dialog = new ConfirmClearCacheFragment();
dialog.setTargetFragment(parent, 0);
dialog.show(parent.getFragmentManager(), TAG_CONFIRM_CLEAR_CACHE);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Context context = getActivity();
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(R.string.memory_clear_cache_title);
builder.setMessage(getString(R.string.memory_clear_cache_message));
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final Memory target = (Memory) getTargetFragment();
final PackageManager pm = context.getPackageManager();
final List<PackageInfo> infos = pm.getInstalledPackages(0);
final ClearCacheObserver observer = new ClearCacheObserver(
target, infos.size());
for (PackageInfo info : infos) {
pm.deleteApplicationCacheFiles(info.packageName, observer);
}
}
});
builder.setNegativeButton(android.R.string.cancel, null);
return builder.create();
}
}
}

View File

@@ -46,6 +46,8 @@ import java.util.Iterator;
import java.util.List;
public class StorageVolumePreferenceCategory extends PreferenceCategory {
public static final String KEY_CACHE = "cache";
private static final int ORDER_USAGE_BAR = -2;
private static final int ORDER_STORAGE_LOW = -1;
@@ -68,6 +70,7 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory {
private StorageItemPreference mItemDcim;
private StorageItemPreference mItemMusic;
private StorageItemPreference mItemDownloads;
private StorageItemPreference mItemCache;
private StorageItemPreference mItemMisc;
private List<StorageItemPreference> mItemUsers = Lists.newArrayList();
@@ -157,8 +160,11 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory {
mItemDcim = buildItem(R.string.memory_dcim_usage, R.color.memory_dcim);
mItemMusic = buildItem(R.string.memory_music_usage, R.color.memory_music);
mItemDownloads = buildItem(R.string.memory_downloads_usage, R.color.memory_downloads);
mItemCache = buildItem(R.string.memory_media_cache_usage, R.color.memory_cache);
mItemMisc = buildItem(R.string.memory_media_misc_usage, R.color.memory_misc);
mItemCache.setKey(KEY_CACHE);
final boolean showDetails = mVolume == null || mVolume.isPrimary();
if (showDetails) {
if (showUsers) {
@@ -169,6 +175,7 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory {
addPreference(mItemDcim);
addPreference(mItemMusic);
addPreference(mItemDownloads);
addPreference(mItemCache);
addPreference(mItemMisc);
if (showUsers) {
@@ -314,7 +321,7 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory {
// Count caches as available space, since system manages them
mItemTotal.setSummary(formatSize(details.totalSize));
mItemAvailable.setSummary(formatSize(details.availSize + details.cacheSize));
mItemAvailable.setSummary(formatSize(details.availSize));
mUsageBarPreference.clear();
@@ -332,6 +339,7 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory {
final long downloadsSize = totalValues(details.mediaSize, Environment.DIRECTORY_DOWNLOADS);
updatePreference(mItemDownloads, downloadsSize);
updatePreference(mItemCache, details.cacheSize);
updatePreference(mItemMisc, details.miscSize);
for (StorageItemPreference userPref : mItemUsers) {
@@ -376,6 +384,10 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory {
measure();
}
public void onCacheCleared() {
measure();
}
public void onPause() {
mMeasure.cleanUp();
}