Merge "Only show storage category stats preferences for private volumes" into sc-dev
diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
index 7af4f0c..b8c4e28 100644
--- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
@@ -248,13 +248,15 @@
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 dba72ba..e007090 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
@@ -192,7 +192,27 @@
*/
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 @@
mSystemPreference = screen.findPreference(SYSTEM_KEY);
mFilePreference = screen.findPreference(FILES_KEY);
- setFilesPreferenceVisibility();
+ updateCategoryPreferencesVisibility();
}
public void onLoadFinished(SparseArray<StorageAsyncLoader.AppsStorageResult> result,
@@ -296,17 +316,6 @@
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 64510c6..d95befa 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.StorageVolumeProvider;
import com.android.settingslib.utils.AsyncLoaderCompat;
-import java.io.File;
import java.io.IOException;
public class VolumeSizesLoader extends AsyncLoaderCompat<PrivateStorageInfo> {
@@ -50,11 +49,6 @@
@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 @@
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 77fd963..79c5db8 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 @@
@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 @@
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);
- }
}