• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.internal.telephony;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import static org.junit.Assert.fail;
22 import static org.mockito.ArgumentMatchers.anyInt;
23 import static org.mockito.Mockito.doReturn;
24 
25 import android.content.Context;
26 import android.os.PersistableBundle;
27 import android.telephony.CarrierConfigManager;
28 import android.telephony.ServiceState;
29 
30 import com.android.internal.telephony.cdnr.CarrierDisplayNameData;
31 import com.android.internal.telephony.cdnr.CarrierDisplayNameResolver;
32 import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppState;
33 import com.android.internal.telephony.uicc.RuimRecords;
34 import com.android.internal.telephony.uicc.SIMRecords;
35 import com.android.internal.telephony.uicc.UiccCardApplication;
36 
37 import org.junit.After;
38 import org.junit.Before;
39 import org.junit.Test;
40 import org.mockito.Mockito;
41 
42 public class CarrierDisplayNameResolverTest extends TelephonyTest {
43 
44     private static final String PLMN_1 = "310260";
45     private static final String PLMN_2 = "480123";
46     private static final String PLMN_3 = "586111";
47     private static final String HOME_PLMN_NUMERIC = PLMN_1;
48     private static final String NON_HOME_PLMN_NUMERIC = "123456";
49 
50     private static final String SPN_FROM_CC = "spn from carrier config";
51 
52     /** No PLMN in home, not SPN in roaming. */
53     private static final int SPN_DISPLAY_CONDITION_FROM_USIM = 0;
54     private static final String SPN_FROM_USIM = "spn from usim";
55     private static final String PNN_HOME_NAME_FROM_USIM = "pnnHomeName";
56     private static final String[] SPDI_FROM_USIM = new String[] { PLMN_1, PLMN_2 };
57     private static final String[] EHPLMNS_FROM_USIM = new String[] {
58             PLMN_1, PLMN_2, PLMN_3
59     };
60 
61     private static final boolean ROAMING = true;
62     private static final boolean NON_ROAMING = false;
63 
64     private PersistableBundle mConfig;
65 
66     private CarrierDisplayNameResolver mCdnr;
67 
68     private ServiceState mSS = new ServiceState();
69 
70     @Before
setUp()71     public void setUp() throws Exception {
72         super.setUp(this.getClass().getSimpleName());
73 
74         mCdnr = new CarrierDisplayNameResolver(mPhone);
75 
76         UiccCardApplication uiccApp = Mockito.mock(UiccCardApplication.class);
77         doReturn(uiccApp).when(mPhone).getUiccCardApplication();
78         doReturn(AppState.APPSTATE_READY).when(uiccApp).getState();
79         doReturn(mSS).when(mSST).getServiceState();
80 
81         doReturn(false).when(mPhone).isWifiCallingEnabled();
82         doReturn(true).when(mPhone).isPhoneTypeGsm();
83 
84         mConfig = mContextFixture.getCarrierConfigBundle();
85         CarrierConfigManager mockConfigManager = Mockito.mock(CarrierConfigManager.class);
86         doReturn(mockConfigManager).when(mContext).getSystemService(Context.CARRIER_CONFIG_SERVICE);
87         doReturn(mConfig).when(mockConfigManager).getConfigForSubId(anyInt());
88 
89         mSS.setEmergencyOnly(false /* emergencyCallOnly" */);
90         mSS.setOperatorName("long name", "short name", HOME_PLMN_NUMERIC);
91         mSS.setVoiceRegState(ServiceState.STATE_IN_SERVICE);
92         mSS.setDataRegState(ServiceState.STATE_IN_SERVICE);
93 
94         SIMRecords usim = Mockito.mock(SIMRecords.class);
95         doReturn(SPN_FROM_USIM).when(usim).getServiceProviderName();
96         doReturn(PNN_HOME_NAME_FROM_USIM).when(usim).getPnnHomeName();
97         doReturn(EHPLMNS_FROM_USIM).when(usim).getEhplmns();
98         doReturn(SPDI_FROM_USIM).when(usim).getServiceProviderDisplayInformation();
99         doReturn(SPN_DISPLAY_CONDITION_FROM_USIM).when(usim).getCarrierNameDisplayCondition();
100 
101         mCdnr.updateEfFromUsim(usim);
102     }
103 
104     @After
tearDown()105     public void tearDown() throws Exception {
106         mCdnr = null;
107         mConfig = null;
108         mSS = null;
109         super.tearDown();
110     }
111 
112     @Test
testUpdateSPNFromHigherPrioritySource_shouldOverrideRecord()113     public void testUpdateSPNFromHigherPrioritySource_shouldOverrideRecord() {
114         // Carrier config source > sim record source
115         mConfig.putString(CarrierConfigManager.KEY_CARRIER_NAME_STRING, SPN_FROM_CC);
116 
117         // Update ef records from carrier config
118         mCdnr.updateEfFromCarrierConfig(mConfig);
119 
120         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
121         assertThat(data.getSpn()).isEqualTo(SPN_FROM_CC);
122         assertThat(data.shouldShowSpn()).isTrue();
123     }
124 
125     @Test
testUpdateSPNFromLowerPrioritySource_shouldNotOverrideRecord()126     public void testUpdateSPNFromLowerPrioritySource_shouldNotOverrideRecord() {
127         // Ruim's priority < Usim's priority
128         RuimRecords ruim = Mockito.mock(RuimRecords.class);
129         doReturn("spn from ruim").when(ruim).getServiceProviderName();
130 
131         // Update ef records from Ruim
132         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
133         assertThat(data.getSpn()).isEqualTo(SPN_FROM_USIM);
134     }
135 
136     @Test
testShouldShowSPN_nonRoaming_showSPN()137     public void testShouldShowSPN_nonRoaming_showSPN() {
138         mSS.setRoaming(NON_ROAMING);
139 
140         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
141         assertThat(data.shouldShowSpn()).isTrue();
142     }
143 
144     @Test
testShouldShowSPN_plmnNotInProvidedList_notShowSPN()145     public void testShouldShowSPN_plmnNotInProvidedList_notShowSPN() {
146         mSS.setOperatorName("long", "short", NON_HOME_PLMN_NUMERIC);
147         mSS.setRoaming(ROAMING);
148 
149         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
150         assertThat(data.shouldShowSpn()).isFalse();
151     }
152 
153     @Test
testShouldShowSPN_plmnInProvidedList_showSPN()154     public void testShouldShowSPN_plmnInProvidedList_showSPN() {
155         mSS.setOperatorName("long", "short", SPDI_FROM_USIM[0]);
156         mSS.setRoaming(ROAMING);
157 
158         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
159         assertThat(data.shouldShowSpn()).isTrue();
160     }
161 
162     @Test
testShouldShowPLMNNetworkName_plmnNotInProvidedList_showPLMNNetworkName()163     public void testShouldShowPLMNNetworkName_plmnNotInProvidedList_showPLMNNetworkName() {
164         mSS.setOperatorName("long", "short", NON_HOME_PLMN_NUMERIC);
165         mSS.setRoaming(ROAMING);
166 
167         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
168         assertThat(data.shouldShowPlmn()).isTrue();
169     }
170 
171     @Test
testGetPLMNNetworkName_oplNotPresent_returnTheFirstEntryOfPNNList()172     public void testGetPLMNNetworkName_oplNotPresent_returnTheFirstEntryOfPNNList() {
173         // Set the roaming state to on roaming, we should show the plmn network name based on the
174         // default settings.
175         mSS.setRoaming(ROAMING);
176 
177         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
178         assertThat(data.getPlmn()).isEqualTo(PNN_HOME_NAME_FROM_USIM);
179     }
180 
181     @Test
testShouldShowPLMNFromSourceBandOverride_notShowPLMN()182     public void testShouldShowPLMNFromSourceBandOverride_notShowPLMN() {
183         // Update ef records from brand override
184         mCdnr.updateEfForBrandOverride("spn from brand override");
185 
186         mSS.setRoaming(ROAMING);
187 
188         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
189         assertThat(data.shouldShowPlmn()).isFalse();
190     }
191 
192     @Test
testShouldShowSPNFromSourceCC_conditionOverrideShowPLMN_notShowSPN()193     public void testShouldShowSPNFromSourceCC_conditionOverrideShowPLMN_notShowSPN() {
194         // Carrier config source > sim record source
195         mConfig.putInt(CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT, 1);
196 
197         // Update ef records from carrier config
198         mCdnr.updateEfFromCarrierConfig(mConfig);
199 
200         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
201         assertThat(data.shouldShowSpn()).isFalse();
202     }
203 
204     @Test
testShouldShowPLMNFromSourceCC_conditionOverrideShowPLMN_shouldShowPLMN()205     public void testShouldShowPLMNFromSourceCC_conditionOverrideShowPLMN_shouldShowPLMN() {
206         // Carrier config source > sim record source
207         mConfig.putInt(CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT, 1);
208 
209         // Update ef records from carrier config
210         mCdnr.updateEfFromCarrierConfig(mConfig);
211 
212         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
213         assertThat(data.shouldShowPlmn()).isTrue();
214     }
215 
216     @Test
testShouldShowPLMNLongName_plmnNotInProvidedList_showPLMNLongName()217     public void testShouldShowPLMNLongName_plmnNotInProvidedList_showPLMNLongName() {
218         // Carrier config source > sim record source
219         mConfig.putInt(CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT, 1);
220 
221         // Update ef records from carrier config
222         mCdnr.updateEfFromCarrierConfig(mConfig);
223 
224         SIMRecords usim = Mockito.mock(SIMRecords.class);
225         doReturn(SPN_FROM_USIM).when(usim).getServiceProviderName();
226         mCdnr.updateEfFromUsim(usim);
227 
228         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
229 
230         assertThat(data.shouldShowPlmn()).isTrue();
231         assertThat(data.getPlmn()).isEqualTo("long name");
232     }
233 
234     @Test
testShouldShowPLMNShortName_plmnNotInProvidedList_showPLMNShortName()235     public void testShouldShowPLMNShortName_plmnNotInProvidedList_showPLMNShortName() {
236         // Carrier config source > sim record source
237         mConfig.putInt(CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT, 1);
238 
239         // Update ef records from carrier config
240         mCdnr.updateEfFromCarrierConfig(mConfig);
241 
242         SIMRecords usim = Mockito.mock(SIMRecords.class);
243         doReturn(SPN_FROM_USIM).when(usim).getServiceProviderName();
244         mCdnr.updateEfFromUsim(usim);
245 
246         // long name empty
247         mSS.setOperatorName("", "short name", HOME_PLMN_NUMERIC);
248 
249         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
250 
251         assertThat(data.shouldShowPlmn()).isTrue();
252         assertThat(data.getPlmn()).isEqualTo("short name");
253     }
254 
255     @Test
testShouldShowPLMNNumeric_plmnNotInProvidedList_showPLMNNumeric()256     public void testShouldShowPLMNNumeric_plmnNotInProvidedList_showPLMNNumeric() {
257         // Carrier config source > sim record source
258         mConfig.putInt(CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT, 1);
259 
260         // Update ef records from carrier config
261         mCdnr.updateEfFromCarrierConfig(mConfig);
262 
263         SIMRecords usim = Mockito.mock(SIMRecords.class);
264         doReturn(SPN_FROM_USIM).when(usim).getServiceProviderName();
265         mCdnr.updateEfFromUsim(usim);
266 
267         // long name and short name empty
268         mSS.setOperatorName("", "", HOME_PLMN_NUMERIC);
269 
270         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
271 
272         assertThat(data.shouldShowPlmn()).isTrue();
273         assertThat(data.getPlmn()).isEqualTo(HOME_PLMN_NUMERIC);
274     }
275 
276     @Test
testCarrierDisplayNameData_enforceNonNullDataSpn()277     public void testCarrierDisplayNameData_enforceNonNullDataSpn() {
278         try {
279             CarrierDisplayNameData cdnd = new CarrierDisplayNameData.Builder()
280                     .setSpn("testSpn").build();
281             fail("Expected IAE");
282         } catch (IllegalArgumentException expected) {
283         }
284     }
285 }
286