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:
Daniel Nishi
2017-03-28 10:44:37 -07:00
parent 9234a34a80
commit 1359d4fe0e
3 changed files with 47 additions and 2 deletions

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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");
}
}