diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java index 7af4f0cfd02..b8c4e286777 100644 --- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java +++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java @@ -248,13 +248,15 @@ public class StorageDashboardFragment extends DashboardFragment mPreferenceController.setVolume(mSelectedStorageEntry.getVolumeInfo()); - if (mSelectedStorageEntry.isMounted()) { + if (mSelectedStorageEntry.isPrivate() && mSelectedStorageEntry.isMounted()) { + // Stats data is only available on private volumes. getLoaderManager().restartLoader(STORAGE_JOB_ID, Bundle.EMPTY, this); getLoaderManager() .restartLoader(VOLUME_SIZE_JOB_ID, Bundle.EMPTY, new VolumeSizeCallbacks()); getLoaderManager().restartLoader(ICON_JOB_ID, Bundle.EMPTY, new IconLoaderCallbacks()); } else { - mPreferenceController.clearStorageSizeDisplay(); + // Set null volume to hide category stats. + mPreferenceController.setVolume(null); } } diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java index dba72ba5ac6..e007090f3eb 100644 --- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java +++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java @@ -192,7 +192,27 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle */ public void setVolume(VolumeInfo volume) { mVolume = volume; - setFilesPreferenceVisibility(); + updateCategoryPreferencesVisibility(); + } + + private void updateCategoryPreferencesVisibility() { + // Stats data is only available on private volumes. + final boolean isValidVolume = mVolume != null + && mVolume.getType() == VolumeInfo.TYPE_PRIVATE + && (mVolume.getState() == VolumeInfo.STATE_MOUNTED + || mVolume.getState() == VolumeInfo.STATE_MOUNTED_READ_ONLY); + + mPhotoPreference.setVisible(isValidVolume); + mAudioPreference.setVisible(isValidVolume); + mGamePreference.setVisible(isValidVolume); + mMoviesPreference.setVisible(isValidVolume); + mAppPreference.setVisible(isValidVolume); + mFilePreference.setVisible(isValidVolume); + mSystemPreference.setVisible(isValidVolume); + + if (isValidVolume) { + setFilesPreferenceVisibility(); + } } private void setFilesPreferenceVisibility() { @@ -251,7 +271,7 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle mSystemPreference = screen.findPreference(SYSTEM_KEY); mFilePreference = screen.findPreference(FILES_KEY); - setFilesPreferenceVisibility(); + updateCategoryPreferencesVisibility(); } public void onLoadFinished(SparseArray result, @@ -296,17 +316,6 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle mTotalSize = totalSizeBytes; } - /** Set storage size to 0 for each preference. */ - public void clearStorageSizeDisplay() { - mPhotoPreference.setStorageSize(0L, 0L); - mAudioPreference.setStorageSize(0L, 0L); - mGamePreference.setStorageSize(0L, 0L); - mMoviesPreference.setStorageSize(0L, 0L); - mAppPreference.setStorageSize(0L, 0L); - mFilePreference.setStorageSize(0L, 0L); - mSystemPreference.setStorageSize(0L, 0L); - } - /** * Returns a list of keys used by this preference controller. */ diff --git a/src/com/android/settings/deviceinfo/storage/VolumeSizesLoader.java b/src/com/android/settings/deviceinfo/storage/VolumeSizesLoader.java index 64510c6f602..d95befaa3ae 100644 --- a/src/com/android/settings/deviceinfo/storage/VolumeSizesLoader.java +++ b/src/com/android/settings/deviceinfo/storage/VolumeSizesLoader.java @@ -26,7 +26,6 @@ import com.android.settingslib.deviceinfo.PrivateStorageInfo; import com.android.settingslib.deviceinfo.StorageVolumeProvider; import com.android.settingslib.utils.AsyncLoaderCompat; -import java.io.File; import java.io.IOException; public class VolumeSizesLoader extends AsyncLoaderCompat { @@ -50,11 +49,6 @@ public class VolumeSizesLoader extends AsyncLoaderCompat { @Override public PrivateStorageInfo loadInBackground() { - if (mVolume == null || (mVolume.getState() != VolumeInfo.STATE_MOUNTED - && mVolume.getState() != VolumeInfo.STATE_MOUNTED_READ_ONLY)) { - return new PrivateStorageInfo(0L /* freeBytes */, 0L /* totalBytes */); - } - PrivateStorageInfo volumeSizes; try { volumeSizes = getVolumeSize(mVolumeProvider, mStats, mVolume); @@ -68,14 +62,8 @@ public class VolumeSizesLoader extends AsyncLoaderCompat { static PrivateStorageInfo getVolumeSize( StorageVolumeProvider storageVolumeProvider, StorageStatsManager stats, VolumeInfo info) throws IOException { - if (info.getType() == VolumeInfo.TYPE_PRIVATE) { - return new PrivateStorageInfo(storageVolumeProvider.getFreeBytes(stats, info), - storageVolumeProvider.getTotalBytes(stats, info)); - } - // TODO(b/174964885): It's confusing to use PrivateStorageInfo for a public storage, - // replace it with a new naming or a different object. - final File rootFile = info.getPath(); - return rootFile == null ? new PrivateStorageInfo(0L /* freeBytes */, 0L /* totalBytes */) - : new PrivateStorageInfo(rootFile.getFreeSpace(), rootFile.getTotalSpace()); + long privateTotalBytes = storageVolumeProvider.getTotalBytes(stats, info); + long privateFreeBytes = storageVolumeProvider.getFreeBytes(stats, info); + return new PrivateStorageInfo(privateFreeBytes, privateTotalBytes); } } diff --git a/tests/unit/src/com/android/settings/deviceinfo/storage/VolumeSizesLoaderTest.java b/tests/unit/src/com/android/settings/deviceinfo/storage/VolumeSizesLoaderTest.java index 77fd9636150..79c5db8d831 100644 --- a/tests/unit/src/com/android/settings/deviceinfo/storage/VolumeSizesLoaderTest.java +++ b/tests/unit/src/com/android/settings/deviceinfo/storage/VolumeSizesLoaderTest.java @@ -34,10 +34,8 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public class VolumeSizesLoaderTest { @Test - public void getVolumeSize_privateMountedVolume_getsValidSizes() throws Exception { + public void getVolumeSize_getsValidSizes() throws Exception { VolumeInfo info = mock(VolumeInfo.class); - when(info.getType()).thenReturn(VolumeInfo.TYPE_PRIVATE); - when(info.getState()).thenReturn(VolumeInfo.STATE_MOUNTED); StorageVolumeProvider storageVolumeProvider = mock(StorageVolumeProvider.class); when(storageVolumeProvider.getTotalBytes(any(), any())).thenReturn(10000L); when(storageVolumeProvider.getFreeBytes(any(), any())).thenReturn(1000L); @@ -48,19 +46,4 @@ public class VolumeSizesLoaderTest { assertThat(storageInfo.freeBytes).isEqualTo(1000L); assertThat(storageInfo.totalBytes).isEqualTo(10000L); } - - @Test - public void getVolumeSize_unmountedVolume_getsValidSizes() throws Exception { - VolumeInfo info = mock(VolumeInfo.class); - when(info.getState()).thenReturn(VolumeInfo.STATE_UNMOUNTED); - StorageVolumeProvider storageVolumeProvider = mock(StorageVolumeProvider.class); - when(storageVolumeProvider.getTotalBytes(any(), any())).thenReturn(10000L); - when(storageVolumeProvider.getFreeBytes(any(), any())).thenReturn(1000L); - - PrivateStorageInfo storageInfo = - VolumeSizesLoader.getVolumeSize(storageVolumeProvider, null, info); - - assertThat(storageInfo.freeBytes).isEqualTo(0L); - assertThat(storageInfo.totalBytes).isEqualTo(0L); - } }