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 final ServiceState mSS = new ServiceState(); 68 69 @Before setUp()70 public void setUp() throws Exception { 71 super.setUp("CDNRTest"); 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 super.tearDown(); 106 } 107 108 @Test testUpdateSPNFromHigherPrioritySource_shouldOverrideRecord()109 public void testUpdateSPNFromHigherPrioritySource_shouldOverrideRecord() { 110 // Carrier config source > sim record source 111 mConfig.putString(CarrierConfigManager.KEY_CARRIER_NAME_STRING, SPN_FROM_CC); 112 113 // Update ef records from carrier config 114 mCdnr.updateEfFromCarrierConfig(mConfig); 115 116 CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData(); 117 assertThat(data.getSpn()).isEqualTo(SPN_FROM_CC); 118 assertThat(data.shouldShowSpn()).isTrue(); 119 } 120 121 @Test testUpdateSPNFromLowerPrioritySource_shouldNotOverrideRecord()122 public void testUpdateSPNFromLowerPrioritySource_shouldNotOverrideRecord() { 123 // Ruim's priority < Usim's priority 124 RuimRecords ruim = Mockito.mock(RuimRecords.class); 125 doReturn("spn from ruim").when(ruim).getServiceProviderName(); 126 127 // Update ef records from Ruim 128 CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData(); 129 assertThat(data.getSpn()).isEqualTo(SPN_FROM_USIM); 130 } 131 132 @Test testShouldShowSPN_nonRoaming_showSPN()133 public void testShouldShowSPN_nonRoaming_showSPN() { 134 mSS.setRoaming(NON_ROAMING); 135 136 CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData(); 137 assertThat(data.shouldShowSpn()).isTrue(); 138 } 139 140 @Test testShouldShowSPN_plmnNotInProvidedList_notShowSPN()141 public void testShouldShowSPN_plmnNotInProvidedList_notShowSPN() { 142 mSS.setOperatorName("long", "short", NON_HOME_PLMN_NUMERIC); 143 mSS.setRoaming(ROAMING); 144 145 CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData(); 146 assertThat(data.shouldShowSpn()).isFalse(); 147 } 148 149 @Test testShouldShowSPN_plmnInProvidedList_showSPN()150 public void testShouldShowSPN_plmnInProvidedList_showSPN() { 151 mSS.setOperatorName("long", "short", SPDI_FROM_USIM[0]); 152 mSS.setRoaming(ROAMING); 153 154 CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData(); 155 assertThat(data.shouldShowSpn()).isTrue(); 156 } 157 158 @Test testShouldShowPLMNNetworkName_plmnNotInProvidedList_showPLMNNetworkName()159 public void testShouldShowPLMNNetworkName_plmnNotInProvidedList_showPLMNNetworkName() { 160 mSS.setOperatorName("long", "short", NON_HOME_PLMN_NUMERIC); 161 mSS.setRoaming(ROAMING); 162 163 CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData(); 164 assertThat(data.shouldShowPlmn()).isTrue(); 165 } 166 167 @Test testGetPLMNNetworkName_oplNotPresent_returnTheFirstEntryOfPNNList()168 public void testGetPLMNNetworkName_oplNotPresent_returnTheFirstEntryOfPNNList() { 169 // Set the roaming state to on roaming, we should show the plmn network name based on the 170 // default settings. 171 mSS.setRoaming(ROAMING); 172 173 CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData(); 174 assertThat(data.getPlmn()).isEqualTo(PNN_HOME_NAME_FROM_USIM); 175 } 176 177 @Test testShouldShowPLMNFromSourceBandOverride_notShowPLMN()178 public void testShouldShowPLMNFromSourceBandOverride_notShowPLMN() { 179 // Update ef records from brand override 180 mCdnr.updateEfForBrandOverride("spn from brand override"); 181 182 mSS.setRoaming(ROAMING); 183 184 CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData(); 185 assertThat(data.shouldShowPlmn()).isFalse(); 186 } 187 188 @Test testShouldShowSPNFromSourceCC_conditionOverrideShowPLMN_notShowSPN()189 public void testShouldShowSPNFromSourceCC_conditionOverrideShowPLMN_notShowSPN() { 190 // Carrier config source > sim record source 191 mConfig.putInt(CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT, 1); 192 193 // Update ef records from carrier config 194 mCdnr.updateEfFromCarrierConfig(mConfig); 195 196 CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData(); 197 assertThat(data.shouldShowSpn()).isFalse(); 198 } 199 200 @Test testShouldShowPLMNFromSourceCC_conditionOverrideShowPLMN_shouldShowPLMN()201 public void testShouldShowPLMNFromSourceCC_conditionOverrideShowPLMN_shouldShowPLMN() { 202 // Carrier config source > sim record source 203 mConfig.putInt(CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT, 1); 204 205 // Update ef records from carrier config 206 mCdnr.updateEfFromCarrierConfig(mConfig); 207 208 CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData(); 209 assertThat(data.shouldShowPlmn()).isTrue(); 210 } 211 212 @Test testShouldShowPLMNLongName_plmnNotInProvidedList_showPLMNLongName()213 public void testShouldShowPLMNLongName_plmnNotInProvidedList_showPLMNLongName() { 214 // Carrier config source > sim record source 215 mConfig.putInt(CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT, 1); 216 217 // Update ef records from carrier config 218 mCdnr.updateEfFromCarrierConfig(mConfig); 219 220 SIMRecords usim = Mockito.mock(SIMRecords.class); 221 doReturn(SPN_FROM_USIM).when(usim).getServiceProviderName(); 222 mCdnr.updateEfFromUsim(usim); 223 224 CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData(); 225 226 assertThat(data.shouldShowPlmn()).isTrue(); 227 assertThat(data.getPlmn()).isEqualTo("long name"); 228 } 229 230 @Test testShouldShowPLMNShortName_plmnNotInProvidedList_showPLMNShortName()231 public void testShouldShowPLMNShortName_plmnNotInProvidedList_showPLMNShortName() { 232 // Carrier config source > sim record source 233 mConfig.putInt(CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT, 1); 234 235 // Update ef records from carrier config 236 mCdnr.updateEfFromCarrierConfig(mConfig); 237 238 SIMRecords usim = Mockito.mock(SIMRecords.class); 239 doReturn(SPN_FROM_USIM).when(usim).getServiceProviderName(); 240 mCdnr.updateEfFromUsim(usim); 241 242 // long name empty 243 mSS.setOperatorName("", "short name", HOME_PLMN_NUMERIC); 244 245 CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData(); 246 247 assertThat(data.shouldShowPlmn()).isTrue(); 248 assertThat(data.getPlmn()).isEqualTo("short name"); 249 } 250 251 @Test testShouldShowPLMNNumeric_plmnNotInProvidedList_showPLMNNumeric()252 public void testShouldShowPLMNNumeric_plmnNotInProvidedList_showPLMNNumeric() { 253 // Carrier config source > sim record source 254 mConfig.putInt(CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT, 1); 255 256 // Update ef records from carrier config 257 mCdnr.updateEfFromCarrierConfig(mConfig); 258 259 SIMRecords usim = Mockito.mock(SIMRecords.class); 260 doReturn(SPN_FROM_USIM).when(usim).getServiceProviderName(); 261 mCdnr.updateEfFromUsim(usim); 262 263 // long name and short name empty 264 mSS.setOperatorName("", "", HOME_PLMN_NUMERIC); 265 266 CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData(); 267 268 assertThat(data.shouldShowPlmn()).isTrue(); 269 assertThat(data.getPlmn()).isEqualTo(HOME_PLMN_NUMERIC); 270 } 271 } 272