Storage item to represent cached data.
When touched, offers to clear all cached data. Bug: 7216370 Change-Id: I86afe66b819fb7deeba909bef507925fc5a590f3
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
|
Reference in New Issue
Block a user