1 package org.robolectric.shadows; 2 3 import static android.content.Context.TELEPHONY_SUBSCRIPTION_SERVICE; 4 import static android.os.Build.VERSION_CODES.N; 5 import static android.os.Build.VERSION_CODES.O_MR1; 6 import static android.os.Build.VERSION_CODES.P; 7 import static android.os.Build.VERSION_CODES.Q; 8 import static android.os.Build.VERSION_CODES.R; 9 import static android.os.Build.VERSION_CODES.TIRAMISU; 10 import static androidx.test.core.app.ApplicationProvider.getApplicationContext; 11 import static com.google.common.truth.Truth.assertThat; 12 import static org.junit.Assert.assertThrows; 13 import static org.robolectric.Shadows.shadowOf; 14 15 import android.os.Handler; 16 import android.os.Looper; 17 import android.telephony.SubscriptionInfo; 18 import android.telephony.SubscriptionManager; 19 import androidx.test.ext.junit.runners.AndroidJUnit4; 20 import org.junit.Before; 21 import org.junit.Test; 22 import org.junit.runner.RunWith; 23 import org.robolectric.annotation.Config; 24 import org.robolectric.shadows.ShadowSubscriptionManager.SubscriptionInfoBuilder; 25 26 /** Test for {@link ShadowSubscriptionManager}. */ 27 @RunWith(AndroidJUnit4.class) 28 @Config(minSdk = N) 29 public class ShadowSubscriptionManagerTest { 30 31 private SubscriptionManager subscriptionManager; 32 33 @Before setUp()34 public void setUp() throws Exception { 35 subscriptionManager = 36 (SubscriptionManager) 37 getApplicationContext().getSystemService(TELEPHONY_SUBSCRIPTION_SERVICE); 38 } 39 40 @Config(minSdk = R) 41 @Test shouldGiveActiveDataSubscriptionId()42 public void shouldGiveActiveDataSubscriptionId() { 43 int testId = 42; 44 ShadowSubscriptionManager.setActiveDataSubscriptionId(testId); 45 assertThat(SubscriptionManager.getActiveDataSubscriptionId()).isEqualTo(testId); 46 } 47 48 @Test shouldGiveDefaultSubscriptionId()49 public void shouldGiveDefaultSubscriptionId() { 50 int testId = 42; 51 ShadowSubscriptionManager.setDefaultSubscriptionId(testId); 52 assertThat(SubscriptionManager.getDefaultSubscriptionId()).isEqualTo(testId); 53 } 54 55 @Test shouldGiveDefaultDataSubscriptionId()56 public void shouldGiveDefaultDataSubscriptionId() { 57 int testId = 42; 58 ShadowSubscriptionManager.setDefaultDataSubscriptionId(testId); 59 assertThat(SubscriptionManager.getDefaultDataSubscriptionId()).isEqualTo(testId); 60 } 61 62 @Test shouldGiveDefaultSmsSubscriptionId()63 public void shouldGiveDefaultSmsSubscriptionId() { 64 int testId = 42; 65 ShadowSubscriptionManager.setDefaultSmsSubscriptionId(testId); 66 assertThat(SubscriptionManager.getDefaultSmsSubscriptionId()).isEqualTo(testId); 67 } 68 69 @Test shouldGiveDefaultVoiceSubscriptionId()70 public void shouldGiveDefaultVoiceSubscriptionId() { 71 int testId = 42; 72 ShadowSubscriptionManager.setDefaultVoiceSubscriptionId(testId); 73 assertThat(SubscriptionManager.getDefaultVoiceSubscriptionId()).isEqualTo(testId); 74 } 75 76 @Test addOnSubscriptionsChangedListener_shouldCallbackImmediately()77 public void addOnSubscriptionsChangedListener_shouldCallbackImmediately() { 78 DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener(); 79 shadowOf(subscriptionManager).addOnSubscriptionsChangedListener(listener); 80 81 assertThat(listener.subscriptionChangedCount).isEqualTo(1); 82 } 83 84 @Test addOnSubscriptionsChangedListener_shouldAddListener()85 public void addOnSubscriptionsChangedListener_shouldAddListener() { 86 DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener(); 87 shadowOf(subscriptionManager).addOnSubscriptionsChangedListener(listener); 88 89 shadowOf(subscriptionManager) 90 .setActiveSubscriptionInfos( 91 SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo()); 92 93 assertThat(listener.subscriptionChangedCount).isEqualTo(2); 94 } 95 96 @Test 97 public void addOnSubscriptionsChangedListener_whenHasExecutorParameter_shouldCallbackImmediately()98 addOnSubscriptionsChangedListener_whenHasExecutorParameter_shouldCallbackImmediately() { 99 DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener(); 100 shadowOf(subscriptionManager) 101 .addOnSubscriptionsChangedListener(new Handler(Looper.getMainLooper())::post, listener); 102 103 assertThat(listener.subscriptionChangedCount).isEqualTo(1); 104 } 105 106 @Test addOnSubscriptionsChangedListener_whenHasExecutorParameter_shouldAddListener()107 public void addOnSubscriptionsChangedListener_whenHasExecutorParameter_shouldAddListener() { 108 DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener(); 109 shadowOf(subscriptionManager) 110 .addOnSubscriptionsChangedListener(new Handler(Looper.getMainLooper())::post, listener); 111 112 shadowOf(subscriptionManager) 113 .setActiveSubscriptionInfos( 114 SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo()); 115 116 assertThat(listener.subscriptionChangedCount).isEqualTo(2); 117 } 118 119 @Test removeOnSubscriptionsChangedListener_shouldRemoveListener()120 public void removeOnSubscriptionsChangedListener_shouldRemoveListener() { 121 DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener(); 122 DummySubscriptionsChangedListener listener2 = new DummySubscriptionsChangedListener(); 123 shadowOf(subscriptionManager).addOnSubscriptionsChangedListener(listener); 124 shadowOf(subscriptionManager).addOnSubscriptionsChangedListener(listener2); 125 126 shadowOf(subscriptionManager).removeOnSubscriptionsChangedListener(listener); 127 shadowOf(subscriptionManager) 128 .setActiveSubscriptionInfos( 129 SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo()); 130 131 assertThat(listener.subscriptionChangedCount).isEqualTo(1); 132 assertThat(listener2.subscriptionChangedCount).isEqualTo(2); 133 } 134 135 @Test hasOnSubscriptionsChangedListener_whenListenerNotExist_shouldReturnFalse()136 public void hasOnSubscriptionsChangedListener_whenListenerNotExist_shouldReturnFalse() { 137 DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener(); 138 139 assertThat(shadowOf(subscriptionManager).hasOnSubscriptionsChangedListener(listener)).isFalse(); 140 } 141 142 @Test hasOnSubscriptionsChangedListener_whenListenerExist_shouldReturnTrue()143 public void hasOnSubscriptionsChangedListener_whenListenerExist_shouldReturnTrue() { 144 DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener(); 145 shadowOf(subscriptionManager).addOnSubscriptionsChangedListener(listener); 146 147 assertThat(shadowOf(subscriptionManager).hasOnSubscriptionsChangedListener(listener)).isTrue(); 148 } 149 150 @Test getActiveSubscriptionInfo_shouldReturnInfoWithSubId()151 public void getActiveSubscriptionInfo_shouldReturnInfoWithSubId() { 152 SubscriptionInfo expectedSubscriptionInfo = 153 SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo(); 154 shadowOf(subscriptionManager).setActiveSubscriptionInfos(expectedSubscriptionInfo); 155 156 assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfo(123)) 157 .isSameInstanceAs(expectedSubscriptionInfo); 158 } 159 160 @Test getActiveSubscriptionInfo_shouldThrowExceptionWhenNoPermissions()161 public void getActiveSubscriptionInfo_shouldThrowExceptionWhenNoPermissions() { 162 shadowOf(subscriptionManager).setReadPhoneStatePermission(false); 163 assertThrows( 164 SecurityException.class, 165 () -> 166 shadowOf(subscriptionManager) 167 .getActiveSubscriptionInfo(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)); 168 } 169 170 @Test getActiveSubscriptionInfoList_shouldReturnInfoList()171 public void getActiveSubscriptionInfoList_shouldReturnInfoList() { 172 SubscriptionInfo expectedSubscriptionInfo = 173 SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo(); 174 shadowOf(subscriptionManager).setActiveSubscriptionInfos(expectedSubscriptionInfo); 175 176 assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfoList()) 177 .containsExactly(expectedSubscriptionInfo); 178 } 179 180 @Test getActiveSubscriptionInfoList_shouldThrowExceptionWhenNoPermissions()181 public void getActiveSubscriptionInfoList_shouldThrowExceptionWhenNoPermissions() { 182 shadowOf(subscriptionManager).setReadPhoneStatePermission(false); 183 assertThrows( 184 SecurityException.class, 185 () -> shadowOf(subscriptionManager).getActiveSubscriptionInfoList()); 186 } 187 188 @Test getActiveSubscriptionInfoForSimSlotIndex_shouldReturnInfoWithSlotIndex()189 public void getActiveSubscriptionInfoForSimSlotIndex_shouldReturnInfoWithSlotIndex() { 190 SubscriptionInfo expectedSubscriptionInfo = 191 SubscriptionInfoBuilder.newBuilder().setSimSlotIndex(123).buildSubscriptionInfo(); 192 shadowOf(subscriptionManager).setActiveSubscriptionInfos(expectedSubscriptionInfo); 193 194 assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfoForSimSlotIndex(123)) 195 .isSameInstanceAs(expectedSubscriptionInfo); 196 } 197 198 @Test getActiveSubscriptionInfoForSimSlotIndex_shouldThrowExceptionWhenNoPermissions()199 public void getActiveSubscriptionInfoForSimSlotIndex_shouldThrowExceptionWhenNoPermissions() { 200 shadowOf(subscriptionManager).setReadPhoneStatePermission(false); 201 assertThrows( 202 SecurityException.class, 203 () -> shadowOf(subscriptionManager).getActiveSubscriptionInfoForSimSlotIndex(123)); 204 } 205 206 @Test getActiveSubscriptionInfo_shouldReturnNullForNullList()207 public void getActiveSubscriptionInfo_shouldReturnNullForNullList() { 208 shadowOf(subscriptionManager).setActiveSubscriptionInfoList(null); 209 assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfo(123)).isNull(); 210 } 211 212 @Test getActiveSubscriptionInfo_shouldReturnNullForNullVarargsList()213 public void getActiveSubscriptionInfo_shouldReturnNullForNullVarargsList() { 214 shadowOf(subscriptionManager).setActiveSubscriptionInfos((SubscriptionInfo[]) null); 215 assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfo(123)).isNull(); 216 } 217 218 @Test getActiveSubscriptionInfo_shouldReturnNullForEmptyList()219 public void getActiveSubscriptionInfo_shouldReturnNullForEmptyList() { 220 shadowOf(subscriptionManager).setActiveSubscriptionInfos(); 221 assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfo(123)).isNull(); 222 } 223 224 @Test isNetworkRoaming_shouldReturnTrueIfSet()225 public void isNetworkRoaming_shouldReturnTrueIfSet() { 226 shadowOf(subscriptionManager).setNetworkRoamingStatus(123, /* isNetworkRoaming= */ true); 227 assertThat(shadowOf(subscriptionManager).isNetworkRoaming(123)).isTrue(); 228 } 229 230 /** Multi act-asserts are discouraged but here we are testing the set+unset. */ 231 @Test isNetworkRoaming_shouldReturnFalseIfUnset()232 public void isNetworkRoaming_shouldReturnFalseIfUnset() { 233 shadowOf(subscriptionManager).setNetworkRoamingStatus(123, /* isNetworkRoaming= */ true); 234 assertThat(shadowOf(subscriptionManager).isNetworkRoaming(123)).isTrue(); 235 236 shadowOf(subscriptionManager).setNetworkRoamingStatus(123, /* isNetworkRoaming= */ false); 237 assertThat(shadowOf(subscriptionManager).isNetworkRoaming(123)).isFalse(); 238 } 239 240 /** Multi act-asserts are discouraged but here we are testing the set+clear. */ 241 @Test isNetworkRoaming_shouldReturnFalseOnClear()242 public void isNetworkRoaming_shouldReturnFalseOnClear() { 243 shadowOf(subscriptionManager).setNetworkRoamingStatus(123, /* isNetworkRoaming= */ true); 244 assertThat(shadowOf(subscriptionManager).isNetworkRoaming(123)).isTrue(); 245 246 shadowOf(subscriptionManager).clearNetworkRoamingStatus(); 247 assertThat(shadowOf(subscriptionManager).isNetworkRoaming(123)).isFalse(); 248 } 249 250 @Test getActiveSubscriptionInfoCount_shouldReturnZeroIfActiveSubscriptionInfoListNotSet()251 public void getActiveSubscriptionInfoCount_shouldReturnZeroIfActiveSubscriptionInfoListNotSet() { 252 shadowOf(subscriptionManager).setActiveSubscriptionInfoList(null); 253 254 assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfoCount()).isEqualTo(0); 255 } 256 257 @Test getActiveSubscriptionInfoCount_shouldReturnSizeOfActiveSubscriptionInfosList()258 public void getActiveSubscriptionInfoCount_shouldReturnSizeOfActiveSubscriptionInfosList() { 259 SubscriptionInfo expectedSubscriptionInfo = 260 SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo(); 261 shadowOf(subscriptionManager).setActiveSubscriptionInfos(expectedSubscriptionInfo); 262 263 assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfoCount()).isEqualTo(1); 264 } 265 266 @Test getActiveSubscriptionInfoCountMax_returnsSubscriptionListCount()267 public void getActiveSubscriptionInfoCountMax_returnsSubscriptionListCount() { 268 SubscriptionInfo subscriptionInfo = 269 SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo(); 270 shadowOf(subscriptionManager).setActiveSubscriptionInfos(subscriptionInfo); 271 272 assertThat(subscriptionManager.getActiveSubscriptionInfoCountMax()).isEqualTo(1); 273 } 274 275 @Test getActiveSubscriptionInfoCountMax_nullInfoListIsZero()276 public void getActiveSubscriptionInfoCountMax_nullInfoListIsZero() { 277 shadowOf(subscriptionManager).setActiveSubscriptionInfoList(null); 278 279 assertThat(subscriptionManager.getActiveSubscriptionInfoCountMax()).isEqualTo(0); 280 } 281 282 @Test getActiveSubscriptionInfoCountMax_shouldThrowExceptionWhenNoPermissions()283 public void getActiveSubscriptionInfoCountMax_shouldThrowExceptionWhenNoPermissions() { 284 shadowOf(subscriptionManager).setReadPhoneStatePermission(false); 285 assertThrows( 286 SecurityException.class, () -> subscriptionManager.getActiveSubscriptionInfoCountMax()); 287 } 288 289 @Test 290 @Config(minSdk = O_MR1) getAccessibleSubscriptionInfoList()291 public void getAccessibleSubscriptionInfoList() { 292 SubscriptionInfo expectedSubscriptionInfo = 293 SubscriptionInfoBuilder.newBuilder().setId(123).setIsEmbedded(true).buildSubscriptionInfo(); 294 295 // Default 296 assertThat(shadowOf(subscriptionManager).getAccessibleSubscriptionInfoList()).isEmpty(); 297 298 // Null vararg 299 shadowOf(subscriptionManager).setAccessibleSubscriptionInfos(); 300 assertThat(shadowOf(subscriptionManager).getAccessibleSubscriptionInfoList()).isEmpty(); 301 302 // A specific subscription 303 shadowOf(subscriptionManager).setAccessibleSubscriptionInfos(expectedSubscriptionInfo); 304 assertThat(shadowOf(subscriptionManager).getAccessibleSubscriptionInfoList()) 305 .containsExactly(expectedSubscriptionInfo); 306 } 307 308 @Test 309 @Config(minSdk = O_MR1) setAccessibleSubscriptionInfoList_triggersSubscriptionsChanged()310 public void setAccessibleSubscriptionInfoList_triggersSubscriptionsChanged() { 311 DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener(); 312 subscriptionManager.addOnSubscriptionsChangedListener(listener); 313 // Invoked upon registration, but that's not important for this test 314 int initialInvocationCount = listener.subscriptionChangedCount; 315 316 shadowOf(subscriptionManager) 317 .setAccessibleSubscriptionInfos( 318 SubscriptionInfoBuilder.newBuilder() 319 .setId(123) 320 .setIsEmbedded(true) 321 .buildSubscriptionInfo()); 322 323 assertThat(listener.subscriptionChangedCount - initialInvocationCount).isEqualTo(1); 324 } 325 326 @Test getAvailableSubscriptionInfoList()327 public void getAvailableSubscriptionInfoList() { 328 SubscriptionInfo expectedSubscriptionInfo = 329 SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo(); 330 331 // default 332 assertThat(shadowOf(subscriptionManager).getAvailableSubscriptionInfoList()).isEmpty(); 333 334 // null condition 335 shadowOf(subscriptionManager).setAvailableSubscriptionInfos(); 336 assertThat(shadowOf(subscriptionManager).getAvailableSubscriptionInfoList()).isEmpty(); 337 338 // set a specific subscription 339 shadowOf(subscriptionManager).setAvailableSubscriptionInfos(expectedSubscriptionInfo); 340 assertThat(shadowOf(subscriptionManager).getAvailableSubscriptionInfoList()).hasSize(1); 341 assertThat(shadowOf(subscriptionManager).getAvailableSubscriptionInfoList().get(0)) 342 .isSameInstanceAs(expectedSubscriptionInfo); 343 } 344 345 @Test setAvailableSubscriptionInfoList_triggersSubscriptionsChanged()346 public void setAvailableSubscriptionInfoList_triggersSubscriptionsChanged() { 347 DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener(); 348 subscriptionManager.addOnSubscriptionsChangedListener(listener); 349 // Invoked upon registration, but that's not important for this test 350 int initialInvocationCount = listener.subscriptionChangedCount; 351 352 shadowOf(subscriptionManager) 353 .setAvailableSubscriptionInfos( 354 SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo()); 355 356 assertThat(listener.subscriptionChangedCount - initialInvocationCount).isEqualTo(1); 357 } 358 359 @Test 360 @Config(maxSdk = P) getPhoneId_shouldReturnPhoneIdIfSet()361 public void getPhoneId_shouldReturnPhoneIdIfSet() { 362 ShadowSubscriptionManager.putPhoneId(123, 456); 363 assertThat(SubscriptionManager.getPhoneId(123)).isEqualTo(456); 364 } 365 366 @Test 367 @Config(maxSdk = P) getPhoneId_shouldReturnInvalidIfNotSet()368 public void getPhoneId_shouldReturnInvalidIfNotSet() { 369 ShadowSubscriptionManager.putPhoneId(123, 456); 370 assertThat(SubscriptionManager.getPhoneId(456)) 371 .isEqualTo(ShadowSubscriptionManager.INVALID_PHONE_INDEX); 372 } 373 374 @Test 375 @Config(maxSdk = P) getPhoneId_shouldReturnInvalidIfRemoved()376 public void getPhoneId_shouldReturnInvalidIfRemoved() { 377 ShadowSubscriptionManager.putPhoneId(123, 456); 378 ShadowSubscriptionManager.removePhoneId(123); 379 assertThat(SubscriptionManager.getPhoneId(123)) 380 .isEqualTo(ShadowSubscriptionManager.INVALID_PHONE_INDEX); 381 } 382 383 @Test 384 @Config(maxSdk = P) getPhoneId_shouldReturnInvalidIfCleared()385 public void getPhoneId_shouldReturnInvalidIfCleared() { 386 ShadowSubscriptionManager.putPhoneId(123, 456); 387 ShadowSubscriptionManager.clearPhoneIds(); 388 assertThat(SubscriptionManager.getPhoneId(123)) 389 .isEqualTo(ShadowSubscriptionManager.INVALID_PHONE_INDEX); 390 } 391 392 @Test 393 @Config(maxSdk = P) getPhoneId_shouldReturnInvalidIfReset()394 public void getPhoneId_shouldReturnInvalidIfReset() { 395 ShadowSubscriptionManager.putPhoneId(123, 456); 396 ShadowSubscriptionManager.reset(); 397 assertThat(SubscriptionManager.getPhoneId(123)) 398 .isEqualTo(ShadowSubscriptionManager.INVALID_PHONE_INDEX); 399 } 400 401 @Test setMcc()402 public void setMcc() { 403 assertThat( 404 ShadowSubscriptionManager.SubscriptionInfoBuilder.newBuilder() 405 .setMcc("123") 406 .buildSubscriptionInfo() 407 .getMcc()) 408 .isEqualTo(123); 409 } 410 411 @Test setMnc()412 public void setMnc() { 413 assertThat( 414 ShadowSubscriptionManager.SubscriptionInfoBuilder.newBuilder() 415 .setMnc("123") 416 .buildSubscriptionInfo() 417 .getMnc()) 418 .isEqualTo(123); 419 } 420 421 @Test 422 @Config(minSdk = TIRAMISU) getPhoneNumber_phoneNumberNotSet_returnsEmptyString()423 public void getPhoneNumber_phoneNumberNotSet_returnsEmptyString() { 424 assertThat(subscriptionManager.getPhoneNumber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)) 425 .isEqualTo(""); 426 } 427 428 @Test 429 @Config(minSdk = TIRAMISU) getPhoneNumber_setPhoneNumber_returnsPhoneNumber()430 public void getPhoneNumber_setPhoneNumber_returnsPhoneNumber() { 431 shadowOf(subscriptionManager) 432 .setPhoneNumber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, "123"); 433 assertThat(subscriptionManager.getPhoneNumber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)) 434 .isEqualTo("123"); 435 } 436 437 @Test 438 @Config(minSdk = TIRAMISU) getPhoneNumber_shouldThrowExceptionWhenNoPermissions()439 public void getPhoneNumber_shouldThrowExceptionWhenNoPermissions() { 440 shadowOf(subscriptionManager).setReadPhoneNumbersPermission(false); 441 assertThrows( 442 SecurityException.class, 443 () -> 444 shadowOf(subscriptionManager) 445 .getPhoneNumber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)); 446 } 447 448 @Test 449 @Config(minSdk = TIRAMISU) getPhoneNumberWithSource_phoneNumberNotSet_returnsEmptyString()450 public void getPhoneNumberWithSource_phoneNumberNotSet_returnsEmptyString() { 451 assertThat( 452 subscriptionManager.getPhoneNumber( 453 SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, 454 SubscriptionManager.PHONE_NUMBER_SOURCE_UICC)) 455 .isEqualTo(""); 456 assertThat( 457 subscriptionManager.getPhoneNumber( 458 SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, 459 SubscriptionManager.PHONE_NUMBER_SOURCE_CARRIER)) 460 .isEqualTo(""); 461 assertThat( 462 subscriptionManager.getPhoneNumber( 463 SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, 464 SubscriptionManager.PHONE_NUMBER_SOURCE_IMS)) 465 .isEqualTo(""); 466 } 467 468 @Test 469 @Config(minSdk = TIRAMISU) getPhoneNumberWithSource_setPhoneNumber_returnsPhoneNumber()470 public void getPhoneNumberWithSource_setPhoneNumber_returnsPhoneNumber() { 471 shadowOf(subscriptionManager) 472 .setPhoneNumber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, "123"); 473 assertThat( 474 subscriptionManager.getPhoneNumber( 475 SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, 476 SubscriptionManager.PHONE_NUMBER_SOURCE_UICC)) 477 .isEqualTo("123"); 478 assertThat( 479 subscriptionManager.getPhoneNumber( 480 SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, 481 SubscriptionManager.PHONE_NUMBER_SOURCE_CARRIER)) 482 .isEqualTo("123"); 483 assertThat( 484 subscriptionManager.getPhoneNumber( 485 SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, 486 SubscriptionManager.PHONE_NUMBER_SOURCE_IMS)) 487 .isEqualTo("123"); 488 } 489 490 @Test 491 @Config(minSdk = Q) setIsOpportunistic_shouldReturnFalse()492 public void setIsOpportunistic_shouldReturnFalse() { 493 assertThat( 494 ShadowSubscriptionManager.SubscriptionInfoBuilder.newBuilder() 495 .setIsOpportunistic(false) 496 .buildSubscriptionInfo() 497 .isOpportunistic()) 498 .isFalse(); 499 } 500 501 @Test 502 @Config(minSdk = Q) setIsOpportunistic_shouldReturnTrue()503 public void setIsOpportunistic_shouldReturnTrue() { 504 assertThat( 505 ShadowSubscriptionManager.SubscriptionInfoBuilder.newBuilder() 506 .setIsOpportunistic(true) 507 .buildSubscriptionInfo() 508 .isOpportunistic()) 509 .isTrue(); 510 } 511 512 private static class DummySubscriptionsChangedListener 513 extends SubscriptionManager.OnSubscriptionsChangedListener { 514 private int subscriptionChangedCount; 515 516 @Override onSubscriptionsChanged()517 public void onSubscriptionsChanged() { 518 subscriptionChangedCount++; 519 } 520 } 521 } 522