| /* |
| * Copyright (C) 2016 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License |
| */ |
| package com.android.settings.deviceinfo.storage; |
| |
| import static com.android.settings.applications.manageapplications.ManageApplications.EXTRA_WORK_ID; |
| import static com.android.settings.applications.manageapplications.ManageApplications |
| .EXTRA_WORK_ONLY; |
| import static com.android.settings.utils.FileSizeFormatter.MEGABYTE_IN_BYTES; |
| |
| import static com.google.common.truth.Truth.assertThat; |
| |
| import static org.mockito.ArgumentMatchers.anyInt; |
| import static org.mockito.ArgumentMatchers.nullable; |
| import static org.mockito.ArgumentMatchers.eq; |
| import static org.mockito.Mockito.mock; |
| import static org.mockito.Mockito.spy; |
| import static org.mockito.Mockito.times; |
| import static org.mockito.Mockito.verify; |
| import static org.mockito.Mockito.when; |
| |
| import android.content.Context; |
| import android.content.Intent; |
| import android.graphics.drawable.Drawable; |
| import android.os.UserHandle; |
| import android.os.storage.VolumeInfo; |
| import android.util.SparseArray; |
| import android.view.LayoutInflater; |
| import android.widget.LinearLayout; |
| |
| import androidx.fragment.app.Fragment; |
| import androidx.fragment.app.FragmentActivity; |
| import androidx.fragment.app.FragmentManager; |
| import androidx.fragment.app.FragmentTransaction; |
| import androidx.preference.PreferenceScreen; |
| |
| import com.android.internal.logging.nano.MetricsProto.MetricsEvent; |
| import com.android.settings.R; |
| import com.android.settings.SettingsActivity; |
| import com.android.settings.SubSettings; |
| import com.android.settings.applications.manageapplications.ManageApplications; |
| import com.android.settings.deviceinfo.PrivateVolumeSettings; |
| import com.android.settings.deviceinfo.StorageItemPreference; |
| import com.android.settings.testutils.FakeFeatureFactory; |
| import com.android.settingslib.applications.StorageStatsSource; |
| import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; |
| import com.android.settingslib.deviceinfo.StorageVolumeProvider; |
| |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.mockito.ArgumentCaptor; |
| import org.mockito.Mock; |
| import org.mockito.MockitoAnnotations; |
| import org.robolectric.RobolectricTestRunner; |
| import org.robolectric.RuntimeEnvironment; |
| |
| @RunWith(RobolectricTestRunner.class) |
| public class StorageItemPreferenceControllerTest { |
| |
| private Context mContext; |
| private VolumeInfo mVolume; |
| @Mock |
| private Fragment mFragment; |
| @Mock |
| private StorageVolumeProvider mSvp; |
| @Mock |
| private FragmentActivity mActivity; |
| @Mock |
| private FragmentManager mFragmentManager; |
| @Mock |
| private FragmentTransaction mFragmentTransaction; |
| private StorageItemPreferenceController mController; |
| private StorageItemPreference mPreference; |
| private FakeFeatureFactory mFakeFeatureFactory; |
| private MetricsFeatureProvider mMetricsFeatureProvider; |
| |
| @Before |
| public void setUp() { |
| MockitoAnnotations.initMocks(this); |
| when(mFragment.getActivity()).thenReturn(mActivity); |
| when(mFragment.getFragmentManager()).thenReturn(mFragmentManager); |
| when(mFragmentManager.beginTransaction()).thenReturn(mFragmentTransaction); |
| mContext = spy(RuntimeEnvironment.application.getApplicationContext()); |
| mFakeFeatureFactory = FakeFeatureFactory.setupForTest(); |
| mMetricsFeatureProvider = mFakeFeatureFactory.getMetricsFeatureProvider(); |
| mVolume = spy(new VolumeInfo("id", 0, null, "id")); |
| // Note: null is passed as the Lifecycle because we are handling it outside of the normal |
| // Settings fragment lifecycle for test purposes. |
| mController = new StorageItemPreferenceController(mContext, mFragment, mVolume, mSvp); |
| mPreference = new StorageItemPreference(mContext); |
| |
| // Inflate the preference and the widget. |
| final LayoutInflater inflater = LayoutInflater.from(mContext); |
| inflater.inflate(mPreference.getLayoutResource(), new LinearLayout(mContext), false); |
| } |
| |
| @Test |
| public void testUpdateStateWithInitialState() { |
| assertThat(mPreference.getSummary().toString()) |
| .isEqualTo(mContext.getString(R.string.memory_calculating_size)); |
| } |
| |
| @Test |
| public void testClickPhotos() { |
| mPreference.setKey("pref_photos_videos"); |
| mController.handlePreferenceTreeClick(mPreference); |
| |
| final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); |
| verify(mActivity).startActivityForResultAsUser(argumentCaptor.capture(), anyInt(), |
| nullable(UserHandle.class)); |
| |
| final Intent intent = argumentCaptor.getValue(); |
| assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); |
| assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName()); |
| assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) |
| .isEqualTo(ManageApplications.class.getName()); |
| assertThat(intent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0)) |
| .isEqualTo(R.string.storage_photos_videos); |
| } |
| |
| @Test |
| public void testClickAudio() { |
| mPreference.setKey("pref_music_audio"); |
| mController.handlePreferenceTreeClick(mPreference); |
| |
| final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); |
| verify(mFragment.getActivity()).startActivityForResultAsUser(argumentCaptor.capture(), |
| anyInt(), nullable(UserHandle.class)); |
| final Intent intent = argumentCaptor.getValue(); |
| |
| assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); |
| assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName()); |
| assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) |
| .isEqualTo(ManageApplications.class.getName()); |
| assertThat(intent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS).getInt( |
| ManageApplications.EXTRA_STORAGE_TYPE, 0)) |
| .isEqualTo(ManageApplications.STORAGE_TYPE_MUSIC); |
| } |
| |
| @Test |
| public void handlePreferenceTreeClick_tappingAudioWhileUninitializedDoesntCrash() { |
| mController.setVolume(null); |
| |
| mPreference.setKey("pref_music_audio"); |
| mController.handlePreferenceTreeClick(mPreference); |
| } |
| |
| @Test |
| public void testClickApps() { |
| mPreference.setKey("pref_other_apps"); |
| mController.handlePreferenceTreeClick(mPreference); |
| |
| final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); |
| verify(mFragment.getActivity()).startActivityForResultAsUser(argumentCaptor.capture(), |
| anyInt(), nullable(UserHandle.class)); |
| |
| final Intent intent = argumentCaptor.getValue(); |
| assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); |
| assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName()); |
| assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) |
| .isEqualTo(ManageApplications.class.getName()); |
| assertThat(intent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0)) |
| .isEqualTo(R.string.apps_storage); |
| } |
| |
| @Test |
| public void testClickAppsForWork() { |
| mController = new StorageItemPreferenceController(mContext, mFragment, mVolume, mSvp, true); |
| mPreference.setKey("pref_other_apps"); |
| mController.handlePreferenceTreeClick(mPreference); |
| |
| final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); |
| verify(mFragment.getActivity()).startActivityForResultAsUser(argumentCaptor.capture(), |
| anyInt(), nullable(UserHandle.class)); |
| |
| Intent intent = argumentCaptor.getValue(); |
| assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); |
| assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName()); |
| assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) |
| .isEqualTo(ManageApplications.class.getName()); |
| assertThat(intent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0)) |
| .isEqualTo(R.string.apps_storage); |
| assertThat( |
| intent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS) |
| .getBoolean(EXTRA_WORK_ONLY)) |
| .isTrue(); |
| assertThat( |
| intent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS) |
| .getInt(EXTRA_WORK_ID)) |
| .isEqualTo(0); |
| } |
| |
| @Test |
| public void handlePreferenceTreeClick_tappingAppsWhileUninitializedDoesntCrash() { |
| mController.setVolume(null); |
| |
| mPreference.setKey("pref_other_apps"); |
| mController.handlePreferenceTreeClick(mPreference); |
| } |
| |
| @Test |
| public void testClickFiles() { |
| when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(mVolume); |
| when(mVolume.buildBrowseIntent()).thenReturn(new Intent()); |
| mPreference.setKey("pref_files"); |
| assertThat(mController.handlePreferenceTreeClick(mPreference)) |
| .isTrue(); |
| |
| final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); |
| verify(mFragment.getActivity()).startActivityForResultAsUser(argumentCaptor.capture(), |
| anyInt(), nullable(UserHandle.class)); |
| |
| Intent intent = argumentCaptor.getValue(); |
| Intent browseIntent = mVolume.buildBrowseIntent(); |
| assertThat(intent.getAction()).isEqualTo(browseIntent.getAction()); |
| assertThat(intent.getData()).isEqualTo(browseIntent.getData()); |
| verify(mMetricsFeatureProvider, times(1)) |
| .action(nullable(Context.class), eq(MetricsEvent.STORAGE_FILES)); |
| } |
| |
| @Test |
| public void testClickGames() { |
| mPreference.setKey("pref_games"); |
| mController.handlePreferenceTreeClick(mPreference); |
| |
| final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); |
| verify(mFragment.getActivity()).startActivityForResultAsUser(argumentCaptor.capture(), |
| anyInt(), nullable(UserHandle.class)); |
| |
| Intent intent = argumentCaptor.getValue(); |
| assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); |
| assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName()); |
| assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) |
| .isEqualTo(ManageApplications.class.getName()); |
| assertThat(intent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0)) |
| .isEqualTo(R.string.game_storage_settings); |
| } |
| |
| @Test |
| public void testClickMovies() { |
| mPreference.setKey("pref_movies"); |
| mController.handlePreferenceTreeClick(mPreference); |
| |
| final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); |
| verify(mFragment.getActivity()).startActivityForResultAsUser(argumentCaptor.capture(), |
| anyInt(), nullable(UserHandle.class)); |
| |
| Intent intent = argumentCaptor.getValue(); |
| assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); |
| assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName()); |
| assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) |
| .isEqualTo(ManageApplications.class.getName()); |
| assertThat(intent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0)) |
| .isEqualTo(R.string.storage_movies_tv); |
| } |
| |
| @Test |
| public void testClickSystem() { |
| mPreference.setKey("pref_system"); |
| assertThat(mController.handlePreferenceTreeClick(mPreference)).isTrue(); |
| |
| verify(mFragment.getFragmentManager().beginTransaction()) |
| .add(nullable(PrivateVolumeSettings.SystemInfoFragment.class), nullable(String.class)); |
| } |
| |
| @Test |
| public void testMeasurementCompletedUpdatesPreferences() { |
| final StorageItemPreference audio = new StorageItemPreference(mContext); |
| final StorageItemPreference image = new StorageItemPreference(mContext); |
| final StorageItemPreference games = new StorageItemPreference(mContext); |
| final StorageItemPreference movies = new StorageItemPreference(mContext); |
| final StorageItemPreference apps = new StorageItemPreference(mContext); |
| final StorageItemPreference system = new StorageItemPreference(mContext); |
| final StorageItemPreference files = new StorageItemPreference(mContext); |
| final PreferenceScreen screen = mock(PreferenceScreen.class); |
| when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY))) |
| .thenReturn(games); |
| when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY))) |
| .thenReturn(audio); |
| when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY))) |
| .thenReturn(image); |
| when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY))) |
| .thenReturn(files); |
| when(screen.findPreference(eq(StorageItemPreferenceController.MOVIES_KEY))) |
| .thenReturn(movies); |
| when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY))) |
| .thenReturn(system); |
| when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY))) |
| .thenReturn(apps); |
| mController.displayPreference(screen); |
| |
| mController.setUsedSize(MEGABYTE_IN_BYTES * 970); // There should 870MB attributed. |
| final StorageAsyncLoader.AppsStorageResult result = |
| new StorageAsyncLoader.AppsStorageResult(); |
| result.gamesSize = MEGABYTE_IN_BYTES * 80; |
| result.videoAppsSize = MEGABYTE_IN_BYTES * 160; |
| result.musicAppsSize = MEGABYTE_IN_BYTES * 40; |
| result.otherAppsSize = MEGABYTE_IN_BYTES * 90; |
| result.externalStats = |
| new StorageStatsSource.ExternalStorageStats( |
| MEGABYTE_IN_BYTES * 500, // total |
| MEGABYTE_IN_BYTES * 100, // audio |
| MEGABYTE_IN_BYTES * 150, // video |
| MEGABYTE_IN_BYTES * 200, 0); // image |
| |
| final SparseArray<StorageAsyncLoader.AppsStorageResult> results = new SparseArray<>(); |
| results.put(0, result); |
| mController.onLoadFinished(results, 0); |
| |
| assertThat(audio.getSummary().toString()).isEqualTo("0.14 GB"); |
| assertThat(image.getSummary().toString()).isEqualTo("0.35 GB"); |
| assertThat(games.getSummary().toString()).isEqualTo("0.08 GB"); |
| assertThat(movies.getSummary().toString()).isEqualTo("0.16 GB"); |
| assertThat(apps.getSummary().toString()).isEqualTo("0.09 GB"); |
| assertThat(files.getSummary().toString()).isEqualTo("0.05 GB"); |
| } |
| |
| @Test |
| public void settingUserIdAppliesNewIcons() { |
| final StorageItemPreference audio = spy(new StorageItemPreference(mContext)); |
| audio.setIcon(R.drawable.ic_media_stream); |
| final StorageItemPreference video = spy(new StorageItemPreference(mContext)); |
| video.setIcon(R.drawable.ic_local_movies); |
| final StorageItemPreference image = spy(new StorageItemPreference(mContext)); |
| image.setIcon(R.drawable.ic_photo_library); |
| final StorageItemPreference games = spy(new StorageItemPreference(mContext)); |
| games.setIcon(R.drawable.ic_videogame_vd_theme_24); |
| final StorageItemPreference apps = spy(new StorageItemPreference(mContext)); |
| apps.setIcon(R.drawable.ic_storage_apps); |
| final StorageItemPreference system = spy(new StorageItemPreference(mContext)); |
| system.setIcon(R.drawable.ic_system_update); |
| final StorageItemPreference files = spy(new StorageItemPreference(mContext)); |
| files.setIcon(R.drawable.ic_folder_vd_theme_24); |
| final PreferenceScreen screen = mock(PreferenceScreen.class); |
| when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY))) |
| .thenReturn(games); |
| when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY))) |
| .thenReturn(audio); |
| when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY))) |
| .thenReturn(image); |
| when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY))) |
| .thenReturn(files); |
| when(screen.findPreference(eq(StorageItemPreferenceController.MOVIES_KEY))) |
| .thenReturn(video); |
| when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY))) |
| .thenReturn(system); |
| when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY))) |
| .thenReturn(apps); |
| mController.displayPreference(screen); |
| |
| mController.setUserId(new UserHandle(10)); |
| |
| verify(audio, times(2)).setIcon(nullable(Drawable.class)); |
| verify(video, times(2)).setIcon(nullable(Drawable.class)); |
| verify(image, times(2)).setIcon(nullable(Drawable.class)); |
| verify(games, times(2)).setIcon(nullable(Drawable.class)); |
| verify(apps, times(2)).setIcon(nullable(Drawable.class)); |
| verify(system, times(2)).setIcon(nullable(Drawable.class)); |
| verify(files, times(2)).setIcon(nullable(Drawable.class)); |
| } |
| |
| @Test |
| public void displayPreference_dontHideFilePreferenceWhenEmulatedInternalStorageUsed() { |
| final StorageItemPreference audio = new StorageItemPreference(mContext); |
| final StorageItemPreference image = new StorageItemPreference(mContext); |
| final StorageItemPreference games = new StorageItemPreference(mContext); |
| final StorageItemPreference apps = new StorageItemPreference(mContext); |
| final StorageItemPreference system = new StorageItemPreference(mContext); |
| final StorageItemPreference files = new StorageItemPreference(mContext); |
| final PreferenceScreen screen = mock(PreferenceScreen.class); |
| when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY))) |
| .thenReturn(games); |
| when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY))) |
| .thenReturn(audio); |
| when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY))) |
| .thenReturn(image); |
| when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY))) |
| .thenReturn(files); |
| when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY))) |
| .thenReturn(system); |
| when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY))) |
| .thenReturn(apps); |
| |
| when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(mVolume); |
| when(mVolume.isMountedReadable()).thenReturn(true); |
| |
| mController.displayPreference(screen); |
| |
| verify(screen, times(0)).removePreference(files); |
| } |
| |
| @Test |
| public void displayPreference_hideFilePreferenceWhenEmulatedStorageUnreadable() { |
| final StorageItemPreference audio = new StorageItemPreference(mContext); |
| final StorageItemPreference image = new StorageItemPreference(mContext); |
| final StorageItemPreference games = new StorageItemPreference(mContext); |
| final StorageItemPreference apps = new StorageItemPreference(mContext); |
| final StorageItemPreference system = new StorageItemPreference(mContext); |
| final StorageItemPreference files = new StorageItemPreference(mContext); |
| final PreferenceScreen screen = mock(PreferenceScreen.class); |
| when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY))) |
| .thenReturn(games); |
| when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY))) |
| .thenReturn(audio); |
| when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY))) |
| .thenReturn(image); |
| when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY))) |
| .thenReturn(files); |
| when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY))) |
| .thenReturn(system); |
| when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY))) |
| .thenReturn(apps); |
| |
| when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(mVolume); |
| when(mVolume.isMountedReadable()).thenReturn(false); |
| |
| mController.displayPreference(screen); |
| |
| verify(screen).removePreference(files); |
| } |
| |
| @Test |
| public void displayPreference_hideFilePreferenceWhenNoEmulatedInternalStorage() { |
| final StorageItemPreference audio = new StorageItemPreference(mContext); |
| final StorageItemPreference image = new StorageItemPreference(mContext); |
| final StorageItemPreference games = new StorageItemPreference(mContext); |
| final StorageItemPreference apps = new StorageItemPreference(mContext); |
| final StorageItemPreference system = new StorageItemPreference(mContext); |
| final StorageItemPreference files = new StorageItemPreference(mContext); |
| final PreferenceScreen screen = mock(PreferenceScreen.class); |
| when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY))) |
| .thenReturn(games); |
| when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY))) |
| .thenReturn(audio); |
| when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY))) |
| .thenReturn(image); |
| when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY))) |
| .thenReturn(files); |
| when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY))) |
| .thenReturn(system); |
| when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY))) |
| .thenReturn(apps); |
| |
| when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(null); |
| |
| mController.displayPreference(screen); |
| |
| verify(screen).removePreference(files); |
| } |
| |
| @Test |
| public void displayPreference_updateFilePreferenceToHideAfterSettingVolume() { |
| final StorageItemPreference audio = new StorageItemPreference(mContext); |
| final StorageItemPreference image = new StorageItemPreference(mContext); |
| final StorageItemPreference games = new StorageItemPreference(mContext); |
| final StorageItemPreference apps = new StorageItemPreference(mContext); |
| final StorageItemPreference system = new StorageItemPreference(mContext); |
| final StorageItemPreference files = new StorageItemPreference(mContext); |
| final PreferenceScreen screen = mock(PreferenceScreen.class); |
| when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY))) |
| .thenReturn(games); |
| when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY))) |
| .thenReturn(audio); |
| when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY))) |
| .thenReturn(image); |
| when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY))) |
| .thenReturn(files); |
| when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY))) |
| .thenReturn(system); |
| when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY))) |
| .thenReturn(apps); |
| |
| when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(mVolume); |
| when(mVolume.isMountedReadable()).thenReturn(true); |
| |
| mController.displayPreference(screen); |
| when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(null); |
| mController.setVolume(mVolume); |
| |
| verify(screen).removePreference(files); |
| } |
| |
| |
| @Test |
| public void displayPreference_updateFilePreferenceToShowAfterSettingVolume() { |
| final StorageItemPreference audio = new StorageItemPreference(mContext); |
| final StorageItemPreference image = new StorageItemPreference(mContext); |
| final StorageItemPreference games = new StorageItemPreference(mContext); |
| final StorageItemPreference apps = new StorageItemPreference(mContext); |
| final StorageItemPreference system = new StorageItemPreference(mContext); |
| final StorageItemPreference files = new StorageItemPreference(mContext); |
| final PreferenceScreen screen = mock(PreferenceScreen.class); |
| when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY))) |
| .thenReturn(games); |
| when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY))) |
| .thenReturn(audio); |
| when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY))) |
| .thenReturn(image); |
| when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY))) |
| .thenReturn(files); |
| when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY))) |
| .thenReturn(system); |
| when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY))) |
| .thenReturn(apps); |
| |
| // This will hide it initially. |
| mController.displayPreference(screen); |
| |
| when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(mVolume); |
| when(mVolume.isMountedReadable()).thenReturn(true); |
| |
| // And we bring it back. |
| mController.setVolume(mVolume); |
| |
| verify(screen).addPreference(files); |
| } |
| } |