Fake the cache size to be 0 bytes when cleared.
The fast track storage calculation returns a non-zero answer after
the storage has been cleared. The simplest workaround here is to
fake the size as 0 bytes in the view after cache clearing.
It will not be zero if the user exits and comes back, but this
should be fine.
MARK IT ZERO!
Change-Id: Ia012c2cf2842040d5eac3d4a72539ec7dcfb9570
Fixes: 34965659
Test: Settings Robotest
(cherry picked from commit bf1f8e9ca7
)
This commit is contained in:
@@ -101,6 +101,8 @@ public class AppStorageSettings extends AppInfoWithHeader
|
||||
private static final String KEY_URI_CATEGORY = "uri_category";
|
||||
private static final String KEY_CLEAR_URI = "clear_uri_button";
|
||||
|
||||
private static final String KEY_CACHE_CLEARED = "cache_cleared";
|
||||
|
||||
// Views related to cache info
|
||||
private Preference mCacheSize;
|
||||
private Button mClearDataButton;
|
||||
@@ -115,6 +117,7 @@ public class AppStorageSettings extends AppInfoWithHeader
|
||||
private PreferenceCategory mUri;
|
||||
|
||||
private boolean mCanClearData = true;
|
||||
private boolean mCacheCleared;
|
||||
|
||||
private AppStorageStats mLastResult;
|
||||
private AppStorageSizesController mSizeController;
|
||||
@@ -133,6 +136,9 @@ public class AppStorageSettings extends AppInfoWithHeader
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (savedInstanceState != null) {
|
||||
mCacheCleared = savedInstanceState.getBoolean(KEY_CACHE_CLEARED, false);
|
||||
}
|
||||
|
||||
addPreferencesFromResource(R.xml.app_storage_settings);
|
||||
setupViews();
|
||||
@@ -145,6 +151,12 @@ public class AppStorageSettings extends AppInfoWithHeader
|
||||
updateSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putBoolean(KEY_CACHE_CLEARED, mCacheCleared);
|
||||
}
|
||||
|
||||
private void setupViews() {
|
||||
mComputingStr = getActivity().getText(R.string.computing_size);
|
||||
mInvalidSizeStr = getActivity().getText(R.string.invalid_size_value);
|
||||
@@ -523,6 +535,10 @@ public class AppStorageSettings extends AppInfoWithHeader
|
||||
}
|
||||
|
||||
private void updateUiWithSize(AppStorageStats result) {
|
||||
if (mCacheCleared) {
|
||||
mSizeController.setCacheCleared(true);
|
||||
}
|
||||
|
||||
mSizeController.updateUi(getContext());
|
||||
|
||||
if (result == null) {
|
||||
@@ -539,7 +555,7 @@ public class AppStorageSettings extends AppInfoWithHeader
|
||||
mClearDataButton.setEnabled(true);
|
||||
mClearDataButton.setOnClickListener(this);
|
||||
}
|
||||
if (cacheSize <= 0) {
|
||||
if (cacheSize <= 0 || mCacheCleared) {
|
||||
mClearCacheButton.setEnabled(false);
|
||||
} else {
|
||||
mClearCacheButton.setEnabled(true);
|
||||
@@ -562,6 +578,7 @@ public class AppStorageSettings extends AppInfoWithHeader
|
||||
processClearMsg(msg);
|
||||
break;
|
||||
case MSG_CLEAR_CACHE:
|
||||
mCacheCleared = true;
|
||||
// Refresh size info
|
||||
updateSize();
|
||||
break;
|
||||
|
@@ -39,6 +39,7 @@ public class AppStorageSizesController {
|
||||
@Nullable
|
||||
private StorageStatsSource.AppStorageStats mLastResult;
|
||||
private boolean mLastResultFailed;
|
||||
private boolean mCachedCleared;
|
||||
private long mLastCodeSize = -1;
|
||||
private long mLastDataSize = -1;
|
||||
private long mLastCacheSize = -1;
|
||||
@@ -77,7 +78,7 @@ public class AppStorageSizesController {
|
||||
mLastDataSize = dataSize;
|
||||
mDataSize.setSummary(getSizeStr(context, dataSize));
|
||||
}
|
||||
long cacheSize = mLastResult.getCacheBytes();
|
||||
long cacheSize = mCachedCleared ? 0 : mLastResult.getCacheBytes();
|
||||
if (mLastCacheSize != cacheSize) {
|
||||
mLastCacheSize = cacheSize;
|
||||
mCacheSize.setSummary(getSizeStr(context, cacheSize));
|
||||
@@ -100,6 +101,15 @@ public class AppStorageSizesController {
|
||||
mLastResultFailed = result == null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets if we have cleared the cache and should zero the cache bytes.
|
||||
* When the cache is cleared, the cache directories are recreated. These directories have
|
||||
* some size, but are empty. We zero this out to best match user expectations.
|
||||
*/
|
||||
public void setCacheCleared(boolean isCleared) {
|
||||
mCachedCleared = isCleared;
|
||||
}
|
||||
|
||||
private String getSizeStr(Context context, long size) {
|
||||
return Formatter.formatFileSize(context, size);
|
||||
}
|
||||
|
@@ -92,4 +92,22 @@ public class AppStorageSizesControllerTest {
|
||||
assertThat(mDataPreference.getSummary()).isEqualTo("100B");
|
||||
assertThat(mTotalPreference.getSummary()).isEqualTo("111B");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void fakeCacheFlagSetsCacheToZero() {
|
||||
AppStorageStats result = mock(AppStorageStats.class);
|
||||
when(result.getCodeBytes()).thenReturn(1L);
|
||||
when(result.getCacheBytes()).thenReturn(10L);
|
||||
when(result.getDataBytes()).thenReturn(100L);
|
||||
when(result.getTotalBytes()).thenReturn(111L);
|
||||
|
||||
mController.setResult(result);
|
||||
mController.setCacheCleared(true);
|
||||
mController.updateUi(mContext);
|
||||
|
||||
assertThat(mAppPreference.getSummary()).isEqualTo("1.00B");
|
||||
assertThat(mCachePreference.getSummary()).isEqualTo("0.00B");
|
||||
assertThat(mDataPreference.getSummary()).isEqualTo("100B");
|
||||
assertThat(mTotalPreference.getSummary()).isEqualTo("101B");
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user