1d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes/* 21f37d2cc7a4e9f9109c29795b746270ca865a23aFan Zhang * Copyright (C) 2018 The Android Open Source Project 3d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes * 4d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes * Licensed under the Apache License, Version 2.0 (the "License"); 5d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes * you may not use this file except in compliance with the License. 6d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes * You may obtain a copy of the License at 7d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes * 8d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 9d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes * 10d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes * Unless required by applicable law or agreed to in writing, software 11d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 12d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes * See the License for the specific language governing permissions and 14d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes * limitations under the License. 15d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes */ 16d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes 171f37d2cc7a4e9f9109c29795b746270ca865a23aFan Zhangpackage com.android.settings.deviceinfo; 18d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes 193b5f3885cd906865e1896f29094e4ac554fb4d64Fan Zhangimport static com.android.settings.SettingsActivity.EXTRA_FRAGMENT_ARG_KEY; 201f37d2cc7a4e9f9109c29795b746270ca865a23aFan Zhangimport static com.android.settings.deviceinfo.DeviceInfoSettings.NON_SIM_PREFERENCES_COUNT; 211f37d2cc7a4e9f9109c29795b746270ca865a23aFan Zhangimport static com.android.settings.deviceinfo.DeviceInfoSettings.SIM_PREFERENCES_COUNT; 22d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhangimport static com.google.common.truth.Truth.assertThat; 23848e904eede46df686a069755642c002fad1cfc9jeffreyhuangimport static org.mockito.ArgumentMatchers.any; 24848e904eede46df686a069755642c002fad1cfc9jeffreyhuangimport static org.mockito.Mockito.doNothing; 25d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhangimport static org.mockito.Mockito.doReturn; 26d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhangimport static org.mockito.Mockito.spy; 27d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhangimport static org.mockito.Mockito.verify; 28d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang 29848e904eede46df686a069755642c002fad1cfc9jeffreyhuangimport android.app.Activity; 30e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Lingimport android.content.Context; 31d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhangimport android.os.Build; 323b5f3885cd906865e1896f29094e4ac554fb4d64Fan Zhangimport android.os.Bundle; 33e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Lingimport android.support.v7.preference.PreferenceScreen; 34848e904eede46df686a069755642c002fad1cfc9jeffreyhuangimport android.telephony.TelephonyManager; 35e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling 361f37d2cc7a4e9f9109c29795b746270ca865a23aFan Zhangimport com.android.settings.R; 37d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhangimport com.android.settings.dashboard.SummaryLoader; 38795f78bc0a9091e608fda7d6854cdc8a887313a8Fan Zhangimport com.android.settings.testutils.FakeFeatureFactory; 399f1e911759dc6fedaac9fa65afb79f6a93022bf4Andrew Sappersteinimport com.android.settings.testutils.SettingsRobolectricTestRunner; 402e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritzeimport com.android.settings.testutils.XmlTestUtils; 41848e904eede46df686a069755642c002fad1cfc9jeffreyhuangimport com.android.settings.testutils.shadow.SettingsShadowResources; 42d9af0b839daab5db22d2b3995e7cd596463407f5Tony Mantlerimport com.android.settings.testutils.shadow.ShadowConnectivityManager; 43b025f06a50e22c29ba643c0bd6a6a0a65bb97a8ajeffreyhuangimport com.android.settings.testutils.shadow.ShadowUserManager; 442e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritzeimport com.android.settings.testutils.shadow.ShadowUtils; 45d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhangimport com.android.settingslib.DeviceInfoUtils; 46d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang 47e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Lingimport org.junit.Before; 48a393a4f614361e5b32b1f73a2681fc3fb0ad10c3Nick Desaulniersimport org.junit.Test; 49c62e2f033d945b8bc576f87bc5aaaba37e2afc87Fan Zhangimport org.junit.runner.RunWith; 50e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Lingimport org.mockito.Mock; 51e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Lingimport org.mockito.MockitoAnnotations; 522e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritzeimport org.robolectric.RuntimeEnvironment; 53a393a4f614361e5b32b1f73a2681fc3fb0ad10c3Nick Desaulniersimport org.robolectric.annotation.Config; 541f37d2cc7a4e9f9109c29795b746270ca865a23aFan Zhangimport org.robolectric.shadows.ShadowApplication; 55d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes 562e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritzeimport java.util.List; 572e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze 58a393a4f614361e5b32b1f73a2681fc3fb0ad10c3Nick Desaulniers@RunWith(SettingsRobolectricTestRunner.class) 5922a39c2b93bc66db71238274a7683d329232d124James Lemieux@Config(shadows = {ShadowUtils.class, ShadowConnectivityManager.class, ShadowUserManager.class}) 60bfb006aa323ea66f81d8f00f6b0081668f6b4fc9Fan Zhangpublic class DeviceInfoSettingsTest { 61d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes 62e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling @Mock 63848e904eede46df686a069755642c002fad1cfc9jeffreyhuang private Activity mActivity; 64848e904eede46df686a069755642c002fad1cfc9jeffreyhuang @Mock 65e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling private PreferenceScreen mScreen; 66e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling @Mock 67d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang private SummaryLoader mSummaryLoader; 68848e904eede46df686a069755642c002fad1cfc9jeffreyhuang @Mock 69848e904eede46df686a069755642c002fad1cfc9jeffreyhuang private TelephonyManager mTelephonyManager; 70e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling 71848e904eede46df686a069755642c002fad1cfc9jeffreyhuang private Context mContext; 72e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling private DeviceInfoSettings mSettings; 73e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling 74e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling @Before 75e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling public void setUp() { 76e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling MockitoAnnotations.initMocks(this); 77795f78bc0a9091e608fda7d6854cdc8a887313a8Fan Zhang FakeFeatureFactory.setupForTest(); 78848e904eede46df686a069755642c002fad1cfc9jeffreyhuang mContext = RuntimeEnvironment.application; 79e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling mSettings = spy(new DeviceInfoSettings()); 80848e904eede46df686a069755642c002fad1cfc9jeffreyhuang 81848e904eede46df686a069755642c002fad1cfc9jeffreyhuang doReturn(mActivity).when(mSettings).getActivity(); 821f37d2cc7a4e9f9109c29795b746270ca865a23aFan Zhang doReturn(mContext).when(mSettings).getContext(); 83848e904eede46df686a069755642c002fad1cfc9jeffreyhuang doReturn(mContext.getTheme()).when(mActivity).getTheme(); 84848e904eede46df686a069755642c002fad1cfc9jeffreyhuang doReturn(mContext.getResources()).when(mSettings).getResources(); 85848e904eede46df686a069755642c002fad1cfc9jeffreyhuang doNothing().when(mSettings).onCreatePreferences(any(), any()); 86848e904eede46df686a069755642c002fad1cfc9jeffreyhuang 87e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling doReturn(mScreen).when(mSettings).getPreferenceScreen(); 8822a39c2b93bc66db71238274a7683d329232d124James Lemieux ShadowApplication.getInstance() 8922a39c2b93bc66db71238274a7683d329232d124James Lemieux .setSystemService(Context.TELEPHONY_SERVICE, mTelephonyManager); 90e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling } 91e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling 92a393a4f614361e5b32b1f73a2681fc3fb0ad10c3Nick Desaulniers @Test 93bfb006aa323ea66f81d8f00f6b0081668f6b4fc9Fan Zhang public void getPrefXml_shouldReturnDeviceInfoXml() { 941f37d2cc7a4e9f9109c29795b746270ca865a23aFan Zhang assertThat(mSettings.getPreferenceScreenResId()).isEqualTo(R.xml.device_info_settings); 95c62e2f033d945b8bc576f87bc5aaaba37e2afc87Fan Zhang } 96d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang 97d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang @Test 98d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang public void getSummary_shouldReturnDeviceModel() { 9922a39c2b93bc66db71238274a7683d329232d124James Lemieux final SummaryLoader.SummaryProvider mProvider = 10022a39c2b93bc66db71238274a7683d329232d124James Lemieux DeviceInfoSettings.SUMMARY_PROVIDER_FACTORY.createSummaryProvider(null, mSummaryLoader); 101d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang 102d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang mProvider.setListening(true); 103d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang 104d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang verify(mSummaryLoader).setSummary(mProvider, Build.MODEL + DeviceInfoUtils.getMsvSuffix()); 105d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang } 1062e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze 1072e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze @Test 1082e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze public void testNonIndexableKeys_existInXmlLayout() { 1092e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze final Context context = RuntimeEnvironment.application; 11022a39c2b93bc66db71238274a7683d329232d124James Lemieux final List<String> niks = 11122a39c2b93bc66db71238274a7683d329232d124James Lemieux DeviceInfoSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(context); 1122e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze final int xmlId = (new DeviceInfoSettings()).getPreferenceScreenResId(); 1132e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze 1142e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(context, xmlId); 1152e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze 1162e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze assertThat(keys).containsAllIn(niks); 1172e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze } 118848e904eede46df686a069755642c002fad1cfc9jeffreyhuang 119848e904eede46df686a069755642c002fad1cfc9jeffreyhuang @Test 12022a39c2b93bc66db71238274a7683d329232d124James Lemieux @Config(shadows = SettingsShadowResources.SettingsShadowTheme.class) 1213b5f3885cd906865e1896f29094e4ac554fb4d64Fan Zhang public void onCreate_fromSearch_shouldNotOverrideInitialExpandedCount() { 1223b5f3885cd906865e1896f29094e4ac554fb4d64Fan Zhang final Bundle args = new Bundle(); 1233b5f3885cd906865e1896f29094e4ac554fb4d64Fan Zhang args.putString(EXTRA_FRAGMENT_ARG_KEY, "search_key"); 1243b5f3885cd906865e1896f29094e4ac554fb4d64Fan Zhang mSettings.setArguments(args); 1253b5f3885cd906865e1896f29094e4ac554fb4d64Fan Zhang 1263b5f3885cd906865e1896f29094e4ac554fb4d64Fan Zhang mSettings.onCreate(null /* icicle */); 1273b5f3885cd906865e1896f29094e4ac554fb4d64Fan Zhang 1283b5f3885cd906865e1896f29094e4ac554fb4d64Fan Zhang verify(mScreen).setInitialExpandedChildrenCount(Integer.MAX_VALUE); 1293b5f3885cd906865e1896f29094e4ac554fb4d64Fan Zhang } 1303b5f3885cd906865e1896f29094e4ac554fb4d64Fan Zhang 1313b5f3885cd906865e1896f29094e4ac554fb4d64Fan Zhang @Test 13222a39c2b93bc66db71238274a7683d329232d124James Lemieux @Config(shadows = SettingsShadowResources.SettingsShadowTheme.class) 133848e904eede46df686a069755642c002fad1cfc9jeffreyhuang public void onCreate_singleSim_shouldAddSingleSimCount() { 134848e904eede46df686a069755642c002fad1cfc9jeffreyhuang doReturn(1).when(mTelephonyManager).getPhoneCount(); 135848e904eede46df686a069755642c002fad1cfc9jeffreyhuang 136848e904eede46df686a069755642c002fad1cfc9jeffreyhuang mSettings.onCreate(null /* icicle */); 137848e904eede46df686a069755642c002fad1cfc9jeffreyhuang 138848e904eede46df686a069755642c002fad1cfc9jeffreyhuang verify(mScreen).setInitialExpandedChildrenCount( 139848e904eede46df686a069755642c002fad1cfc9jeffreyhuang SIM_PREFERENCES_COUNT + NON_SIM_PREFERENCES_COUNT); 140848e904eede46df686a069755642c002fad1cfc9jeffreyhuang } 141848e904eede46df686a069755642c002fad1cfc9jeffreyhuang 142848e904eede46df686a069755642c002fad1cfc9jeffreyhuang @Test 14322a39c2b93bc66db71238274a7683d329232d124James Lemieux @Config(shadows = SettingsShadowResources.SettingsShadowTheme.class) 144848e904eede46df686a069755642c002fad1cfc9jeffreyhuang public void onCreate_dualeSim_shouldAddDualSimCount() { 145848e904eede46df686a069755642c002fad1cfc9jeffreyhuang doReturn(2).when(mTelephonyManager).getPhoneCount(); 146848e904eede46df686a069755642c002fad1cfc9jeffreyhuang 147848e904eede46df686a069755642c002fad1cfc9jeffreyhuang mSettings.onCreate(null /* icicle */); 148848e904eede46df686a069755642c002fad1cfc9jeffreyhuang 149848e904eede46df686a069755642c002fad1cfc9jeffreyhuang verify(mScreen).setInitialExpandedChildrenCount( 150848e904eede46df686a069755642c002fad1cfc9jeffreyhuang 2 * SIM_PREFERENCES_COUNT + NON_SIM_PREFERENCES_COUNT); 151848e904eede46df686a069755642c002fad1cfc9jeffreyhuang } 152d267d377fba9f6685dfd73af51d85c244f1f970fElliott Hughes} 153