Merge "Fix storage settings crash." into oc-dev

This commit is contained in:
Daniel Nishi
2017-04-14 22:34:53 +00:00
committed by Android (Google) Code Review
3 changed files with 24 additions and 3 deletions

View File

@@ -117,7 +117,7 @@ public class StorageDashboardFragment extends DashboardFragment
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
getLoaderManager().initLoader(STORAGE_JOB_ID, Bundle.EMPTY, this); getLoaderManager().restartLoader(STORAGE_JOB_ID, Bundle.EMPTY, this);
getLoaderManager().initLoader(ICON_JOB_ID, Bundle.EMPTY, new IconLoaderCallbacks()); getLoaderManager().initLoader(ICON_JOB_ID, Bundle.EMPTY, new IconLoaderCallbacks());
} }

View File

@@ -79,8 +79,15 @@ public class StorageAsyncLoader
UserHandle myUser = UserHandle.of(userId); UserHandle myUser = UserHandle.of(userId);
for (int i = 0, size = applicationInfos.size(); i < size; i++) { for (int i = 0, size = applicationInfos.size(); i < size; i++) {
ApplicationInfo app = applicationInfos.get(i); ApplicationInfo app = applicationInfos.get(i);
StorageStatsSource.AppStorageStats stats =
mStatsManager.getStatsForPackage(mUuid, app.packageName, myUser); StorageStatsSource.AppStorageStats stats;
try {
stats = mStatsManager.getStatsForPackage(mUuid, app.packageName, myUser);
} catch (IllegalStateException e) {
// This may happen if the package was removed during our calculation.
Log.w("App unexpectedly not found", e);
continue;
}
long attributedAppSizeInBytes = stats.getDataBytes(); long attributedAppSizeInBytes = stats.getDataBytes();
// This matches how the package manager calculates sizes -- by zeroing out code sizes of // This matches how the package manager calculates sizes -- by zeroing out code sizes of

View File

@@ -180,6 +180,20 @@ public class StorageAsyncLoaderTest {
assertThat(result.get(PRIMARY_USER_ID).otherAppsSize).isEqualTo(0); assertThat(result.get(PRIMARY_USER_ID).otherAppsSize).isEqualTo(0);
} }
@Test
public void testRemovedPackageDoesNotCrash() throws Exception {
ApplicationInfo info = new ApplicationInfo();
info.packageName = PACKAGE_NAME_1;
info.category = ApplicationInfo.CATEGORY_UNDEFINED;
mInfo.add(info);
when(mSource.getStatsForPackage(anyString(), anyString(), any(UserHandle.class)))
.thenThrow(new IllegalStateException());
SparseArray<StorageAsyncLoader.AppsStorageResult> result = mLoader.loadInBackground();
// Should not crash.
}
private ApplicationInfo addPackage( private ApplicationInfo addPackage(
String packageName, long cacheSize, long codeSize, long dataSize, int category) { String packageName, long cacheSize, long codeSize, long dataSize, int category) {
StorageStatsSource.AppStorageStats storageStats = StorageStatsSource.AppStorageStats storageStats =