• 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.mockito.ArgumentMatchers.anyInt;
22 import static org.mockito.Mockito.doReturn;
23 
24 import android.content.Context;
25 import android.os.PersistableBundle;
26 import android.telephony.CarrierConfigManager;
27 import android.telephony.ServiceState;
28 
29 import com.android.internal.telephony.cdnr.CarrierDisplayNameData;
30 import com.android.internal.telephony.cdnr.CarrierDisplayNameResolver;
31 import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppState;
32 import com.android.internal.telephony.uicc.RuimRecords;
33 import com.android.internal.telephony.uicc.SIMRecords;
34 import com.android.internal.telephony.uicc.UiccCardApplication;
35 
36 import org.junit.After;
37 import org.junit.Before;
38 import org.junit.Test;
39 import org.mockito.Mockito;
40 
41 public class CarrierDisplayNameResolverTest extends TelephonyTest {
42 
43     private static final String PLMN_1 = "310260";
44     private static final String PLMN_2 = "480123";
45     private static final String PLMN_3 = "586111";
46     private static final String HOME_PLMN_NUMERIC = PLMN_1;
47     private static final String NON_HOME_PLMN_NUMERIC = "123456";
48 
49     private static final String SPN_FROM_CC = "spn from carrier config";
50 
51     /** No PLMN in home, not SPN in roaming. */
52     private static final int SPN_DISPLAY_CONDITION_FROM_USIM = 0;
53     private static final String SPN_FROM_USIM = "spn from usim";
54     private static final String PNN_HOME_NAME_FROM_USIM = "pnnHomeName";
55     private static final String[] SPDI_FROM_USIM = new String[] { PLMN_1, PLMN_2 };
56     private static final String[] EHPLMNS_FROM_USIM = new String[] {
57             PLMN_1, PLMN_2, PLMN_3
58     };
59 
60     private static final boolean ROAMING = true;
61     private static final boolean NON_ROAMING = false;
62 
63     private PersistableBundle mConfig;
64 
65     private CarrierDisplayNameResolver mCdnr;
66 
67     private ServiceState mSS = new ServiceState();
68 
69     @Before
setUp()70     public void setUp() throws Exception {
71         super.setUp(this.getClass().getSimpleName());
72 
73         mCdnr = new CarrierDisplayNameResolver(mPhone);
74 
75         UiccCardApplication uiccApp = Mockito.mock(UiccCardApplication.class);
76         doReturn(uiccApp).when(mPhone).getUiccCardApplication();
77         doReturn(AppState.APPSTATE_READY).when(uiccApp).getState();
78         doReturn(mSS).when(mSST).getServiceState();
79 
80         doReturn(false).when(mPhone).isWifiCallingEnabled();
81         doReturn(true).when(mPhone).isPhoneTypeGsm();
82 
83         mConfig = mContextFixture.getCarrierConfigBundle();
84         CarrierConfigManager mockConfigManager = Mockito.mock(CarrierConfigManager.class);
85         doReturn(mockConfigManager).when(mContext).getSystemService(Context.CARRIER_CONFIG_SERVICE);
86         doReturn(mConfig).when(mockConfigManager).getConfigForSubId(anyInt());
87 
88         mSS.setEmergencyOnly(false /* emergencyCallOnly" */);
89         mSS.setOperatorName("long name", "short name", HOME_PLMN_NUMERIC);
90         mSS.setVoiceRegState(ServiceState.STATE_IN_SERVICE);
91         mSS.setDataRegState(ServiceState.STATE_IN_SERVICE);
92 
93         SIMRecords usim = Mockito.mock(SIMRecords.class);
94         doReturn(SPN_FROM_USIM).when(usim).getServiceProviderName();
95         doReturn(PNN_HOME_NAME_FROM_USIM).when(usim).getPnnHomeName();
96         doReturn(EHPLMNS_FROM_USIM).when(usim).getEhplmns();
97         doReturn(SPDI_FROM_USIM).when(usim).getServiceProviderDisplayInformation();
98         doReturn(SPN_DISPLAY_CONDITION_FROM_USIM).when(usim).getCarrierNameDisplayCondition();
99 
100         mCdnr.updateEfFromUsim(usim);
101     }
102 
103     @After
tearDown()104     public void tearDown() throws Exception {
105         mCdnr = null;
106         mConfig = null;
107         mSS = null;
108         super.tearDown();
109     }
110 
111     @Test
testUpdateSPNFromHigherPrioritySource_shouldOverrideRecord()112     public void testUpdateSPNFromHigherPrioritySource_shouldOverrideRecord() {
113         // Carrier config source > sim record source
114         mConfig.putString(CarrierConfigManager.KEY_CARRIER_NAME_STRING, SPN_FROM_CC);
115 
116         // Update ef records from carrier config
117         mCdnr.updateEfFromCarrierConfig(mConfig);
118 
119         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
120         assertThat(data.getSpn()).isEqualTo(SPN_FROM_CC);
121         assertThat(data.shouldShowSpn()).isTrue();
122     }
123 
124     @Test
testUpdateSPNFromLowerPrioritySource_shouldNotOverrideRecord()125     public void testUpdateSPNFromLowerPrioritySource_shouldNotOverrideRecord() {
126         // Ruim's priority < Usim's priority
127         RuimRecords ruim = Mockito.mock(RuimRecords.class);
128         doReturn("spn from ruim").when(ruim).getServiceProviderName();
129 
130         // Update ef records from Ruim
131         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
132         assertThat(data.getSpn()).isEqualTo(SPN_FROM_USIM);
133     }
134 
135     @Test
testShouldShowSPN_nonRoaming_showSPN()136     public void testShouldShowSPN_nonRoaming_showSPN() {
137         mSS.setRoaming(NON_ROAMING);
138 
139         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
140         assertThat(data.shouldShowSpn()).isTrue();
141     }
142 
143     @Test
testShouldShowSPN_plmnNotInProvidedList_notShowSPN()144     public void testShouldShowSPN_plmnNotInProvidedList_notShowSPN() {
145         mSS.setOperatorName("long", "short", NON_HOME_PLMN_NUMERIC);
146         mSS.setRoaming(ROAMING);
147 
148         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
149         assertThat(data.shouldShowSpn()).isFalse();
150     }
151 
152     @Test
testShouldShowSPN_plmnInProvidedList_showSPN()153     public void testShouldShowSPN_plmnInProvidedList_showSPN() {
154         mSS.setOperatorName("long", "short", SPDI_FROM_USIM[0]);
155         mSS.setRoaming(ROAMING);
156 
157         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
158         assertThat(data.shouldShowSpn()).isTrue();
159     }
160 
161     @Test
testShouldShowPLMNNetworkName_plmnNotInProvidedList_showPLMNNetworkName()162     public void testShouldShowPLMNNetworkName_plmnNotInProvidedList_showPLMNNetworkName() {
163         mSS.setOperatorName("long", "short", NON_HOME_PLMN_NUMERIC);
164         mSS.setRoaming(ROAMING);
165 
166         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
167         assertThat(data.shouldShowPlmn()).isTrue();
168     }
169 
170     @Test
testGetPLMNNetworkName_oplNotPresent_returnTheFirstEntryOfPNNList()171     public void testGetPLMNNetworkName_oplNotPresent_returnTheFirstEntryOfPNNList() {
172         // Set the roaming state to on roaming, we should show the plmn network name based on the
173         // default settings.
174         mSS.setRoaming(ROAMING);
175 
176         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
177         assertThat(data.getPlmn()).isEqualTo(PNN_HOME_NAME_FROM_USIM);
178     }
179 
180     @Test
testShouldShowPLMNFromSourceBandOverride_notShowPLMN()181     public void testShouldShowPLMNFromSourceBandOverride_notShowPLMN() {
182         // Update ef records from brand override
183         mCdnr.updateEfForBrandOverride("spn from brand override");
184 
185         mSS.setRoaming(ROAMING);
186 
187         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
188         assertThat(data.shouldShowPlmn()).isFalse();
189     }
190 
191     @Test
testShouldShowSPNFromSourceCC_conditionOverrideShowPLMN_notShowSPN()192     public void testShouldShowSPNFromSourceCC_conditionOverrideShowPLMN_notShowSPN() {
193         // Carrier config source > sim record source
194         mConfig.putInt(CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT, 1);
195 
196         // Update ef records from carrier config
197         mCdnr.updateEfFromCarrierConfig(mConfig);
198 
199         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
200         assertThat(data.shouldShowSpn()).isFalse();
201     }
202 
203     @Test
testShouldShowPLMNFromSourceCC_conditionOverrideShowPLMN_shouldShowPLMN()204     public void testShouldShowPLMNFromSourceCC_conditionOverrideShowPLMN_shouldShowPLMN() {
205         // Carrier config source > sim record source
206         mConfig.putInt(CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT, 1);
207 
208         // Update ef records from carrier config
209         mCdnr.updateEfFromCarrierConfig(mConfig);
210 
211         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
212         assertThat(data.shouldShowPlmn()).isTrue();
213     }
214 
215     @Test
testShouldShowPLMNLongName_plmnNotInProvidedList_showPLMNLongName()216     public void testShouldShowPLMNLongName_plmnNotInProvidedList_showPLMNLongName() {
217         // Carrier config source > sim record source
218         mConfig.putInt(CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT, 1);
219 
220         // Update ef records from carrier config
221         mCdnr.updateEfFromCarrierConfig(mConfig);
222 
223         SIMRecords usim = Mockito.mock(SIMRecords.class);
224         doReturn(SPN_FROM_USIM).when(usim).getServiceProviderName();
225         mCdnr.updateEfFromUsim(usim);
226 
227         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
228 
229         assertThat(data.shouldShowPlmn()).isTrue();
230         assertThat(data.getPlmn()).isEqualTo("long name");
231     }
232 
233     @Test
testShouldShowPLMNShortName_plmnNotInProvidedList_showPLMNShortName()234     public void testShouldShowPLMNShortName_plmnNotInProvidedList_showPLMNShortName() {
235         // Carrier config source > sim record source
236         mConfig.putInt(CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT, 1);
237 
238         // Update ef records from carrier config
239         mCdnr.updateEfFromCarrierConfig(mConfig);
240 
241         SIMRecords usim = Mockito.mock(SIMRecords.class);
242         doReturn(SPN_FROM_USIM).when(usim).getServiceProviderName();
243         mCdnr.updateEfFromUsim(usim);
244 
245         // long name empty
246         mSS.setOperatorName("", "short name", HOME_PLMN_NUMERIC);
247 
248         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
249 
250         assertThat(data.shouldShowPlmn()).isTrue();
251         assertThat(data.getPlmn()).isEqualTo("short name");
252     }
253 
254     @Test
testShouldShowPLMNNumeric_plmnNotInProvidedList_showPLMNNumeric()255     public void testShouldShowPLMNNumeric_plmnNotInProvidedList_showPLMNNumeric() {
256         // Carrier config source > sim record source
257         mConfig.putInt(CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT, 1);
258 
259         // Update ef records from carrier config
260         mCdnr.updateEfFromCarrierConfig(mConfig);
261 
262         SIMRecords usim = Mockito.mock(SIMRecords.class);
263         doReturn(SPN_FROM_USIM).when(usim).getServiceProviderName();
264         mCdnr.updateEfFromUsim(usim);
265 
266         // long name and short name empty
267         mSS.setOperatorName("", "", HOME_PLMN_NUMERIC);
268 
269         CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData();
270 
271         assertThat(data.shouldShowPlmn()).isTrue();
272         assertThat(data.getPlmn()).isEqualTo(HOME_PLMN_NUMERIC);
273     }
274 }
275