1ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi/* 2ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi * Copyright (C) 2016 The Android Open Source Project 3ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi * 4ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi * Licensed under the Apache License, Version 2.0 (the "License"); 5ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi * you may not use this file except in compliance with the License. 6ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi * You may obtain a copy of the License at 7ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi * 8ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi * http://www.apache.org/licenses/LICENSE-2.0 9ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi * 10ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi * Unless required by applicable law or agreed to in writing, software 11ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi * distributed under the License is distributed on an "AS IS" BASIS, 12ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi * See the License for the specific language governing permissions and 14ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi * limitations under the License 15ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi */ 16ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishipackage com.android.settings.deviceinfo.storage; 17ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi 18cf0e659a6c45023db5774d530d80721a7abb616bDaniel Nishi 1959982c6954b215f17e14e8d87efccdc25144a1ccDaniel Nishiimport static com.android.settings.applications.ManageApplications.EXTRA_WORK_ID; 2083ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishiimport static com.android.settings.applications.ManageApplications.EXTRA_WORK_ONLY; 2163a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishiimport static com.android.settings.utils.FileSizeFormatter.MEGABYTE_IN_BYTES; 22ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi 23046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lamimport static com.google.common.truth.Truth.assertThat; 24046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam 25046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lamimport static org.mockito.ArgumentMatchers.nullable; 26e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishiimport static org.mockito.Matchers.eq; 27884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishiimport static org.mockito.Mockito.mock; 28e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishiimport static org.mockito.Mockito.spy; 29e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishiimport static org.mockito.Mockito.times; 308cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishiimport static org.mockito.Mockito.verify; 318cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishiimport static org.mockito.Mockito.when; 328cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi 338cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishiimport android.app.Fragment; 34ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishiimport android.content.Context; 358cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishiimport android.content.Intent; 363414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishiimport android.graphics.drawable.Drawable; 378cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishiimport android.os.UserHandle; 388cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishiimport android.os.storage.VolumeInfo; 39884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishiimport android.support.v7.preference.PreferenceScreen; 4077fe8c1e9e0ca06ab723a471c97913ae127959b5Jeff Sharkeyimport android.util.SparseArray; 41ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishiimport android.view.LayoutInflater; 42884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishiimport android.view.View; 43ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishiimport android.widget.LinearLayout; 44ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi 45e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishiimport com.android.internal.logging.nano.MetricsProto.MetricsEvent; 468cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishiimport com.android.settings.R; 478cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishiimport com.android.settings.SettingsActivity; 489f1e911759dc6fedaac9fa65afb79f6a93022bf4Andrew Sappersteinimport com.android.settings.testutils.SettingsRobolectricTestRunner; 498cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishiimport com.android.settings.SubSettings; 50ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishiimport com.android.settings.TestConfig; 518cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishiimport com.android.settings.applications.ManageApplications; 52e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishiimport com.android.settings.core.instrumentation.MetricsFeatureProvider; 53fda5d5a6a8b7902cf05b124522f063863b42ca12Daniel Nishiimport com.android.settings.deviceinfo.PrivateVolumeSettings; 54cf0e659a6c45023db5774d530d80721a7abb616bDaniel Nishiimport com.android.settings.deviceinfo.StorageItemPreference; 55e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishiimport com.android.settings.testutils.FakeFeatureFactory; 5663a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishiimport com.android.settings.testutils.shadow.SettingsShadowResources; 57422e7c354dc57aea64dd5a455167f5f2a5cb5695Daniel Nishiimport com.android.settingslib.applications.StorageStatsSource; 588cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishiimport com.android.settingslib.deviceinfo.StorageVolumeProvider; 59ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi 6063a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishiimport org.junit.After; 61ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishiimport org.junit.Before; 62ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishiimport org.junit.Test; 63ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishiimport org.junit.runner.RunWith; 648cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishiimport org.mockito.Answers; 658cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishiimport org.mockito.ArgumentCaptor; 668cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishiimport org.mockito.Mock; 678cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishiimport org.mockito.MockitoAnnotations; 68ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishiimport org.robolectric.RuntimeEnvironment; 69ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishiimport org.robolectric.annotation.Config; 70ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi 71ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi@RunWith(SettingsRobolectricTestRunner.class) 72ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) 73ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishipublic class StorageItemPreferenceControllerTest { 74ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi private Context mContext; 758cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi private VolumeInfo mVolume; 768cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi @Mock(answer = Answers.RETURNS_DEEP_STUBS) 778cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi private Fragment mFragment; 788cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi @Mock 798cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi private StorageVolumeProvider mSvp; 80ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi private StorageItemPreferenceController mController; 81cf0e659a6c45023db5774d530d80721a7abb616bDaniel Nishi private StorageItemPreference mPreference; 82e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishi private FakeFeatureFactory mFakeFeatureFactory; 83e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishi private MetricsFeatureProvider mMetricsFeatureProvider; 84ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi 85ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi @Before 86ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi public void setUp() throws Exception { 878cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi MockitoAnnotations.initMocks(this); 88e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishi mContext = spy(RuntimeEnvironment.application.getApplicationContext()); 89e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishi FakeFeatureFactory.setupForTest(mContext); 90e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishi mFakeFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext); 91e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishi mMetricsFeatureProvider = mFakeFeatureFactory.getMetricsFeatureProvider(); 921f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi mVolume = spy(new VolumeInfo("id", 0, null, "id")); 93884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi // Note: null is passed as the Lifecycle because we are handling it outside of the normal 94884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi // Settings fragment lifecycle for test purposes. 957cec1bc53c1d43f8cfd5207ed47d7194c20a4c7dDaniel Nishi mController = new StorageItemPreferenceController(mContext, mFragment, mVolume, mSvp); 96cf0e659a6c45023db5774d530d80721a7abb616bDaniel Nishi mPreference = new StorageItemPreference(mContext); 97ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi 98ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi // Inflate the preference and the widget. 99ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi LayoutInflater inflater = LayoutInflater.from(mContext); 100884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi final View view = inflater.inflate( 101884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi mPreference.getLayoutResource(), new LinearLayout(mContext), false); 1028cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi } 103ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi 10463a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishi @After 10563a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishi public void tearDown() { 10663a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishi SettingsShadowResources.reset(); 10763a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishi } 10863a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishi 1098cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi @Test 1108cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi public void testUpdateStateWithInitialState() { 1118cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi assertThat(mPreference.getSummary().toString()).isEqualTo( 1128cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi mContext.getString(R.string.memory_calculating_size)); 113ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi } 114ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi 115ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi @Test 1168cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi public void testClickPhotos() { 1178cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi mPreference.setKey("pref_photos_videos"); 1188cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi mController.handlePreferenceTreeClick(mPreference); 1198cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi 1208cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); 1218cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi verify(mFragment.getActivity()).startActivityAsUser(argumentCaptor.capture(), 122046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(UserHandle.class)); 1238cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi 1248cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi Intent intent = argumentCaptor.getValue(); 1259be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); 1269be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName()); 1279be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) 1289be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi .isEqualTo(ManageApplications.class.getName()); 1299be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi assertThat(intent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0)) 1309be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi .isEqualTo(R.string.storage_photos_videos); 131ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi } 132ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi 133ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi @Test 1348cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi public void testClickAudio() { 1358cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi mPreference.setKey("pref_music_audio"); 1368cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi mController.handlePreferenceTreeClick(mPreference); 1378cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi 1388cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); 1398cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi verify(mFragment.getActivity()).startActivityAsUser(argumentCaptor.capture(), 140046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(UserHandle.class)); 1418cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi Intent intent = argumentCaptor.getValue(); 14231027dae93bc38377630e5589ab2169a021368adDaniel Nishi 14331027dae93bc38377630e5589ab2169a021368adDaniel Nishi assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); 14431027dae93bc38377630e5589ab2169a021368adDaniel Nishi assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName()); 14531027dae93bc38377630e5589ab2169a021368adDaniel Nishi assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)).isEqualTo( 14631027dae93bc38377630e5589ab2169a021368adDaniel Nishi ManageApplications.class.getName()); 14731027dae93bc38377630e5589ab2169a021368adDaniel Nishi assertThat(intent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS).getInt( 14831027dae93bc38377630e5589ab2169a021368adDaniel Nishi ManageApplications.EXTRA_STORAGE_TYPE, 0)).isEqualTo( 14931027dae93bc38377630e5589ab2169a021368adDaniel Nishi ManageApplications.STORAGE_TYPE_MUSIC); 150ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi } 151ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi 152ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi @Test 153838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi public void handlePreferenceTreeClick_tappingAudioWhileUninitializedDoesntCrash() { 154838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi mController.setVolume(null); 155838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi 156838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi mPreference.setKey("pref_music_audio"); 157838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi mController.handlePreferenceTreeClick(mPreference); 158838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi } 159838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi 160838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi @Test 1618cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi public void testClickApps() { 1628cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi mPreference.setKey("pref_other_apps"); 1638cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi mController.handlePreferenceTreeClick(mPreference); 1648cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi 1658cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); 1668cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi verify(mFragment.getActivity()).startActivityAsUser(argumentCaptor.capture(), 167046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(UserHandle.class)); 1688cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi 1698cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi Intent intent = argumentCaptor.getValue(); 1708cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); 1718cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName()); 1728cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)).isEqualTo( 1738cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi ManageApplications.class.getName()); 174c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi assertThat(intent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0)) 175c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi .isEqualTo(R.string.apps_storage); 1768cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi } 1778cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi 1788cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi @Test 17983ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi public void testClickAppsForWork() { 18083ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi mController = new StorageItemPreferenceController(mContext, mFragment, mVolume, mSvp, true); 18183ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi mPreference.setKey("pref_other_apps"); 18283ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi mController.handlePreferenceTreeClick(mPreference); 18383ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi 18483ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); 18583ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi verify(mFragment.getActivity()) 18683ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi .startActivityAsUser(argumentCaptor.capture(), nullable(UserHandle.class)); 18783ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi 18883ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi Intent intent = argumentCaptor.getValue(); 18983ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); 19083ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName()); 19183ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) 19283ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi .isEqualTo(ManageApplications.class.getName()); 19383ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi assertThat(intent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0)) 19483ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi .isEqualTo(R.string.apps_storage); 19583ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi assertThat( 19683ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi intent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS) 19783ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi .getBoolean(EXTRA_WORK_ONLY)) 19883ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi .isTrue(); 19959982c6954b215f17e14e8d87efccdc25144a1ccDaniel Nishi assertThat( 20059982c6954b215f17e14e8d87efccdc25144a1ccDaniel Nishi intent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS) 20159982c6954b215f17e14e8d87efccdc25144a1ccDaniel Nishi .getInt(EXTRA_WORK_ID)) 20259982c6954b215f17e14e8d87efccdc25144a1ccDaniel Nishi .isEqualTo(0); 20383ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi } 20483ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi 20583ceab82e4f6dd55e03a5832cf4b4ceca71b0722Daniel Nishi @Test 206838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi public void handlePreferenceTreeClick_tappingAppsWhileUninitializedDoesntCrash() { 207838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi mController.setVolume(null); 208838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi 209838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi mPreference.setKey("pref_other_apps"); 210838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi mController.handlePreferenceTreeClick(mPreference); 211838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi } 212838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi 213838175526386a52df85dc2bd502f3bfad2891f54Daniel Nishi @Test 2148cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi public void testClickFiles() { 215046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(mVolume); 2168cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi mPreference.setKey("pref_files"); 2178cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi mController.handlePreferenceTreeClick(mPreference); 2188cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi 2198cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); 2208cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi verify(mFragment.getActivity()).startActivityAsUser(argumentCaptor.capture(), 221046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(UserHandle.class)); 222ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi 2238cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi Intent intent = argumentCaptor.getValue(); 2248cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi Intent browseIntent = mVolume.buildBrowseIntent(); 2258cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi assertThat(intent.getAction()).isEqualTo(browseIntent.getAction()); 2268cc6f9f718cc634c7bace3324f1faa1cc76fd822Daniel Nishi assertThat(intent.getData()).isEqualTo(browseIntent.getData()); 227e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishi verify(mMetricsFeatureProvider, times(1)).action( 228046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(Context.class), eq(MetricsEvent.STORAGE_FILES)); 229ec89a3f57f3b73b6f119eb7b5546ba4e5f1ede20Daniel Nishi } 230884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi 231884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi @Test 232c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi public void testClickGames() { 233c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi mPreference.setKey("pref_games"); 234c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi mController.handlePreferenceTreeClick(mPreference); 235c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi 236c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); 237c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi verify(mFragment.getActivity()).startActivityAsUser(argumentCaptor.capture(), 238046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(UserHandle.class)); 239c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi 240c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi Intent intent = argumentCaptor.getValue(); 241c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); 242c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName()); 243c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)).isEqualTo( 244c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi ManageApplications.class.getName()); 245c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi assertThat(intent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0)) 246c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi .isEqualTo(R.string.game_storage_settings); 247c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi } 248c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi 249c208eff2f88a613db18da339caa47488ddafbb08Daniel Nishi @Test 250f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi public void testClickMovies() { 251f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi mPreference.setKey("pref_movies"); 252f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi mController.handlePreferenceTreeClick(mPreference); 253f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi 254f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); 255f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi verify(mFragment.getActivity()).startActivityAsUser(argumentCaptor.capture(), 256046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(UserHandle.class)); 257f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi 258f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi Intent intent = argumentCaptor.getValue(); 259f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); 260f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName()); 261f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)).isEqualTo( 262f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi ManageApplications.class.getName()); 263f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi assertThat(intent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0)) 264f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi .isEqualTo(R.string.storage_movies_tv); 265f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi } 266f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi 267f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi @Test 268fda5d5a6a8b7902cf05b124522f063863b42ca12Daniel Nishi public void testClickSystem() { 269fda5d5a6a8b7902cf05b124522f063863b42ca12Daniel Nishi mPreference.setKey("pref_system"); 270fda5d5a6a8b7902cf05b124522f063863b42ca12Daniel Nishi assertThat(mController.handlePreferenceTreeClick(mPreference)).isTrue(); 271fda5d5a6a8b7902cf05b124522f063863b42ca12Daniel Nishi 272fda5d5a6a8b7902cf05b124522f063863b42ca12Daniel Nishi verify(mFragment.getFragmentManager().beginTransaction()).add( 273046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam nullable(PrivateVolumeSettings.SystemInfoFragment.class), nullable(String.class)); 274fda5d5a6a8b7902cf05b124522f063863b42ca12Daniel Nishi } 275fda5d5a6a8b7902cf05b124522f063863b42ca12Daniel Nishi 276fda5d5a6a8b7902cf05b124522f063863b42ca12Daniel Nishi @Test 277884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi public void testMeasurementCompletedUpdatesPreferences() { 278cf0e659a6c45023db5774d530d80721a7abb616bDaniel Nishi StorageItemPreference audio = new StorageItemPreference(mContext); 279cf0e659a6c45023db5774d530d80721a7abb616bDaniel Nishi StorageItemPreference image = new StorageItemPreference(mContext); 280cf0e659a6c45023db5774d530d80721a7abb616bDaniel Nishi StorageItemPreference games = new StorageItemPreference(mContext); 281f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi StorageItemPreference movies = new StorageItemPreference(mContext); 282cf0e659a6c45023db5774d530d80721a7abb616bDaniel Nishi StorageItemPreference apps = new StorageItemPreference(mContext); 283cf0e659a6c45023db5774d530d80721a7abb616bDaniel Nishi StorageItemPreference system = new StorageItemPreference(mContext); 284cf0e659a6c45023db5774d530d80721a7abb616bDaniel Nishi StorageItemPreference files = new StorageItemPreference(mContext); 285884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi PreferenceScreen screen = mock(PreferenceScreen.class); 286884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi when(screen.findPreference( 287e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishi eq(StorageItemPreferenceController.AUDIO_KEY))).thenReturn(audio); 288884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi when(screen.findPreference( 289e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishi eq(StorageItemPreferenceController.PHOTO_KEY))).thenReturn(image); 290884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi when(screen.findPreference( 291e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishi eq(StorageItemPreferenceController.GAME_KEY))).thenReturn(games); 292884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi when(screen.findPreference( 293f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi eq(StorageItemPreferenceController.MOVIES_KEY))).thenReturn(movies); 294f588f7678db50cb17bf9c1d1976b4a5cc81570a8Daniel Nishi when(screen.findPreference( 295e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishi eq(StorageItemPreferenceController.OTHER_APPS_KEY))).thenReturn(apps); 296884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi when(screen.findPreference( 297e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishi eq(StorageItemPreferenceController.SYSTEM_KEY))).thenReturn(system); 298884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi when(screen.findPreference( 299e0eb1a2e2708167f3cc962aafce06d13067a5e49Daniel Nishi eq(StorageItemPreferenceController.FILES_KEY))).thenReturn(files); 300884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi mController.displayPreference(screen); 301884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi 30263a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishi mController.setUsedSize(MEGABYTE_IN_BYTES * 970); // There should 870MB attributed. 3037cec1bc53c1d43f8cfd5207ed47d7194c20a4c7dDaniel Nishi StorageAsyncLoader.AppsStorageResult result = new StorageAsyncLoader.AppsStorageResult(); 30463a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishi result.gamesSize = MEGABYTE_IN_BYTES * 80; 30563a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishi result.videoAppsSize = MEGABYTE_IN_BYTES * 160; 30663a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishi result.musicAppsSize = MEGABYTE_IN_BYTES * 40; 30763a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishi result.otherAppsSize = MEGABYTE_IN_BYTES * 90; 30863a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishi result.externalStats = 30963a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishi new StorageStatsSource.ExternalStorageStats( 31063a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishi MEGABYTE_IN_BYTES * 500, // total 31163a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishi MEGABYTE_IN_BYTES * 100, // audio 31263a11c56de4f51eaabeafb54501fe3f6f564a61cDaniel Nishi MEGABYTE_IN_BYTES * 150, // video 31377fe8c1e9e0ca06ab723a471c97913ae127959b5Jeff Sharkey MEGABYTE_IN_BYTES * 200, 0); // image 3147cec1bc53c1d43f8cfd5207ed47d7194c20a4c7dDaniel Nishi 31577fe8c1e9e0ca06ab723a471c97913ae127959b5Jeff Sharkey SparseArray<StorageAsyncLoader.AppsStorageResult> results = new SparseArray<>(); 31677fe8c1e9e0ca06ab723a471c97913ae127959b5Jeff Sharkey results.put(0, result); 31777fe8c1e9e0ca06ab723a471c97913ae127959b5Jeff Sharkey mController.onLoadFinished(results, 0); 318884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi 319ded99003c45545d739a013caf7ca0c6bf7896785Roozbeh Pournader assertThat(audio.getSummary().toString()).isEqualTo("0.14 GB"); 320ded99003c45545d739a013caf7ca0c6bf7896785Roozbeh Pournader assertThat(image.getSummary().toString()).isEqualTo("0.35 GB"); 321ded99003c45545d739a013caf7ca0c6bf7896785Roozbeh Pournader assertThat(games.getSummary().toString()).isEqualTo("0.08 GB"); 322ded99003c45545d739a013caf7ca0c6bf7896785Roozbeh Pournader assertThat(movies.getSummary().toString()).isEqualTo("0.16 GB"); 323ded99003c45545d739a013caf7ca0c6bf7896785Roozbeh Pournader assertThat(apps.getSummary().toString()).isEqualTo("0.09 GB"); 324ded99003c45545d739a013caf7ca0c6bf7896785Roozbeh Pournader assertThat(files.getSummary().toString()).isEqualTo("0.05 GB"); 325884809199fe5dd5cec18292e86ef25f922921d22Daniel Nishi } 3263414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi 3273414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi @Test 3283414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi public void settingUserIdAppliesNewIcons() { 3293414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi StorageItemPreference audio = spy(new StorageItemPreference(mContext)); 3302872e2c6cc62229333b960068c72ad5a5d29cbd4Daniel Nishi audio.setIcon(R.drawable.ic_media_stream); 33124077d899fc4d0067759d0cd49ae62e3be01f949Daniel Nishi StorageItemPreference video = spy(new StorageItemPreference(mContext)); 3322872e2c6cc62229333b960068c72ad5a5d29cbd4Daniel Nishi video.setIcon(R.drawable.ic_local_movies); 3333414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi StorageItemPreference image = spy(new StorageItemPreference(mContext)); 3342872e2c6cc62229333b960068c72ad5a5d29cbd4Daniel Nishi image.setIcon(R.drawable.ic_photo_library); 3353414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi StorageItemPreference games = spy(new StorageItemPreference(mContext)); 3362872e2c6cc62229333b960068c72ad5a5d29cbd4Daniel Nishi games.setIcon(R.drawable.ic_videogame_vd_theme_24); 3373414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi StorageItemPreference apps = spy(new StorageItemPreference(mContext)); 3382872e2c6cc62229333b960068c72ad5a5d29cbd4Daniel Nishi apps.setIcon(R.drawable.ic_storage_apps); 3393414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi StorageItemPreference system = spy(new StorageItemPreference(mContext)); 3402872e2c6cc62229333b960068c72ad5a5d29cbd4Daniel Nishi system.setIcon(R.drawable.ic_system_update_vd_theme_24); 3413414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi StorageItemPreference files = spy(new StorageItemPreference(mContext)); 3422872e2c6cc62229333b960068c72ad5a5d29cbd4Daniel Nishi files.setIcon(R.drawable.ic_folder_vd_theme_24); 3433414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi PreferenceScreen screen = mock(PreferenceScreen.class); 3443414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi when(screen.findPreference( 3453414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi eq(StorageItemPreferenceController.AUDIO_KEY))).thenReturn(audio); 3463414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi when(screen.findPreference( 34724077d899fc4d0067759d0cd49ae62e3be01f949Daniel Nishi eq(StorageItemPreferenceController.MOVIES_KEY))).thenReturn(video); 34824077d899fc4d0067759d0cd49ae62e3be01f949Daniel Nishi when(screen.findPreference( 3493414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi eq(StorageItemPreferenceController.PHOTO_KEY))).thenReturn(image); 3503414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi when(screen.findPreference( 3513414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi eq(StorageItemPreferenceController.GAME_KEY))).thenReturn(games); 3523414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi when(screen.findPreference( 3533414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi eq(StorageItemPreferenceController.OTHER_APPS_KEY))).thenReturn(apps); 3543414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi when(screen.findPreference( 3553414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi eq(StorageItemPreferenceController.SYSTEM_KEY))).thenReturn(system); 3563414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi when(screen.findPreference( 3573414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi eq(StorageItemPreferenceController.FILES_KEY))).thenReturn(files); 3583414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi mController.displayPreference(screen); 3593414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi 3603414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi mController.setUserId(new UserHandle(10)); 3613414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi 362046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam verify(audio, times(2)).setIcon(nullable(Drawable.class)); 363046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam verify(video, times(2)).setIcon(nullable(Drawable.class)); 364046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam verify(image, times(2)).setIcon(nullable(Drawable.class)); 365046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam verify(games, times(2)).setIcon(nullable(Drawable.class)); 366046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam verify(apps, times(2)).setIcon(nullable(Drawable.class)); 367046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam verify(system, times(2)).setIcon(nullable(Drawable.class)); 368046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam verify(files, times(2)).setIcon(nullable(Drawable.class)); 3693414a6904b3c411e3f8f1799a377ef7b582f0e5bDaniel Nishi } 3701f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi 3711f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi @Test 3721f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi public void displayPreference_dontHideFilePreferenceWhenEmulatedInternalStorageUsed() { 3731f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference audio = new StorageItemPreference(mContext); 3741f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference image = new StorageItemPreference(mContext); 3751f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference games = new StorageItemPreference(mContext); 3761f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference apps = new StorageItemPreference(mContext); 3771f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference system = new StorageItemPreference(mContext); 3781f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference files = new StorageItemPreference(mContext); 3791f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi PreferenceScreen screen = mock(PreferenceScreen.class); 3801f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY))) 3811f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi .thenReturn(audio); 3821f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY))) 3831f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi .thenReturn(image); 3841f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY))).thenReturn(games); 3851f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY))) 3861f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi .thenReturn(apps); 3871f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY))) 3881f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi .thenReturn(system); 3891f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY))) 3901f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi .thenReturn(files); 3911f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi 392046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(mVolume); 3931f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(mVolume.isMountedReadable()).thenReturn(true); 3941f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi 3951f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi mController.displayPreference(screen); 3961f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi 3971f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi verify(screen, times(0)).removePreference(files); 3981f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi } 3991f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi 4001f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi @Test 4011f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi public void displayPreference_hideFilePreferenceWhenEmulatedStorageUnreadable() { 4021f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference audio = new StorageItemPreference(mContext); 4031f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference image = new StorageItemPreference(mContext); 4041f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference games = new StorageItemPreference(mContext); 4051f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference apps = new StorageItemPreference(mContext); 4061f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference system = new StorageItemPreference(mContext); 4071f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference files = new StorageItemPreference(mContext); 4081f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi PreferenceScreen screen = mock(PreferenceScreen.class); 4091f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY))) 4101f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi .thenReturn(audio); 4111f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY))) 4121f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi .thenReturn(image); 4131f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY))).thenReturn(games); 4141f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY))) 4151f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi .thenReturn(apps); 4161f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY))) 4171f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi .thenReturn(system); 4181f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY))) 4191f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi .thenReturn(files); 4201f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi 421046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(mVolume); 4221f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(mVolume.isMountedReadable()).thenReturn(false); 4231f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi 4241f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi mController.displayPreference(screen); 4251f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi 4261f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi verify(screen).removePreference(files); 4271f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi } 4281f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi 4291f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi @Test 4301f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi public void displayPreference_hideFilePreferenceWhenNoEmulatedInternalStorage() { 4311f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference audio = new StorageItemPreference(mContext); 4321f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference image = new StorageItemPreference(mContext); 4331f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference games = new StorageItemPreference(mContext); 4341f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference apps = new StorageItemPreference(mContext); 4351f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference system = new StorageItemPreference(mContext); 4361f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi StorageItemPreference files = new StorageItemPreference(mContext); 4371f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi PreferenceScreen screen = mock(PreferenceScreen.class); 4381f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY))) 4391f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi .thenReturn(audio); 4401f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY))) 4411f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi .thenReturn(image); 4421f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY))).thenReturn(games); 4431f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY))) 4441f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi .thenReturn(apps); 4451f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY))) 4461f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi .thenReturn(system); 4471f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY))) 4481f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi .thenReturn(files); 4491f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi 450046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(null); 4511f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi 4521f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi mController.displayPreference(screen); 4531f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi 4541f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi verify(screen).removePreference(files); 4551f079fbae4785fba9ee673f3e81e6e92852cb7b5Daniel Nishi } 456f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi 457f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi @Test 458f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi public void displayPreference_updateFilePreferenceToHideAfterSettingVolume() { 459f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi StorageItemPreference audio = new StorageItemPreference(mContext); 460f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi StorageItemPreference image = new StorageItemPreference(mContext); 461f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi StorageItemPreference games = new StorageItemPreference(mContext); 462f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi StorageItemPreference apps = new StorageItemPreference(mContext); 463f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi StorageItemPreference system = new StorageItemPreference(mContext); 464f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi StorageItemPreference files = new StorageItemPreference(mContext); 465f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi PreferenceScreen screen = mock(PreferenceScreen.class); 466f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY))) 467f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi .thenReturn(audio); 468f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY))) 469f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi .thenReturn(image); 470f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY))).thenReturn(games); 471f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY))) 472f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi .thenReturn(apps); 473f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY))) 474f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi .thenReturn(system); 475f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY))) 476f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi .thenReturn(files); 477f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi 478046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(mVolume); 479f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi when(mVolume.isMountedReadable()).thenReturn(true); 480f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi 481f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi mController.displayPreference(screen); 482046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(null); 483f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi mController.setVolume(mVolume); 484f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi 485f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi verify(screen).removePreference(files); 486f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi } 487f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi 488f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi 489f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi @Test 490f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi public void displayPreference_updateFilePreferenceToShowAfterSettingVolume() { 491f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi StorageItemPreference audio = new StorageItemPreference(mContext); 492f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi StorageItemPreference image = new StorageItemPreference(mContext); 493f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi StorageItemPreference games = new StorageItemPreference(mContext); 494f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi StorageItemPreference apps = new StorageItemPreference(mContext); 495f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi StorageItemPreference system = new StorageItemPreference(mContext); 496f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi StorageItemPreference files = new StorageItemPreference(mContext); 497f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi PreferenceScreen screen = mock(PreferenceScreen.class); 498f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY))) 499f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi .thenReturn(audio); 500f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY))) 501f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi .thenReturn(image); 502f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY))).thenReturn(games); 503f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY))) 504f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi .thenReturn(apps); 505f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY))) 506f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi .thenReturn(system); 507f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY))) 508f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi .thenReturn(files); 509f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi 510f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi // This will hide it initially. 511f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi mController.displayPreference(screen); 512f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi 513046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(mVolume); 514f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi when(mVolume.isMountedReadable()).thenReturn(true); 515f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi 516f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi // And we bring it back. 517f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi mController.setVolume(mVolume); 518f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi 519f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi verify(screen).addPreference(files); 520f7fa542eb69b598ac014bb9b54b9e5b105c51e59Daniel Nishi } 52177fe8c1e9e0ca06ab723a471c97913ae127959b5Jeff Sharkey} 522