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