OSDN Git Service

Follow storage API polishing.
authorJeff Sharkey <jsharkey@android.com>
Mon, 17 Apr 2017 15:31:33 +0000 (09:31 -0600)
committerJeff Sharkey <jsharkey@android.com>
Mon, 17 Apr 2017 20:29:15 +0000 (14:29 -0600)
Test: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest
Bug: 373259233581289935806020
Change-Id: I4965b7391018354157f0683a643a14c5e9cd338d

src/com/android/settings/applications/FetchPackageStorageAsyncLoader.java
src/com/android/settings/applications/MusicViewHolderController.java
src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java
tests/robotests/src/com/android/settings/applications/FetchPackageStorageAsyncLoaderTest.java
tests/robotests/src/com/android/settings/applications/MusicViewHolderControllerTest.java
tests/robotests/src/com/android/settings/deviceinfo/StorageSettingsTest.java
tests/unit/src/com/android/settings/deviceinfo/storage/StorageAsyncLoaderTest.java

index 97e5b7b..b39ec3b 100644 (file)
@@ -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>
         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;
index 69f8958..1bca26a 100644 (file)
@@ -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
index cf0239d..8652804 100644 (file)
@@ -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;
     }
index 04eeb02..36116c0 100644 (file)
@@ -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(
index 9bc7482..6440141 100644 (file)
@@ -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));
 
index 95f9fbe..17abab1 100644 (file)
@@ -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);
index f7131b3..546ea4b 100644 (file)
@@ -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);