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