19bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu/* 29c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu * Copyright (C) 2016 The Android Open Source Project 39bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu * 49bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu * Licensed under the Apache License, Version 2.0 (the "License"); 59bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu * you may not use this file except in compliance with the License. 69bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu * You may obtain a copy of the License at 79bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu * 89bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu * http://www.apache.org/licenses/LICENSE-2.0 99bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu * 109bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu * Unless required by applicable law or agreed to in writing, software 119bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu * distributed under the License is distributed on an "AS IS" BASIS, 129bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu * See the License for the specific language governing permissions and 149bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu * limitations under the License. 159bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu */ 169a2d68f18b4441404eaa4d1cb45d9b457915b234fionaxupackage com.android.internal.telephony.uicc; 179bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 189bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxuimport android.os.Handler; 199bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxuimport android.os.HandlerThread; 209bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxuimport android.os.Message; 219bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxuimport android.test.suitebuilder.annotation.SmallTest; 229bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 239bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxuimport org.junit.After; 249bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxuimport org.junit.Before; 259bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxuimport org.junit.Test; 269c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu 279a2d68f18b4441404eaa4d1cb45d9b457915b234fionaxuimport com.android.internal.telephony.TelephonyTest; 289bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxuimport com.android.internal.telephony.cat.CatService; 299bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxuimport org.mockito.ArgumentCaptor; 309bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxuimport org.mockito.Mock; 319bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxuimport static org.mockito.Mockito.*; 329bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 339bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxuimport static org.junit.Assert.assertEquals; 349bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxuimport static org.junit.Assert.assertFalse; 359bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxuimport static org.junit.Assert.assertNull; 369bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxuimport static org.junit.Assert.assertTrue; 37703e603fecd2a07e232afe1e2b277fd0a786237bfionaxuimport static com.android.internal.telephony.TelephonyTestUtils.waitForMs; 389bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 399c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yupublic class UiccCardTest extends TelephonyTest { 409bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu private UiccCard mUicccard; 419bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 429bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu public UiccCardTest() { 439bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu super(); 449bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu } 459bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 469bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu private IccIoResult mIccIoResult; 479c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu 489bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu private UiccCardHandlerThread mTestHandlerThread; 499bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu private Handler mHandler; 509bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu private static final int UICCCARD_UPDATE_CARD_STATE_EVENT = 1; 519bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu private static final int UICCCARD_UPDATE_CARD_APPLICATION_EVENT = 2; 529bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu private static final int UICCCARD_CARRIER_PRIVILEDGE_LOADED_EVENT = 3; 539bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu private static final int UICCCARD_ABSENT = 4; 549bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 559bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu @Mock 569bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu private CatService mCAT; 579bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu @Mock 589bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu private IccCardStatus mIccCardStatus; 599bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu @Mock 609bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu private Handler mMockedHandler; 619bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 629bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 639bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu private class UiccCardHandlerThread extends HandlerThread { 649bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 659bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu private UiccCardHandlerThread(String name) { 669bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu super(name); 679bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu } 689bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 699bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu @Override 709bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu public void onLooperPrepared() { 719bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mUicccard = new UiccCard(mContextFixture.getTestDouble(), 729bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mSimulatedCommands, mIccCardStatus); 739bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu /* create a custom handler for the Handler Thread */ 749bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mHandler = new Handler(mTestHandlerThread.getLooper()) { 759bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu @Override 769bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu public void handleMessage(Message msg) { 779bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu switch (msg.what) { 789bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu case UICCCARD_UPDATE_CARD_STATE_EVENT: 799bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu /* Upon handling this event, new CarrierPrivilegeRule 809bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu will be created with the looper of HandlerThread */ 819bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu logd("Update UICC Card State"); 829bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mUicccard.update(mContextFixture.getTestDouble(), 839bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mSimulatedCommands, mIccCardStatus); 849c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu setReady(true); 859bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu break; 869bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu case UICCCARD_UPDATE_CARD_APPLICATION_EVENT: 879bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu logd("Update UICC Card Applications"); 889bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mUicccard.update(mContextFixture.getTestDouble(), 899bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mSimulatedCommands, mIccCardStatus); 909c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu setReady(true); 919bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu break; 929bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu default: 939bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu logd("Unknown Event " + msg.what); 949bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu } 959bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu } 969bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu }; 979bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 989c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu setReady(true); 999bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu logd("create UiccCard"); 1009bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu } 1019bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu } 1029bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 1039bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu private IccCardApplicationStatus composeUiccApplicationStatus( 1049bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu IccCardApplicationStatus.AppType appType, 1059bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu IccCardApplicationStatus.AppState appState, String aid) { 1069bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu IccCardApplicationStatus mIccCardAppStatus = new IccCardApplicationStatus(); 1079bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardAppStatus.aid = aid; 1089bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardAppStatus.app_type = appType; 1099bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardAppStatus.app_state = appState; 1109bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardAppStatus.pin1 = mIccCardAppStatus.pin2 = 1119bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu IccCardStatus.PinState.PINSTATE_ENABLED_VERIFIED; 1129bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu return mIccCardAppStatus; 1139bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu } 1149bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 1159bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu @Before 1169bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu public void setUp() throws Exception { 1179c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu 1189c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu super.setUp(getClass().getSimpleName()); 1199bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu /* initially there are no application available */ 1209bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardStatus.mApplications = new IccCardApplicationStatus[]{}; 1219bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardStatus.mCdmaSubscriptionAppIndex = 1229bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardStatus.mImsSubscriptionAppIndex = 1239bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardStatus.mGsmUmtsSubscriptionAppIndex = -1; 1249c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu 1259bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccIoResult = new IccIoResult(0x90, 0x00, IccUtils.hexStringToBytes("FF40")); 1269bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mSimulatedCommands.setIccIoResultForApduLogicalChannel(mIccIoResult); 1279bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu /* starting the Handler Thread */ 1289bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mTestHandlerThread = new UiccCardHandlerThread(TAG); 1299bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mTestHandlerThread.start(); 1309bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 1319bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu waitUntilReady(); 1329c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu replaceInstance(UiccCard.class, "mCatService", mUicccard, mCAT); 1339c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu } 1349c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu 1359c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu @After 1369c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu public void tearDown() throws Exception { 137ae6e8f99bdb297f906d6dcdc0a385ba27eee47fdJack Yu mTestHandlerThread.quit(); 1389c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu super.tearDown(); 1399bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu } 1409bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 1419bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu @Test 1429bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu @SmallTest 1439bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu public void tesUiccCartdInfoSanity() { 1449bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu /* before update sanity test */ 145703e603fecd2a07e232afe1e2b277fd0a786237bfionaxu assertEquals(0, mUicccard.getNumApplications()); 1469bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu assertNull(mUicccard.getCardState()); 1479bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu assertNull(mUicccard.getUniversalPinState()); 1489bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu assertNull(mUicccard.getOperatorBrandOverride()); 1499bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu /* CarrierPrivilegeRule equals null, return true */ 1509bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu assertTrue(mUicccard.areCarrierPriviligeRulesLoaded()); 1519bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu for (IccCardApplicationStatus.AppType mAppType : 1529bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu IccCardApplicationStatus.AppType.values()) { 1539bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu assertFalse(mUicccard.isApplicationOnIcc(mAppType)); 1549bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu } 1559bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu } 1569bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 1579bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu @Test @SmallTest 1589bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu public void testUpdateUiccCardApplication() { 1599bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu /* update app status and index */ 1609bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu IccCardApplicationStatus cdmaApp = composeUiccApplicationStatus( 1619bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu IccCardApplicationStatus.AppType.APPTYPE_CSIM, 1629bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu IccCardApplicationStatus.AppState.APPSTATE_UNKNOWN, "0xA0"); 1639bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu IccCardApplicationStatus imsApp = composeUiccApplicationStatus( 1649bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu IccCardApplicationStatus.AppType.APPTYPE_ISIM, 1659bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu IccCardApplicationStatus.AppState.APPSTATE_UNKNOWN, "0xA1"); 1669bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu IccCardApplicationStatus umtsApp = composeUiccApplicationStatus( 1679bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu IccCardApplicationStatus.AppType.APPTYPE_USIM, 1689bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu IccCardApplicationStatus.AppState.APPSTATE_UNKNOWN, "0xA2"); 1699bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardStatus.mApplications = new IccCardApplicationStatus[]{cdmaApp, imsApp, umtsApp}; 1709bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardStatus.mCdmaSubscriptionAppIndex = 0; 1719bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardStatus.mImsSubscriptionAppIndex = 1; 1729bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardStatus.mGsmUmtsSubscriptionAppIndex = 2; 1739bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu Message mCardUpdate = mHandler.obtainMessage(UICCCARD_UPDATE_CARD_APPLICATION_EVENT); 1749c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu setReady(false); 1759bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mCardUpdate.sendToTarget(); 1769bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 1779bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu waitUntilReady(); 1789bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 179703e603fecd2a07e232afe1e2b277fd0a786237bfionaxu assertEquals(3, mUicccard.getNumApplications()); 1809bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu assertTrue(mUicccard.isApplicationOnIcc(IccCardApplicationStatus.AppType.APPTYPE_CSIM)); 1819bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu assertTrue(mUicccard.isApplicationOnIcc(IccCardApplicationStatus.AppType.APPTYPE_ISIM)); 1829bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu assertTrue(mUicccard.isApplicationOnIcc(IccCardApplicationStatus.AppType.APPTYPE_USIM)); 1839bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu } 1849bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 1859bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu @Test @SmallTest 1869bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu public void testUpdateUiccCardState() { 1879bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu int mChannelId = 1; 1889bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu /* set card as present */ 1899bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardStatus.mCardState = IccCardStatus.CardState.CARDSTATE_PRESENT; 1909bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu /* Mock open Channel ID 1 */ 1919bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mSimulatedCommands.setOpenChannelId(mChannelId); 1929bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu Message mCardUpdate = mHandler.obtainMessage(UICCCARD_UPDATE_CARD_STATE_EVENT); 1939c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu setReady(false); 1949bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mCardUpdate.sendToTarget(); 1959bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu /* try to create a new CarrierPrivilege, loading state -> loaded state */ 1969bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu /* wait till the async result and message delay */ 1979bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu waitUntilReady(); 1989bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 199703e603fecd2a07e232afe1e2b277fd0a786237bfionaxu assertEquals(IccCardStatus.CardState.CARDSTATE_PRESENT, mUicccard.getCardState()); 2009bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 201703e603fecd2a07e232afe1e2b277fd0a786237bfionaxu waitForMs(50); 2029bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 2039bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu assertTrue(mUicccard.areCarrierPriviligeRulesLoaded()); 2049bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu verify(mSimulatedCommandsVerifier, times(1)).iccOpenLogicalChannel(isA(String.class), 205c6676c9a97efb78950c8f71ca7330d0bb4b24efdAjay Nambi anyInt(), isA(Message.class)); 2069bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu verify(mSimulatedCommandsVerifier, times(1)).iccTransmitApduLogicalChannel( 2079bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu eq(mChannelId), anyInt(), anyInt(), anyInt(), anyInt(), anyInt(), anyString(), 2089bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu isA(Message.class) 2099bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu ); 2109bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu } 2119bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 2129bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu @Test @SmallTest 2139bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu public void testUpdateUiccCardPinState() { 2149bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardStatus.mUniversalPinState = IccCardStatus.PinState.PINSTATE_ENABLED_VERIFIED; 2159bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mUicccard.update(mContextFixture.getTestDouble(), mSimulatedCommands, mIccCardStatus); 216703e603fecd2a07e232afe1e2b277fd0a786237bfionaxu assertEquals(IccCardStatus.PinState.PINSTATE_ENABLED_VERIFIED, 217703e603fecd2a07e232afe1e2b277fd0a786237bfionaxu mUicccard.getUniversalPinState()); 2189bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu } 2199bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 2209bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu @Test @SmallTest 2219bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu public void testCarrierPriviledgeLoadedListener() { 2229bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mUicccard.registerForCarrierPrivilegeRulesLoaded(mMockedHandler, 2239bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu UICCCARD_CARRIER_PRIVILEDGE_LOADED_EVENT, null); 2249bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu ArgumentCaptor<Message> mCaptorMessage = ArgumentCaptor.forClass(Message.class); 2259c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu ArgumentCaptor<Long> mCaptorLong = ArgumentCaptor.forClass(Long.class); 2269bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu testUpdateUiccCardState(); 2279bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu verify(mMockedHandler, atLeast(1)).sendMessageDelayed(mCaptorMessage.capture(), 2289bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mCaptorLong.capture()); 2299bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu assertEquals(UICCCARD_CARRIER_PRIVILEDGE_LOADED_EVENT, mCaptorMessage.getValue().what); 2309bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu } 2319bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 2329bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu @Test @SmallTest 2339bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu public void testCardAbsentListener() { 2349bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mUicccard.registerForAbsent(mMockedHandler, UICCCARD_ABSENT, null); 2359bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu /* assume hotswap capable, avoid bootup on card removal */ 2369bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mContextFixture.putBooleanResource(com.android.internal.R.bool.config_hotswapCapable, true); 2379bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mSimulatedCommands.setRadioPower(true, null); 2389bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 2399bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu /* Mock Card State transition from card_present to card_absent */ 2409bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu logd("UICC Card Present update"); 2419bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardStatus.mCardState = IccCardStatus.CardState.CARDSTATE_PRESENT; 2429bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu Message mCardUpdate = mHandler.obtainMessage(UICCCARD_UPDATE_CARD_STATE_EVENT); 2439bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mCardUpdate.sendToTarget(); 244703e603fecd2a07e232afe1e2b277fd0a786237bfionaxu waitForMs(50); 2459bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 2469bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu logd("UICC Card absent update"); 2479bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mIccCardStatus.mCardState = IccCardStatus.CardState.CARDSTATE_ABSENT; 2489bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mUicccard.update(mContextFixture.getTestDouble(), mSimulatedCommands, mIccCardStatus); 249703e603fecd2a07e232afe1e2b277fd0a786237bfionaxu waitForMs(50); 2509bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu 2519bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu ArgumentCaptor<Message> mCaptorMessage = ArgumentCaptor.forClass(Message.class); 2529c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu ArgumentCaptor<Long> mCaptorLong = ArgumentCaptor.forClass(Long.class); 2539bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu verify(mMockedHandler, atLeast(1)).sendMessageDelayed(mCaptorMessage.capture(), 2549bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu mCaptorLong.capture()); 2559bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu assertEquals(UICCCARD_ABSENT, mCaptorMessage.getValue().what); 2569bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu } 2579bf2a9297d37cdba05b023189c7a10357d8b0eeefionaxu} 258