From 313ab1727014d535790bc89afdcf725ff936e5b4 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Fri, 29 Jun 2012 15:01:23 -0700 Subject: [PATCH] Fix issue #6761130: Clearing app data in settings does not clear app's USB storage The installed app details was not correctly distinguishing between cache and normal data on external storage. The cache files on external storage are now correctly shown in the cache section, since those are what get deleted when you hit the clear cache button. Change-Id: Id98bdb7fb5202d6a092fe5a772638eeb6aed2b47 --- .../settings/applications/ApplicationsState.java | 14 +++++++++++++- .../settings/applications/InstalledAppDetails.java | 22 ++++++++++++---------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/com/android/settings/applications/ApplicationsState.java b/src/com/android/settings/applications/ApplicationsState.java index 0a5c26e0c3..3256fb2e85 100644 --- a/src/com/android/settings/applications/ApplicationsState.java +++ b/src/com/android/settings/applications/ApplicationsState.java @@ -73,6 +73,16 @@ public class ApplicationsState { long dataSize; long externalCodeSize; long externalDataSize; + + // This is the part of externalDataSize that is in the cache + // section of external storage. Note that we don't just combine + // this with cacheSize because currently the platform can't + // automatically trim this data when needed, so it is something + // the user may need to manage. The externalDataSize also includes + // this value, since what this is here is really the part of + // externalDataSize that we can just consider to be "cache" files + // for purposes of cleaning them up in the app details UI. + long externalCacheSize; } public static class AppEntry extends SizeInfo { @@ -820,13 +830,15 @@ public class ApplicationsState { entry.codeSize != stats.codeSize || entry.dataSize != stats.dataSize || entry.externalCodeSize != externalCodeSize || - entry.externalDataSize != externalDataSize) { + entry.externalDataSize != externalDataSize || + entry.externalCacheSize != stats.externalCacheSize) { entry.size = newSize; entry.cacheSize = stats.cacheSize; entry.codeSize = stats.codeSize; entry.dataSize = stats.dataSize; entry.externalCodeSize = externalCodeSize; entry.externalDataSize = externalDataSize; + entry.externalCacheSize = stats.externalCacheSize; entry.sizeStr = getSizeStr(entry.size); entry.internalSize = getTotalInternalSize(stats); entry.internalSizeStr = getSizeStr(entry.internalSize); diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java index 9166b15e22..d85c341713 100644 --- a/src/com/android/settings/applications/InstalledAppDetails.java +++ b/src/com/android/settings/applications/InstalledAppDetails.java @@ -394,8 +394,8 @@ public class InstalledAppDetails extends Fragment // Initialize clear data and move install location buttons View data_buttons_panel = view.findViewById(R.id.data_buttons_panel); - mClearDataButton = (Button) data_buttons_panel.findViewById(R.id.left_button); - mMoveAppButton = (Button) data_buttons_panel.findViewById(R.id.right_button); + mClearDataButton = (Button) data_buttons_panel.findViewById(R.id.right_button); + mMoveAppButton = (Button) data_buttons_panel.findViewById(R.id.left_button); // Cache section mCacheSize = (TextView) view.findViewById(R.id.cache_size_text); @@ -687,26 +687,28 @@ public class InstalledAppDetails extends Fragment mLastExternalCodeSize = mAppEntry.externalCodeSize; mExternalCodeSize.setText(getSizeStr(mAppEntry.externalCodeSize)); } - if (mLastExternalDataSize != mAppEntry.externalDataSize) { - mLastExternalDataSize = mAppEntry.externalDataSize; - mExternalDataSize.setText(getSizeStr(mAppEntry.externalDataSize)); + long nonCacheExtDataSize = mAppEntry.externalDataSize - mAppEntry.externalCacheSize; + if (mLastExternalDataSize != nonCacheExtDataSize) { + mLastExternalDataSize = nonCacheExtDataSize; + mExternalDataSize.setText(getSizeStr(nonCacheExtDataSize)); } - if (mLastCacheSize != mAppEntry.cacheSize) { - mLastCacheSize = mAppEntry.cacheSize; - mCacheSize.setText(getSizeStr(mAppEntry.cacheSize)); + long cacheSize = mAppEntry.cacheSize + mAppEntry.externalCacheSize; + if (mLastCacheSize != cacheSize) { + mLastCacheSize = cacheSize; + mCacheSize.setText(getSizeStr(cacheSize)); } if (mLastTotalSize != mAppEntry.size) { mLastTotalSize = mAppEntry.size; mTotalSize.setText(getSizeStr(mAppEntry.size)); } - if (mAppEntry.dataSize <= 0 || !mCanClearData) { + if ((mAppEntry.dataSize+nonCacheExtDataSize) <= 0 || !mCanClearData) { mClearDataButton.setEnabled(false); } else { mClearDataButton.setEnabled(true); mClearDataButton.setOnClickListener(this); } - if (mAppEntry.cacheSize <= 0) { + if (cacheSize <= 0) { mClearCacheButton.setEnabled(false); } else { mClearCacheButton.setEnabled(true); -- 2.11.0