diff --git a/src/com/android/settings/applications/FetchPackageStorageAsyncLoader.java b/src/com/android/settings/applications/FetchPackageStorageAsyncLoader.java index 97e5b7bf9d3..b39ec3b18b5 100644 --- a/src/com/android/settings/applications/FetchPackageStorageAsyncLoader.java +++ b/src/com/android/settings/applications/FetchPackageStorageAsyncLoader.java @@ -19,6 +19,7 @@ package com.android.settings.applications; import android.annotation.NonNull; import android.content.Context; import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager.NameNotFoundException; import android.os.UserHandle; import android.util.Log; @@ -27,6 +28,8 @@ import com.android.settings.utils.AsyncLoader; import com.android.settingslib.applications.StorageStatsSource; import com.android.settingslib.applications.StorageStatsSource.AppStorageStats; +import java.io.IOException; + /** * Fetches the storage stats using the StorageStatsManager for a given package and user tuple. */ @@ -49,7 +52,7 @@ public class FetchPackageStorageAsyncLoader extends AsyncLoader AppStorageStats result = null; try { result = mSource.getStatsForPackage(mInfo.volumeUuid, mInfo.packageName, mUser); - } catch (IllegalStateException e) { + } catch (NameNotFoundException | IOException e) { Log.w(TAG, "Package may have been removed during query, failing gracefully", e); } return result; diff --git a/src/com/android/settings/applications/MusicViewHolderController.java b/src/com/android/settings/applications/MusicViewHolderController.java index 69f89580c58..1bca26a4e23 100644 --- a/src/com/android/settings/applications/MusicViewHolderController.java +++ b/src/com/android/settings/applications/MusicViewHolderController.java @@ -23,15 +23,20 @@ import android.os.UserHandle; import android.provider.DocumentsContract; import android.support.annotation.WorkerThread; import android.text.format.Formatter; +import android.util.Log; import com.android.settings.R; import com.android.settings.Utils; import com.android.settingslib.applications.StorageStatsSource; +import java.io.IOException; + /** * MusicViewHolderController controls an Audio/Music file view in the ManageApplications view. */ public class MusicViewHolderController implements FileViewHolderController { + private static final String TAG = "MusicViewHolderController"; + private static final String AUTHORITY_MEDIA = "com.android.providers.media.documents"; private Context mContext; @@ -51,7 +56,12 @@ public class MusicViewHolderController implements FileViewHolderController { @Override @WorkerThread public void queryStats() { - mMusicSize = mSource.getExternalStorageStats(mVolumeUuid, mUser).audioBytes; + try { + mMusicSize = mSource.getExternalStorageStats(mVolumeUuid, mUser).audioBytes; + } catch (IOException e) { + mMusicSize = 0; + Log.w(TAG, e); + } } @Override diff --git a/src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java b/src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java index cf0239d95bd..86528046f58 100644 --- a/src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java +++ b/src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java @@ -23,6 +23,7 @@ import static android.content.pm.ApplicationInfo.CATEGORY_VIDEO; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.UserInfo; +import android.content.pm.PackageManager.NameNotFoundException; import android.os.UserHandle; import android.util.Log; import android.util.SparseArray; @@ -32,6 +33,7 @@ import com.android.settings.applications.UserManagerWrapper; import com.android.settings.utils.AsyncLoader; import com.android.settingslib.applications.StorageStatsSource; +import java.io.IOException; import java.util.List; /** @@ -83,7 +85,7 @@ public class StorageAsyncLoader StorageStatsSource.AppStorageStats stats; try { stats = mStatsManager.getStatsForPackage(mUuid, app.packageName, myUser); - } catch (IllegalStateException e) { + } catch (NameNotFoundException | IOException e) { // This may happen if the package was removed during our calculation. Log.w("App unexpectedly not found", e); continue; @@ -122,7 +124,11 @@ public class StorageAsyncLoader } Log.d(TAG, "Loading external stats"); - result.externalStats = mStatsManager.getExternalStorageStats(mUuid, UserHandle.of(userId)); + try { + result.externalStats = mStatsManager.getExternalStorageStats(mUuid, UserHandle.of(userId)); + } catch (IOException e) { + Log.w(TAG, e); + } Log.d(TAG, "Obtaining result completed"); return result; } diff --git a/tests/robotests/src/com/android/settings/applications/FetchPackageStorageAsyncLoaderTest.java b/tests/robotests/src/com/android/settings/applications/FetchPackageStorageAsyncLoaderTest.java index 04eeb022e3c..36116c00790 100644 --- a/tests/robotests/src/com/android/settings/applications/FetchPackageStorageAsyncLoaderTest.java +++ b/tests/robotests/src/com/android/settings/applications/FetchPackageStorageAsyncLoaderTest.java @@ -40,6 +40,8 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import java.io.IOException; + @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class FetchPackageStorageAsyncLoaderTest { @@ -56,7 +58,7 @@ public class FetchPackageStorageAsyncLoaderTest { } @Test - public void worksForValidPackageNameAndUid() { + public void worksForValidPackageNameAndUid() throws Exception { AppStorageStats stats = mock(AppStorageStats.class); when(stats.getCodeBytes()).thenReturn(1L); when(stats.getDataBytes()).thenReturn(2L); @@ -72,9 +74,9 @@ public class FetchPackageStorageAsyncLoaderTest { } @Test - public void installerExceptionHandledCleanly() { + public void installerExceptionHandledCleanly() throws Exception { when(mSource.getStatsForPackage(anyString(), anyString(), any(UserHandle.class))). - thenThrow(new IllegalStateException("intentional failure")); + thenThrow(new IOException("intentional failure")); ApplicationInfo info = new ApplicationInfo(); info.packageName = PACKAGE_NAME; FetchPackageStorageAsyncLoader task = new FetchPackageStorageAsyncLoader( diff --git a/tests/robotests/src/com/android/settings/applications/MusicViewHolderControllerTest.java b/tests/robotests/src/com/android/settings/applications/MusicViewHolderControllerTest.java index 9bc74827c22..644014129f7 100644 --- a/tests/robotests/src/com/android/settings/applications/MusicViewHolderControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/MusicViewHolderControllerTest.java @@ -81,7 +81,7 @@ public class MusicViewHolderControllerTest { } @Test - public void storageShouldRepresentStorageStatsQuery() { + public void storageShouldRepresentStorageStatsQuery() throws Exception { when(mSource.getExternalStorageStats(any(String.class), any(UserHandle.class))).thenReturn( new StorageStatsSource.ExternalStorageStats(1, 1, 0, 0)); diff --git a/tests/robotests/src/com/android/settings/deviceinfo/StorageSettingsTest.java b/tests/robotests/src/com/android/settings/deviceinfo/StorageSettingsTest.java index 95f9fbe28fe..17abab1a5c0 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/StorageSettingsTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/StorageSettingsTest.java @@ -70,7 +70,7 @@ public class StorageSettingsTest { } @Test - public void updateSummary_shouldDisplayUsedPercentAndFreeSpace() { + public void updateSummary_shouldDisplayUsedPercentAndFreeSpace() throws Exception { final SummaryLoader loader = mock(SummaryLoader.class); final SummaryLoader.SummaryProvider provider = StorageSettings.SUMMARY_PROVIDER_FACTORY.createSummaryProvider(mActivity, loader); diff --git a/tests/unit/src/com/android/settings/deviceinfo/storage/StorageAsyncLoaderTest.java b/tests/unit/src/com/android/settings/deviceinfo/storage/StorageAsyncLoaderTest.java index f7131b366bd..546ea4b799e 100644 --- a/tests/unit/src/com/android/settings/deviceinfo/storage/StorageAsyncLoaderTest.java +++ b/tests/unit/src/com/android/settings/deviceinfo/storage/StorageAsyncLoaderTest.java @@ -194,8 +194,8 @@ public class StorageAsyncLoaderTest { // Should not crash. } - private ApplicationInfo addPackage( - String packageName, long cacheSize, long codeSize, long dataSize, int category) { + private ApplicationInfo addPackage(String packageName, long cacheSize, long codeSize, + long dataSize, int category) throws Exception { StorageStatsSource.AppStorageStats storageStats = mock(StorageStatsSource.AppStorageStats.class); when(storageStats.getCodeBytes()).thenReturn(codeSize);