Show "Files" category for public storage in Storage Settings

Users can click this preference to see public storage files
in external file browsers.

Bug: 170918505
Test: make RunSettingsRoboTests ROBOTEST_FILTER=StorageItemPreferenceControllerTest
      manual
      Select private storage and public storage and observe UI
Change-Id: If3f0d59b2ebf941d70e81e60c4c2015b80e7cf33
This commit is contained in:
Arc Wang
2021-03-24 11:14:04 +08:00
parent 772065e0d7
commit c626380689
6 changed files with 157 additions and 47 deletions

View File

@@ -104,6 +104,8 @@ public class StorageItemPreferenceControllerTest {
}
private PreferenceScreen getPreferenceScreen() {
final StorageItemPreference publicStorage = spy(new StorageItemPreference(mContext));
publicStorage.setIcon(R.drawable.ic_folder_vd_theme_24);
final StorageItemPreference images = spy(new StorageItemPreference(mContext));
images.setIcon(R.drawable.ic_photo_library);
final StorageItemPreference videos = spy(new StorageItemPreference(mContext));
@@ -122,6 +124,8 @@ public class StorageItemPreferenceControllerTest {
trash.setIcon(R.drawable.ic_trash_can);
final PreferenceScreen screen = mock(PreferenceScreen.class);
when(screen.findPreference(eq(StorageItemPreferenceController.PUBLIC_STORAGE_KEY)))
.thenReturn(publicStorage);
when(screen.findPreference(eq(StorageItemPreferenceController.IMAGES_KEY)))
.thenReturn(images);
when(screen.findPreference(eq(StorageItemPreferenceController.VIDEOS_KEY)))
@@ -148,6 +152,24 @@ public class StorageItemPreferenceControllerTest {
.isEqualTo(mContext.getString(R.string.memory_calculating_size));
}
@Test
public void launchPublicStorageIntent_nonNullBrowseIntent_settingsIntent() {
final String fakeBrowseAction = "FAKE_BROWSE_ACTION";
final Intent fakeBrowseIntent = new Intent(fakeBrowseAction);
// mContext is not the activity, add FLAG_ACTIVITY_NEW_TASK to avoid AndroidRuntimeException
// during this test.
fakeBrowseIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
when(mVolume.buildBrowseIntent()).thenReturn(fakeBrowseIntent);
mPreference.setKey(StorageItemPreferenceController.PUBLIC_STORAGE_KEY);
mController.handlePreferenceTreeClick(mPreference);
final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class);
verify(mContext).startActivity(argumentCaptor.capture());
final Intent intent = argumentCaptor.getValue();
assertThat(intent.getAction()).isEqualTo(fakeBrowseAction);
}
@Test
public void launchImagesIntent_resolveActionViewNull_settingsIntent() {
mPreference.setKey(StorageItemPreferenceController.IMAGES_KEY);
@@ -191,6 +213,7 @@ public class StorageItemPreferenceControllerTest {
mController.setVolume(null);
assertThat(mController.mPublicStoragePreference.isVisible()).isFalse();
assertThat(mController.mImagesPreference.isVisible()).isFalse();
assertThat(mController.mVideosPreference.isVisible()).isFalse();
assertThat(mController.mAudiosPreference.isVisible()).isFalse();
@@ -347,6 +370,7 @@ public class StorageItemPreferenceControllerTest {
mController.setUserId(new UserHandle(10));
verify(mController.mPublicStoragePreference, times(2)).setIcon(nullable(Drawable.class));
verify(mController.mImagesPreference, times(2)).setIcon(nullable(Drawable.class));
verify(mController.mVideosPreference, times(2)).setIcon(nullable(Drawable.class));
verify(mController.mAudiosPreference, times(2)).setIcon(nullable(Drawable.class));
@@ -418,4 +442,26 @@ public class StorageItemPreferenceControllerTest {
assertThat(mController.mDocumentsAndOtherPreference.isVisible()).isTrue();
}
@Test
public void setVolume_publicStorage_showFilePreference() {
// This will hide it initially.
mController.displayPreference(mPreferenceScreen);
when(mVolume.getType()).thenReturn(VolumeInfo.TYPE_PUBLIC);
when(mVolume.getState()).thenReturn(VolumeInfo.STATE_MOUNTED);
when(mVolume.isMountedReadable()).thenReturn(true);
// And we bring it back.
mController.setVolume(mVolume);
assertThat(mController.mPublicStoragePreference.isVisible()).isTrue();
assertThat(mController.mImagesPreference.isVisible()).isFalse();
assertThat(mController.mVideosPreference.isVisible()).isFalse();
assertThat(mController.mAudiosPreference.isVisible()).isFalse();
assertThat(mController.mAppsPreference.isVisible()).isFalse();
assertThat(mController.mGamesPreference.isVisible()).isFalse();
assertThat(mController.mDocumentsAndOtherPreference.isVisible()).isFalse();
assertThat(mController.mSystemPreference.isVisible()).isFalse();
assertThat(mController.mTrashPreference.isVisible()).isFalse();
}
}