10a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan/* 29c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu * Copyright (C) 2016 The Android Open Source Project 30a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * 40a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * Licensed under the Apache License, Version 2.0 (the "License"); 50a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * you may not use this file except in compliance with the License. 60a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * You may obtain a copy of the License at 70a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * 80a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * http://www.apache.org/licenses/LICENSE-2.0 90a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * 100a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * Unless required by applicable law or agreed to in writing, software 110a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * distributed under the License is distributed on an "AS IS" BASIS, 120a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * See the License for the specific language governing permissions and 140a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * limitations under the License. 150a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan */ 160a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 170a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanpackage com.android.internal.telephony; 180a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 19802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static com.android.internal.telephony.CommandsInterface.CF_ACTION_ENABLE; 20802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static com.android.internal.telephony.CommandsInterface.CF_REASON_UNCONDITIONAL; 21802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static com.android.internal.telephony.TelephonyTestUtils.waitForMs; 22802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajan 23802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.junit.Assert.assertEquals; 24802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.junit.Assert.assertFalse; 25802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.junit.Assert.assertTrue; 26802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.junit.Assert.fail; 27802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Matchers.anyLong; 28802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Matchers.nullable; 29802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Mockito.anyBoolean; 30802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Mockito.anyInt; 31802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Mockito.atLeast; 32802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Mockito.doReturn; 33802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Mockito.eq; 3496170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liuimport static org.mockito.Mockito.mock; 3509e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Mengimport static org.mockito.Mockito.spy; 36802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Mockito.times; 37802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Mockito.verify; 38802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajan 39de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajanimport android.app.Activity; 40de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajanimport android.app.IApplicationThread; 41de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajanimport android.content.IIntentReceiver; 420a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport android.content.Intent; 4378867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajanimport android.content.SharedPreferences; 440a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport android.os.AsyncResult; 45de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajanimport android.os.Bundle; 46de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajanimport android.os.Handler; 470c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajanimport android.os.HandlerThread; 4832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanimport android.os.Message; 498b38cd985149b459969dd2ac9e8013d852dc6760Sooraj Sasindranimport android.os.Process; 508b38cd985149b459969dd2ac9e8013d852dc6760Sooraj Sasindranimport android.os.WorkSource; 5197b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajanimport android.preference.PreferenceManager; 52516010d13181808ca8205316a419b615e5a9fe5eShuoqimport android.support.test.filters.FlakyTest; 530a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport android.telephony.CarrierConfigManager; 540c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajanimport android.telephony.CellLocation; 550a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport android.telephony.ServiceState; 56d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajanimport android.telephony.SubscriptionManager; 570c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajanimport android.telephony.cdma.CdmaCellLocation; 580c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajanimport android.telephony.gsm.GsmCellLocation; 590a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport android.test.suitebuilder.annotation.SmallTest; 600a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 6114bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajanimport com.android.internal.telephony.test.SimulatedCommands; 62649c81576a5d145fffab05896f02b433612c2847Malcolm Chenimport com.android.internal.telephony.uicc.IccCardApplicationStatus; 63153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajanimport com.android.internal.telephony.uicc.IccException; 642d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajanimport com.android.internal.telephony.uicc.IccRecords; 6509e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Mengimport com.android.internal.telephony.uicc.UiccController; 66649c81576a5d145fffab05896f02b433612c2847Malcolm Chenimport com.android.internal.telephony.uicc.UiccProfile; 6796170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liuimport com.android.internal.telephony.uicc.UiccSlot; 680a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 690a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport org.junit.After; 700a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport org.junit.Before; 71802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport org.junit.Ignore; 720a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport org.junit.Test; 73153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajanimport org.mockito.ArgumentCaptor; 74de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajanimport org.mockito.Mock; 7509e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Mengimport org.mockito.Mockito; 76de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 77de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajanimport java.util.List; 7832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 7932b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajanpublic class GsmCdmaPhoneTest extends TelephonyTest { 80de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan @Mock 81de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan private Handler mTestHandler; 82de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 8332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan //mPhoneUnderTest 8432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan private GsmCdmaPhone mPhoneUT; 857e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan private GsmCdmaPhoneTestHandler mGsmCdmaPhoneTestHandler; 8614bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan 87de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan private static final int EVENT_EMERGENCY_CALLBACK_MODE_EXIT = 1; 88de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan private static final int EVENT_EMERGENCY_CALL_TOGGLE = 2; 89649c81576a5d145fffab05896f02b433612c2847Malcolm Chen private static final int EVENT_SET_ICC_LOCK_ENABLED = 3; 90de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 910c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan private class GsmCdmaPhoneTestHandler extends HandlerThread { 920c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 930c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan private GsmCdmaPhoneTestHandler(String name) { 940c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan super(name); 950c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan } 960c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 970c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan @Override 980c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan public void onLooperPrepared() { 99f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan mPhoneUT = new GsmCdmaPhone(mContext, mSimulatedCommands, mNotifier, true, 0, 100f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan PhoneConstants.PHONE_TYPE_GSM, mTelephonyComponentFactory); 10132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan setReady(true); 1020c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan } 1030c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan } 1040c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 1050c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan private void switchToGsm() { 106b9d551db1795b30598e2ce98cfae7106788c12d6fionaxu mSimulatedCommands.setVoiceRadioTech(ServiceState.RIL_RADIO_TECHNOLOGY_GSM); 10732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mPhoneUT.sendMessage(mPhoneUT.obtainMessage(GsmCdmaPhone.EVENT_VOICE_RADIO_TECH_CHANGED, 10832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan new AsyncResult(null, new int[]{ServiceState.RIL_RADIO_TECHNOLOGY_GSM}, null))); 1090c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan //wait for voice RAT to be updated 110153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan waitForMs(50); 111153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan assertEquals(PhoneConstants.PHONE_TYPE_GSM, mPhoneUT.getPhoneType()); 1120c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan } 1130c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 1140c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan private void switchToCdma() { 115b9d551db1795b30598e2ce98cfae7106788c12d6fionaxu mSimulatedCommands.setVoiceRadioTech(ServiceState.RIL_RADIO_TECHNOLOGY_IS95A); 11632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mPhoneUT.sendMessage(mPhoneUT.obtainMessage(GsmCdmaPhone.EVENT_VOICE_RADIO_TECH_CHANGED, 1170c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan new AsyncResult(null, new int[]{ServiceState.RIL_RADIO_TECHNOLOGY_IS95A}, null))); 1180c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan //wait for voice RAT to be updated 1193374f09335e5b7681af05a35dd7454b565f8bb72Jordan Liu waitForMs(100); 120153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan assertEquals(PhoneConstants.PHONE_TYPE_CDMA, mPhoneUT.getPhoneType()); 1210c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan } 1220a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 1230a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan @Before 1240a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public void setUp() throws Exception { 125ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajan super.setUp(getClass().getSimpleName()); 1260a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 1270a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan doReturn(false).when(mSST).isDeviceShuttingDown(); 1280c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 1297e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mGsmCdmaPhoneTestHandler = new GsmCdmaPhoneTestHandler(TAG); 1307e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mGsmCdmaPhoneTestHandler.start(); 1315d5ca33a24e6b73a48b575a0e1a5e790784d0bb7Amit Mahajan waitUntilReady(); 132153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan ArgumentCaptor<Integer> integerArgumentCaptor = ArgumentCaptor.forClass(Integer.class); 133153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan verify(mUiccController).registerForIccChanged(eq(mPhoneUT), integerArgumentCaptor.capture(), 134b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan nullable(Object.class)); 135153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan Message msg = Message.obtain(); 136153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan msg.what = integerArgumentCaptor.getValue(); 137153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan mPhoneUT.sendMessage(msg); 138153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan waitForMs(50); 1390a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 1400a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 1410a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan @After 1420a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public void tearDown() throws Exception { 143f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan mPhoneUT.removeCallbacksAndMessages(null); 14432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mPhoneUT = null; 145ae6e8f99bdb297f906d6dcdc0a385ba27eee47fdJack Yu mGsmCdmaPhoneTestHandler.quit(); 146f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan super.tearDown(); 1470a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 1480a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 149153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Test 150153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @SmallTest 1510a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public void testPhoneTypeSwitch() { 15232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertTrue(mPhoneUT.isPhoneTypeGsm()); 1530c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan switchToCdma(); 15432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertTrue(mPhoneUT.isPhoneTypeCdmaLte()); 1550a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 1560a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 157153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Test 158153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @SmallTest 1590a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public void testHandleActionCarrierConfigChanged() { 160e058dbf4b5b9e76cb70c10630f3d834821d751d1Amit Mahajan Intent intent = new Intent(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); 161e058dbf4b5b9e76cb70c10630f3d834821d751d1Amit Mahajan mContext.sendBroadcast(intent); 162e058dbf4b5b9e76cb70c10630f3d834821d751d1Amit Mahajan waitForMs(50); 163e058dbf4b5b9e76cb70c10630f3d834821d751d1Amit Mahajan verify(mSST, times(1)).pollState(); 164e058dbf4b5b9e76cb70c10630f3d834821d751d1Amit Mahajan 1650a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan // set voice radio tech in RIL to 1xRTT. ACTION_CARRIER_CONFIG_CHANGED should trigger a 1660a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan // query and change phone type 167ec334adf4017ca172f44612d01456e671f922344Amit Mahajan mSimulatedCommands.setVoiceRadioTech(ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT); 16832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertTrue(mPhoneUT.isPhoneTypeGsm()); 169f152b32a20be664788536a223b9ac7a52f69e4ddAmit Mahajan mContext.sendBroadcast(intent); 170153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan waitForMs(50); 17132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertTrue(mPhoneUT.isPhoneTypeCdmaLte()); 172e058dbf4b5b9e76cb70c10630f3d834821d751d1Amit Mahajan verify(mSST, times(2)).pollState(); 1730c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan } 1740c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 175153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Test 176153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @SmallTest 1770c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan public void testGetServiceState() { 1780c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan ServiceState serviceState = new ServiceState(); 1790c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan mSST.mSS = serviceState; 18032b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertEquals(serviceState, mPhoneUT.getServiceState()); 1810c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan } 1820c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 183153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Test 184153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @SmallTest 18509e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng public void testGetSubscriberIdForGsmPhone() { 18609e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng final String subscriberId = "123456789"; 18709e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng IccRecords iccRecords = Mockito.mock(IccRecords.class); 18809e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng doReturn(subscriberId).when(iccRecords).getIMSI(); 18909e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng doReturn(iccRecords).when(mUiccController) 19009e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng .getIccRecords(anyInt() /* phoneId */, eq(UiccController.APP_FAM_3GPP)); 19109e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng 19209e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng // Ensure the phone type is GSM 19309e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng GsmCdmaPhone spyPhone = spy(mPhoneUT); 19409e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng doReturn(false).when(spyPhone).isPhoneTypeCdma(); 19509e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng doReturn(false).when(spyPhone).isPhoneTypeCdmaLte(); 19609e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng doReturn(true).when(spyPhone).isPhoneTypeGsm(); 19709e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng 19809e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng assertEquals(subscriberId, spyPhone.getSubscriberId()); 19909e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng } 20009e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng 20109e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng @Test 20209e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng @SmallTest 20309e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng public void testGetSubscriberIdForCdmaLtePhone() { 20409e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng final String subscriberId = "abcdefghijk"; 20509e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng IccRecords iccRecords = Mockito.mock(IccRecords.class); 20609e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng doReturn(subscriberId).when(iccRecords).getIMSI(); 20709e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng doReturn(iccRecords).when(mUiccController) 20809e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng .getIccRecords(anyInt() /* phoneId */, eq(UiccController.APP_FAM_3GPP)); 20909e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng 21009e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng // Ensure the phone type is CdmaLte 21109e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng GsmCdmaPhone spyPhone = spy(mPhoneUT); 21209e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng doReturn(false).when(spyPhone).isPhoneTypeCdma(); 21309e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng doReturn(true).when(spyPhone).isPhoneTypeCdmaLte(); 21409e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng doReturn(false).when(spyPhone).isPhoneTypeGsm(); 21509e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng 21609e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng assertEquals(subscriberId, spyPhone.getSubscriberId()); 21709e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng } 21809e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng 21909e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng @Test 22009e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng @SmallTest 22109e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng public void testGetSubscriberIdForCdmaPhone() { 22209e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng final String subscriberId = "987654321"; 22309e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng doReturn(subscriberId).when(mSST).getImsi(); 22409e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng 22509e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng // Ensure the phone type is GSM 22609e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng GsmCdmaPhone spyPhone = spy(mPhoneUT); 22709e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng doReturn(true).when(spyPhone).isPhoneTypeCdma(); 22809e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng doReturn(false).when(spyPhone).isPhoneTypeCdmaLte(); 22909e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng doReturn(false).when(spyPhone).isPhoneTypeGsm(); 23009e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng 23109e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng assertEquals(subscriberId, spyPhone.getSubscriberId()); 23209e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng } 23309e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng 23409e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng @Test 23509e47aaeffc7f61b625e3e8a105b81cff99058fePengquan Meng @SmallTest 2360c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan public void testGetCellLocation() { 2370c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // GSM 2380c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan CellLocation cellLocation = new GsmCellLocation(); 2398b38cd985149b459969dd2ac9e8013d852dc6760Sooraj Sasindran WorkSource workSource = new WorkSource(Process.myUid(), 2408b38cd985149b459969dd2ac9e8013d852dc6760Sooraj Sasindran mContext.getPackageName()); 2418b38cd985149b459969dd2ac9e8013d852dc6760Sooraj Sasindran doReturn(cellLocation).when(mSST).getCellLocation(workSource); 2428b38cd985149b459969dd2ac9e8013d852dc6760Sooraj Sasindran assertEquals(cellLocation, mPhoneUT.getCellLocation(workSource)); 2430c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 2440c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // Switch to CDMA 2450c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan switchToCdma(); 2460c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 2470c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan CdmaCellLocation cdmaCellLocation = new CdmaCellLocation(); 2480c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan cdmaCellLocation.setCellLocationData(0, 0, 0, 0, 0); 2490c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan mSST.mCellLoc = cdmaCellLocation; 2500c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 251fd6ce6219b41f9735240b9d0665d27c32482abd1Amit Mahajan /* 252fd6ce6219b41f9735240b9d0665d27c32482abd1Amit Mahajan LOCATION_MODE is a special case in SettingsProvider. Adding the special handling in mock 253fd6ce6219b41f9735240b9d0665d27c32482abd1Amit Mahajan content provider is probably not worth the effort; it will also tightly couple tests with 254fd6ce6219b41f9735240b9d0665d27c32482abd1Amit Mahajan SettingsProvider implementation. 2550c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // LOCATION_MODE_ON 256fd6ce6219b41f9735240b9d0665d27c32482abd1Amit Mahajan Settings.Secure.putInt(mContext.getContentResolver(), 2570c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_HIGH_ACCURACY); 258fd6ce6219b41f9735240b9d0665d27c32482abd1Amit Mahajan waitForMs(50); 25932b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan CdmaCellLocation actualCellLocation = (CdmaCellLocation) mPhoneUT.getCellLocation(); 2600c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan assertEquals(0, actualCellLocation.getBaseStationLatitude()); 2610c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan assertEquals(0, actualCellLocation.getBaseStationLongitude()); 2620c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 2630c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // LOCATION_MODE_OFF 2640c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan Settings.Secure.putInt(TestApplication.getAppContext().getContentResolver(), 2650c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF); 266fd6ce6219b41f9735240b9d0665d27c32482abd1Amit Mahajan waitForMs(50); 267fd6ce6219b41f9735240b9d0665d27c32482abd1Amit Mahajan */ 268fd6ce6219b41f9735240b9d0665d27c32482abd1Amit Mahajan 269b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan CdmaCellLocation actualCellLocation = 270b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan (CdmaCellLocation) mPhoneUT.getCellLocation(workSource); 2710c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan assertEquals(CdmaCellLocation.INVALID_LAT_LONG, 2720c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan actualCellLocation.getBaseStationLatitude()); 2730c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan assertEquals(CdmaCellLocation.INVALID_LAT_LONG, 2740c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan actualCellLocation.getBaseStationLongitude()); 2750c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan } 2760c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 277153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Test 278153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @SmallTest 2790c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan public void testGetPhoneType() { 28032b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertEquals(PhoneConstants.PHONE_TYPE_GSM, mPhoneUT.getPhoneType()); 2810c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 2820c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // Switch to CDMA 2830c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan switchToCdma(); 2840c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 28532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertEquals(PhoneConstants.PHONE_TYPE_CDMA, mPhoneUT.getPhoneType()); 2860c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan } 2870c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 288153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Test 289153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @SmallTest 2900c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan public void testGetDataConnectionState() { 2910c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // There are several cases possible. Testing few of them for now. 2920c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // 1. GSM, getCurrentDataConnectionState != STATE_IN_SERVICE, apn != APN_TYPE_EMERGENCY 2930c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan doReturn(ServiceState.STATE_OUT_OF_SERVICE).when(mSST).getCurrentDataConnectionState(); 29432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertEquals(PhoneConstants.DataState.DISCONNECTED, mPhoneUT.getDataConnectionState( 2950c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan PhoneConstants.APN_TYPE_ALL)); 2960c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 2970c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // 2. GSM, getCurrentDataConnectionState != STATE_IN_SERVICE, apn = APN_TYPE_EMERGENCY, apn 2985452ccfc4d32fab9933bdcfe775c38f73d4e1b15Robert Greenwalt // not connected 2995452ccfc4d32fab9933bdcfe775c38f73d4e1b15Robert Greenwalt doReturn(DctConstants.State.IDLE).when(mDcTracker).getState( 3005452ccfc4d32fab9933bdcfe775c38f73d4e1b15Robert Greenwalt PhoneConstants.APN_TYPE_EMERGENCY); 30132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertEquals(PhoneConstants.DataState.DISCONNECTED, mPhoneUT.getDataConnectionState( 3020c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan PhoneConstants.APN_TYPE_EMERGENCY)); 3030c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 3040c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // 3. GSM, getCurrentDataConnectionState != STATE_IN_SERVICE, apn = APN_TYPE_EMERGENCY, 3055452ccfc4d32fab9933bdcfe775c38f73d4e1b15Robert Greenwalt // APN is connected, callTracker state = idle 3060c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan doReturn(DctConstants.State.CONNECTED).when(mDcTracker).getState( 3070c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan PhoneConstants.APN_TYPE_EMERGENCY); 3080c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan mCT.mState = PhoneConstants.State.IDLE; 30932b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertEquals(PhoneConstants.DataState.CONNECTED, mPhoneUT.getDataConnectionState( 3100c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan PhoneConstants.APN_TYPE_EMERGENCY)); 3110c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 3120c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // 3. GSM, getCurrentDataConnectionState != STATE_IN_SERVICE, apn = APN_TYPE_EMERGENCY, 3130c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // APN enabled and CONNECTED, callTracker state != idle, !isConcurrentVoiceAndDataAllowed 3140c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan mCT.mState = PhoneConstants.State.RINGING; 3150c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan doReturn(false).when(mSST).isConcurrentVoiceAndDataAllowed(); 31632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertEquals(PhoneConstants.DataState.SUSPENDED, mPhoneUT.getDataConnectionState( 3170c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan PhoneConstants.APN_TYPE_EMERGENCY)); 3180c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan } 3190c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 320153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Test 321153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @SmallTest 3220c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan public void testHandleInCallMmiCommands() { 3230a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan try { 3240c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // Switch to CDMA 3250c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan switchToCdma(); 3260c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 32732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertFalse(mPhoneUT.handleInCallMmiCommands("0")); 3280c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 3290c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // Switch to GSM 3300c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan switchToGsm(); 3310c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 3320c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan mCT.mForegroundCall = mGsmCdmaCall; 3330c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan mCT.mBackgroundCall = mGsmCdmaCall; 3340c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan mCT.mRingingCall = mGsmCdmaCall; 3350c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan doReturn(GsmCdmaCall.State.IDLE).when(mGsmCdmaCall).getState(); 3360c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 3370c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // !isInCall 33832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertFalse(mPhoneUT.handleInCallMmiCommands("0")); 3390c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 3400c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // isInCall 3410c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan doReturn(GsmCdmaCall.State.ACTIVE).when(mGsmCdmaCall).getState(); 34232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertTrue(mPhoneUT.handleInCallMmiCommands("0")); 3430c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 3440c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan // empty dialString 34532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertFalse(mPhoneUT.handleInCallMmiCommands("")); 34632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertFalse(mPhoneUT.handleInCallMmiCommands(null)); 3470c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan 3480c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan } catch (Exception e) { 3490c3ec24396bb8c21b4d89f743b626c13dd35ba7bAmit Mahajan fail(e.toString()); 3500a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 3510a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 3520a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 353153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Test 354153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @SmallTest 35532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan public void testDial() { 35632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan try { 35732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mSST.mSS = mServiceState; 35832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan doReturn(ServiceState.STATE_IN_SERVICE).when(mServiceState).getState(); 35932b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 36032b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mCT.mForegroundCall = mGsmCdmaCall; 36132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mCT.mBackgroundCall = mGsmCdmaCall; 36232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mCT.mRingingCall = mGsmCdmaCall; 36332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan doReturn(GsmCdmaCall.State.IDLE).when(mGsmCdmaCall).getState(); 36432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 365794af81014ba7d6d75d1e9cd11058addb3368dabHall Liu Connection connection = mPhoneUT.dial("1234567890", 366794af81014ba7d6d75d1e9cd11058addb3368dabHall Liu new PhoneInternalInterface.DialArgs.Builder().build()); 36732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan verify(mCT).dial("1234567890", null, null); 368153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan } catch (CallStateException e) { 36932b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan fail(); 37032b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan } 37132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan } 37232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 373153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Test 374153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @SmallTest 37532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan public void testHandlePinMmi() { 37632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan assertFalse(mPhoneUT.handlePinMmi("1234567890")); 37732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan } 37832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 379153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Test 380153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @SmallTest 38132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan public void testSendBurstDtmf() { 38232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan //Should do nothing for GSM 38332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mPhoneUT.sendBurstDtmf("1234567890", 0, 0, null); 384b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan verify(mSimulatedCommandsVerifier, times(0)).sendBurstDtmf(nullable(String.class), anyInt(), 385b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan anyInt(), nullable(Message.class)); 38632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 38732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan switchToCdma(); 38832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan //invalid character 38932b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mPhoneUT.sendBurstDtmf("12345a67890", 0, 0, null); 390b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan verify(mSimulatedCommandsVerifier, times(0)).sendBurstDtmf(nullable(String.class), anyInt(), 391b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan anyInt(), nullable(Message.class)); 39232b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 39332b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan //state IDLE 39432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mCT.mState = PhoneConstants.State.IDLE; 39532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mPhoneUT.sendBurstDtmf("1234567890", 0, 0, null); 396b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan verify(mSimulatedCommandsVerifier, times(0)).sendBurstDtmf(nullable(String.class), anyInt(), 397b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan anyInt(), nullable(Message.class)); 39832b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 39932b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan //state RINGING 40032b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mCT.mState = PhoneConstants.State.RINGING; 40132b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mPhoneUT.sendBurstDtmf("1234567890", 0, 0, null); 402b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan verify(mSimulatedCommandsVerifier, times(0)).sendBurstDtmf(nullable(String.class), anyInt(), 403b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan anyInt(), nullable(Message.class)); 40432b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan 40532b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mCT.mState = PhoneConstants.State.OFFHOOK; 40632b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan mPhoneUT.sendBurstDtmf("1234567890", 0, 0, null); 40732b5fbb1a340fa16e2c37c276517ef10a4934500Amit Mahajan verify(mSimulatedCommandsVerifier).sendBurstDtmf("1234567890", 0, 0, null); 4080a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 40978867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan 410153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Test 411153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @SmallTest 412153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan public void testVoiceMailNumberGsm() { 41378867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan String voiceMailNumber = "1234567890"; 41478867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan // first test for GSM 41578867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan assertEquals(PhoneConstants.PHONE_TYPE_GSM, mPhoneUT.getPhoneType()); 41678867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan 417153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan // no resource or sharedPreference set -- should be null 418153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan assertEquals(null, mPhoneUT.getVoiceMailNumber()); 419153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan 420153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan // voicemail number from config 421f271e16613936c9f9600f20ae88cd9b865b88c6aJordan Liu mContextFixture.getCarrierConfigBundle(). 422f271e16613936c9f9600f20ae88cd9b865b88c6aJordan Liu putString(CarrierConfigManager.KEY_DEFAULT_VM_NUMBER_STRING, voiceMailNumber); 423153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan assertEquals(voiceMailNumber, mPhoneUT.getVoiceMailNumber()); 424153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan 425960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang // voicemail number from config for roaming network 426960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang String voiceMailNumberForRoaming = "1234567892"; 427960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang mContextFixture.getCarrierConfigBundle() 428960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang .putString(CarrierConfigManager.KEY_DEFAULT_VM_NUMBER_ROAMING_STRING, 429960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang voiceMailNumberForRoaming); 430960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang //Verify voicemail number for home 431960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang doReturn(false).when(mSST.mSS).getRoaming(); 432960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang assertEquals(voiceMailNumber, mPhoneUT.getVoiceMailNumber()); 433960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang //Move to roaming condition, verify voicemail number for roaming 434960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang doReturn(true).when(mSST.mSS).getRoaming(); 435960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang assertEquals(voiceMailNumberForRoaming, mPhoneUT.getVoiceMailNumber()); 436960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang //Move to home condition, verify voicemail number for home 437960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang doReturn(false).when(mSST.mSS).getRoaming(); 438960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang assertEquals(voiceMailNumber, mPhoneUT.getVoiceMailNumber()); 439960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang 440153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan // voicemail number that is explicitly set 441153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan voiceMailNumber = "1234567891"; 44278867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan mPhoneUT.setVoiceMailNumber("alphaTag", voiceMailNumber, null); 443153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan verify(mSimRecords).setVoiceMailNumber(eq("alphaTag"), eq(voiceMailNumber), 444b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan nullable(Message.class)); 44578867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan 446153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan doReturn(voiceMailNumber).when(mSimRecords).getVoiceMailNumber(); 447153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan assertEquals(voiceMailNumber, mPhoneUT.getVoiceMailNumber()); 448153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan } 44978867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan 450153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @Test 451153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan @SmallTest 452153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan public void testVoiceMailNumberCdma() { 45378867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan switchToCdma(); 454153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan String voiceMailNumber = "1234567890"; 455153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan 456153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan // no resource or sharedPreference set -- should be *86 457153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan assertEquals("*86", mPhoneUT.getVoiceMailNumber()); 458153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan 459153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan // config_telephony_use_own_number_for_voicemail 460ad7647e78288747bd50ff5a8ad33dd39ddc2c9a4Cassie mContextFixture.getCarrierConfigBundle() 461ad7647e78288747bd50ff5a8ad33dd39ddc2c9a4Cassie .putBoolean(CarrierConfigManager 462ad7647e78288747bd50ff5a8ad33dd39ddc2c9a4Cassie .KEY_CONFIG_TELEPHONY_USE_OWN_NUMBER_FOR_VOICEMAIL_BOOL, true); 4630cf8dcd827da174a7d7f366aa8caa5dd29206ea1Amit Mahajan doReturn(voiceMailNumber).when(mSST).getMdnNumber(); 464153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan assertEquals(voiceMailNumber, mPhoneUT.getVoiceMailNumber()); 46578867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan 466153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan // voicemail number from config 467153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan voiceMailNumber = "1234567891"; 468f271e16613936c9f9600f20ae88cd9b865b88c6aJordan Liu mContextFixture.getCarrierConfigBundle(). 469f271e16613936c9f9600f20ae88cd9b865b88c6aJordan Liu putString(CarrierConfigManager.KEY_DEFAULT_VM_NUMBER_STRING, voiceMailNumber); 470153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan assertEquals(voiceMailNumber, mPhoneUT.getVoiceMailNumber()); 471153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan 472960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang // voicemail number from config for roaming network 473960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang String voiceMailNumberForRoaming = "1234567892"; 474960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang mContextFixture.getCarrierConfigBundle() 475960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang .putString(CarrierConfigManager.KEY_DEFAULT_VM_NUMBER_ROAMING_STRING, 476960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang voiceMailNumberForRoaming); 477960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang //Verify voicemail number for home 478960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang doReturn(false).when(mSST.mSS).getRoaming(); 479960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang assertEquals(voiceMailNumber, mPhoneUT.getVoiceMailNumber()); 480960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang //Move to roaming condition, verify voicemail number for roaming 481960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang doReturn(true).when(mSST.mSS).getRoaming(); 482960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang assertEquals(voiceMailNumberForRoaming, mPhoneUT.getVoiceMailNumber()); 483960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang //Move to home condition, verify voicemail number for home 484960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang doReturn(false).when(mSST.mSS).getRoaming(); 485960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang assertEquals(voiceMailNumber, mPhoneUT.getVoiceMailNumber()); 486960cd06cffdd03988e90dec325e07baf814ce7d4SongFerngWang 487153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan // voicemail number from sharedPreference 48878867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan mPhoneUT.setVoiceMailNumber("alphaTag", voiceMailNumber, null); 489153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 490153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan verify(mRuimRecords).setVoiceMailNumber(eq("alphaTag"), eq(voiceMailNumber), 491153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan messageArgumentCaptor.capture()); 49278867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan 493153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan Message msg = messageArgumentCaptor.getValue(); 494153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan AsyncResult.forMessage(msg).exception = 495153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan new IccException("setVoiceMailNumber not implemented"); 496153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan msg.sendToTarget(); 497153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan waitForMs(50); 49878867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan 499153077e0b2d9ff6f115a0739dac1d64931bffb91Amit Mahajan assertEquals(voiceMailNumber, mPhoneUT.getVoiceMailNumber()); 50078867803826b15ff95c8ee8c7c6f65dfb7ad258fAmit Mahajan } 50197b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan 502516010d13181808ca8205316a419b615e5a9fe5eShuoq @FlakyTest 50397b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan @Test 504802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajan @Ignore 50597b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan public void testVoiceMailCount() { 50697b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan // initial value 50797b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan assertEquals(0, mPhoneUT.getVoiceMessageCount()); 50897b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan 50997b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan // old sharedPreference set (testing upgrade from M to N scenario) 51097b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan SharedPreferences sharedPreferences = 51197b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan PreferenceManager.getDefaultSharedPreferences(mContext); 51297b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan SharedPreferences.Editor editor = sharedPreferences.edit(); 51397b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan String imsi = "1234567890"; 51497b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan editor.putString("vm_id_key", imsi); 51597b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan editor.putInt("vm_count_key", 5); 51697b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan editor.apply(); 51797b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan doReturn(imsi).when(mSimRecords).getIMSI(); 51897b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan 51997b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan // updateVoiceMail should read old shared pref and delete it and new sharedPref should be 52097b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan // updated now 52197b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan doReturn(-1).when(mSimRecords).getVoiceMessageCount(); 52297b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan mPhoneUT.updateVoiceMail(); 52397b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan assertEquals(5, mPhoneUT.getVoiceMessageCount()); 52497b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan assertEquals(null, sharedPreferences.getString("vm_id_key", null)); 52597b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan assertEquals(5, sharedPreferences.getInt("vm_count_key" + mPhoneUT.getSubId(), 0)); 52697b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan 52797b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan // sim records return count as 0, that overrides shared preference 52897b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan doReturn(0).when(mSimRecords).getVoiceMessageCount(); 52997b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan mPhoneUT.updateVoiceMail(); 53097b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan assertEquals(0, mPhoneUT.getVoiceMessageCount()); 53197b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan 53297b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan // sim records return count as -1 53397b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan doReturn(-1).when(mSimRecords).getVoiceMessageCount(); 53497b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan mPhoneUT.updateVoiceMail(); 53597b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan assertEquals(-1, mPhoneUT.getVoiceMessageCount()); 53697b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan 53797b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan // sim records return count as -1 and sharedPreference says 0 53897b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan mPhoneUT.setVoiceMessageCount(0); 53997b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan mPhoneUT.updateVoiceMail(); 54097b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan assertEquals(-1, mPhoneUT.getVoiceMessageCount()); 54197b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan 54297b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan // sim records return count as -1 and sharedPreference says 2 54397b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan mPhoneUT.setVoiceMessageCount(2); 54497b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan mPhoneUT.updateVoiceMail(); 54597b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan assertEquals(2, mPhoneUT.getVoiceMessageCount()); 54697b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan 54797b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan // sim records return count as 0 and sharedPreference says 2 54897b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan doReturn(0).when(mSimRecords).getVoiceMessageCount(); 54997b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan mPhoneUT.setVoiceMessageCount(2); 55097b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan mPhoneUT.updateVoiceMail(); 55197b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan assertEquals(0, mPhoneUT.getVoiceMessageCount()); 55297b3c4e45f156d8d5ae25a32357c9b31e018da32Amit Mahajan } 5532d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan 5542d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan @Test 5552d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan @SmallTest 5562d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan public void testGetCallForwardingOption() { 5572d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan // invalid reason (-1) 5582d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan mPhoneUT.getCallForwardingOption(-1, null); 5592d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan verify(mSimulatedCommandsVerifier, times(0)).queryCallForwardStatus( 560b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan anyInt(), anyInt(), nullable(String.class), nullable(Message.class)); 5612d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan 5622d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan // valid reason 5632d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan String imsi = "1234567890"; 5642d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan doReturn(imsi).when(mSimRecords).getIMSI(); 5652d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan mPhoneUT.getCallForwardingOption(CF_REASON_UNCONDITIONAL, null); 5662d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan verify(mSimulatedCommandsVerifier).queryCallForwardStatus( 5672e1b5b9d9fbbbe634229bd615293a6ef74d00d4aTyler Gunn eq(CF_REASON_UNCONDITIONAL), eq(CommandsInterface.SERVICE_CLASS_VOICE), 5682e1b5b9d9fbbbe634229bd615293a6ef74d00d4aTyler Gunn nullable(String.class), nullable(Message.class)); 5692d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan waitForMs(50); 570b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan verify(mSimRecords).setVoiceCallForwardingFlag(anyInt(), anyBoolean(), 571b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan nullable(String.class)); 5722d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan 5732d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan // should have updated shared preferences 5742d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan SharedPreferences sharedPreferences = PreferenceManager. 5752d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan getDefaultSharedPreferences(mContext); 5762d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan assertEquals(IccRecords.CALL_FORWARDING_STATUS_DISABLED, 577d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan sharedPreferences.getInt(Phone.CF_STATUS + mPhoneUT.getSubId(), 5782d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan IccRecords.CALL_FORWARDING_STATUS_ENABLED)); 579d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan 580d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan // clean up 581d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan SharedPreferences.Editor editor = sharedPreferences.edit(); 582d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan editor.remove(Phone.CF_STATUS + mPhoneUT.getSubId()); 583d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan editor.apply(); 5842d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan } 5852d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan 5862d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan @Test 5872d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan @SmallTest 5882d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan public void testSetCallForwardingOption() { 5892d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan String cfNumber = "1234567890"; 5902d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan 5912d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan // invalid action 5922d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan mPhoneUT.setCallForwardingOption(-1, CF_REASON_UNCONDITIONAL, 5932d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan cfNumber, 0, null); 5942d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan verify(mSimulatedCommandsVerifier, times(0)).setCallForward(anyInt(), anyInt(), anyInt(), 595b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan nullable(String.class), anyInt(), nullable(Message.class)); 5962d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan 5972d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan // valid action 5982d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan mPhoneUT.setCallForwardingOption(CF_ACTION_ENABLE, CF_REASON_UNCONDITIONAL, cfNumber, 0, 5992d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan null); 6002d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan verify(mSimulatedCommandsVerifier).setCallForward(eq(CF_ACTION_ENABLE), 601b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan eq(CF_REASON_UNCONDITIONAL), anyInt(), eq(cfNumber), eq(0), 602b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan nullable(Message.class)); 6032d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan waitForMs(50); 6042d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan verify(mSimRecords).setVoiceCallForwardingFlag(anyInt(), anyBoolean(), eq(cfNumber)); 6052d6df73e3bebb7d6aebd628730b9d20b23f1637aAmit Mahajan } 60614bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan 60714bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan /** 60814bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan * GsmCdmaPhone handles a lot of messages. This function verifies behavior for messages that are 60914bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan * received when obj is created and that are received on phone type switch 61014bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan */ 611516010d13181808ca8205316a419b615e5a9fe5eShuoq @FlakyTest 612cc940f429180765b6072a071becae8117e665954Amit Mahajan @Ignore 61314bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan @Test 61414bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan @SmallTest 61514bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan public void testHandleInitialMessages() { 61614bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan // EVENT_RADIO_AVAILABLE 617b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan verify(mSimulatedCommandsVerifier).getBasebandVersion(nullable(Message.class)); 618b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan verify(mSimulatedCommandsVerifier).getDeviceIdentity(nullable(Message.class)); 619b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan verify(mSimulatedCommandsVerifier).getRadioCapability(nullable(Message.class)); 62014bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan // once as part of constructor, and once on radio available 62114bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan verify(mSimulatedCommandsVerifier, times(2)).startLceService(anyInt(), anyBoolean(), 622b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan nullable(Message.class)); 62314bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan 62414bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan // EVENT_RADIO_ON 625b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan verify(mSimulatedCommandsVerifier).getVoiceRadioTechnology(nullable(Message.class)); 62614bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan verify(mSimulatedCommandsVerifier).setPreferredNetworkType( 627b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan eq(RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA), nullable(Message.class)); 62814bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan 62914bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan // verify responses for above requests: 63014bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan // baseband version 63114bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan verify(mTelephonyManager).setBasebandVersionForPhone(eq(mPhoneUT.getPhoneId()), 632b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan nullable(String.class)); 63314bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan // IMEI 63414bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan assertEquals(SimulatedCommands.FAKE_IMEI, mPhoneUT.getImei()); 63514bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan // IMEISV 63614bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan assertEquals(SimulatedCommands.FAKE_IMEISV, mPhoneUT.getDeviceSvn()); 63714bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan // radio capability 638b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan verify(mSimulatedCommandsVerifier).getNetworkSelectionMode(nullable(Message.class)); 63914bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan 64014bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan switchToCdma(); // this leads to eventRadioAvailable handling on cdma 64114bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan 64214bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan // EVENT_RADIO_AVAILABLE 643b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan verify(mSimulatedCommandsVerifier, times(2)).getBasebandVersion(nullable(Message.class)); 644b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan verify(mSimulatedCommandsVerifier, times(2)).getDeviceIdentity(nullable(Message.class)); 64514bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan verify(mSimulatedCommandsVerifier, times(3)).startLceService(anyInt(), anyBoolean(), 646b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan nullable(Message.class)); 64714bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan 64814bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan // EVENT_RADIO_ON 649b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan verify(mSimulatedCommandsVerifier, times(2)).getVoiceRadioTechnology( 650b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan nullable(Message.class)); 65114bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan // once on radio on, and once on get baseband version 65214bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan verify(mSimulatedCommandsVerifier, times(3)).setPreferredNetworkType( 653b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan eq(RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA), nullable(Message.class)); 65414bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan 65514bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan // verify responses for above requests: 65614bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan // baseband version 65714bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan verify(mTelephonyManager, times(2)).setBasebandVersionForPhone(eq(mPhoneUT.getPhoneId()), 658b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan nullable(String.class)); 65914bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan // device identity 66014bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan assertEquals(SimulatedCommands.FAKE_IMEI, mPhoneUT.getImei()); 66114bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan assertEquals(SimulatedCommands.FAKE_IMEISV, mPhoneUT.getDeviceSvn()); 66214bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan assertEquals(SimulatedCommands.FAKE_ESN, mPhoneUT.getEsn()); 66314bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan assertEquals(SimulatedCommands.FAKE_MEID, mPhoneUT.getMeid()); 66414bdfdca7a5412edf5fbdd6573e0f608233a5ae8Amit Mahajan } 665de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 666de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan @Test 667de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan @SmallTest 668de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan public void testEmergencyCallbackMessages() { 669de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan verify(mSimulatedCommandsVerifier).setEmergencyCallbackMode(eq(mPhoneUT), anyInt(), 670b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan nullable(Object.class)); 671de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan verify(mSimulatedCommandsVerifier).registerForExitEmergencyCallbackMode(eq(mPhoneUT), 672b1fdcf01045090315c5b91d7539007d79f34c9ecAmit Mahajan anyInt(), nullable(Object.class)); 673de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 674de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan // verify handling of emergency callback mode 675de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan mSimulatedCommands.notifyEmergencyCallbackMode(); 676de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan waitForMs(50); 677de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 678de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan // verify ACTION_EMERGENCY_CALLBACK_MODE_CHANGED 679de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); 680de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan try { 68144fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla verify(mIActivityManager, atLeast(1)).broadcastIntent(eq((IApplicationThread) null), 682de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan intentArgumentCaptor.capture(), 68344fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((String) null), 68444fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((IIntentReceiver) null), 685de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan eq(Activity.RESULT_OK), 68644fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((String) null), 68744fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((Bundle) null), 68844fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((String[]) null), 689de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan anyInt(), 69044fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((Bundle) null), 691de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan eq(false), 692de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan eq(true), 693de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan anyInt()); 694de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan } catch(Exception e) { 695de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan fail("Unexpected exception: " + e.getStackTrace()); 696de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan } 697de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 698de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan Intent intent = intentArgumentCaptor.getValue(); 699de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan assertEquals(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED, intent.getAction()); 700de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan assertEquals(true, intent.getBooleanExtra(PhoneConstants.PHONE_IN_ECM_STATE, false)); 70144fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla assertEquals(true, mPhoneUT.isInEcm()); 702de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 703de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan // verify that wakeLock is acquired in ECM 704de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan assertEquals(true, mPhoneUT.getWakeLock().isHeld()); 705de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 706de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan mPhoneUT.setOnEcbModeExitResponse(mTestHandler, EVENT_EMERGENCY_CALLBACK_MODE_EXIT, null); 707de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan mPhoneUT.registerForEmergencyCallToggle(mTestHandler, EVENT_EMERGENCY_CALL_TOGGLE, null); 708de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 709de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan // verify handling of emergency callback mode exit 710de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan mSimulatedCommands.notifyExitEmergencyCallbackMode(); 711de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan waitForMs(50); 712de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 713de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan // verify ACTION_EMERGENCY_CALLBACK_MODE_CHANGED 714de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan try { 71544fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla verify(mIActivityManager, atLeast(2)).broadcastIntent(eq((IApplicationThread) null), 716de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan intentArgumentCaptor.capture(), 71744fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((String) null), 71844fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((IIntentReceiver) null), 719de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan eq(Activity.RESULT_OK), 72044fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((String) null), 72144fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((Bundle) null), 72244fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((String[]) null), 723de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan anyInt(), 72444fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((Bundle) null), 725de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan eq(false), 726de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan eq(true), 727de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan anyInt()); 728de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan } catch(Exception e) { 729de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan fail("Unexpected exception: " + e.getStackTrace()); 730de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan } 731de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 732de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan intent = intentArgumentCaptor.getValue(); 733de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan assertEquals(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED, intent.getAction()); 734de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan assertEquals(false, intent.getBooleanExtra(PhoneConstants.PHONE_IN_ECM_STATE, true)); 73544fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla assertEquals(false, mPhoneUT.isInEcm()); 73644fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla 73744fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 73844fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla 73944fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla // verify EcmExitRespRegistrant and mEmergencyCallToggledRegistrants are notified 74044fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla verify(mTestHandler, times(2)).sendMessageAtTime(messageArgumentCaptor.capture(), 74144fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla anyLong()); 74244fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla List<Message> msgList = messageArgumentCaptor.getAllValues(); 74344fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla assertEquals(EVENT_EMERGENCY_CALLBACK_MODE_EXIT, msgList.get(0).what); 74444fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla assertEquals(EVENT_EMERGENCY_CALL_TOGGLE, msgList.get(1).what); 74544fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla 74644fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla // verify setInternalDataEnabled 74744fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla verify(mDcTracker).setInternalDataEnabled(true); 74844fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla 74944fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla // verify wakeLock released 75044fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla assertEquals(false, mPhoneUT.getWakeLock().isHeld()); 75144fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla } 75244fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla 75344fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla @Test 75444fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla @SmallTest 75544fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla public void testModemResetInEmergencyCallbackMessages() { 75644fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla verify(mSimulatedCommandsVerifier).setEmergencyCallbackMode(eq(mPhoneUT), anyInt(), 75744fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla nullable(Object.class)); 75844fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla verify(mSimulatedCommandsVerifier).registerForModemReset(eq(mPhoneUT), 75944fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla anyInt(), nullable(Object.class)); 76044fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla 76144fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla switchToCdma(); 76244fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla // verify handling of emergency callback mode 76344fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla mSimulatedCommands.notifyEmergencyCallbackMode(); 76444fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla waitForMs(50); 76544fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla 76644fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla // verify ACTION_EMERGENCY_CALLBACK_MODE_CHANGED 76744fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); 76844fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla try { 76944fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla verify(mIActivityManager, atLeast(1)).broadcastIntent(eq((IApplicationThread) null), 77044fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla intentArgumentCaptor.capture(), 77144fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((String) null), 77244fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((IIntentReceiver) null), 77344fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq(Activity.RESULT_OK), 77444fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((String) null), 77544fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((Bundle) null), 77644fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((String[]) null), 77744fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla anyInt(), 77844fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((Bundle) null), 77944fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq(false), 78044fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq(true), 78144fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla anyInt()); 78244fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla } catch (Exception e) { 78344fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla fail("Unexpected exception: " + e.getStackTrace()); 78444fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla } 78544fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla 78644fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla Intent intent = intentArgumentCaptor.getValue(); 78744fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla assertEquals(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED, intent.getAction()); 78844fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla assertEquals(true, intent.getBooleanExtra(PhoneConstants.PHONE_IN_ECM_STATE, false)); 78944fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla assertEquals(true, mPhoneUT.isInEcm()); 79044fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla 79144fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla // verify that wakeLock is acquired in ECM 79244fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla assertEquals(true, mPhoneUT.getWakeLock().isHeld()); 79344fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla 79444fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla mPhoneUT.setOnEcbModeExitResponse(mTestHandler, EVENT_EMERGENCY_CALLBACK_MODE_EXIT, null); 79544fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla mPhoneUT.registerForEmergencyCallToggle(mTestHandler, EVENT_EMERGENCY_CALL_TOGGLE, null); 79644fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla 79744fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla // verify handling of emergency callback mode exit when modem resets 79844fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla mSimulatedCommands.notifyModemReset(); 79944fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla waitForMs(50); 80044fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla 80144fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla // verify ACTION_EMERGENCY_CALLBACK_MODE_CHANGED 80244fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla try { 80344fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla verify(mIActivityManager, atLeast(2)).broadcastIntent(eq((IApplicationThread) null), 80444fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla intentArgumentCaptor.capture(), 80544fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((String) null), 80644fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((IIntentReceiver) null), 80744fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq(Activity.RESULT_OK), 80844fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((String) null), 80944fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((Bundle) null), 81044fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((String[]) null), 81144fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla anyInt(), 81244fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq((Bundle) null), 81344fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq(false), 81444fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla eq(true), 81544fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla anyInt()); 81644fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla } catch (Exception e) { 81744fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla fail("Unexpected exception: " + e.getStackTrace()); 81844fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla } 81944fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla 82044fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla intent = intentArgumentCaptor.getValue(); 82144fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla assertEquals(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED, intent.getAction()); 82244fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla assertEquals(false, intent.getBooleanExtra(PhoneConstants.PHONE_IN_ECM_STATE, true)); 82344fd6f60bc5aca75938a2c3e725f88b6e897983aNaveen Kalla assertEquals(false, mPhoneUT.isInEcm()); 824de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 825de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 826de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 827de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan // verify EcmExitRespRegistrant and mEmergencyCallToggledRegistrants are notified 828de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan verify(mTestHandler, times(2)).sendMessageAtTime(messageArgumentCaptor.capture(), 829de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan anyLong()); 830de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan List<Message> msgList = messageArgumentCaptor.getAllValues(); 831de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan assertEquals(EVENT_EMERGENCY_CALLBACK_MODE_EXIT, msgList.get(0).what); 832de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan assertEquals(EVENT_EMERGENCY_CALL_TOGGLE, msgList.get(1).what); 833de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 834de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan // verify setInternalDataEnabled 835de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan verify(mDcTracker).setInternalDataEnabled(true); 836de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan 837de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan // verify wakeLock released 838de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan assertEquals(false, mPhoneUT.getWakeLock().isHeld()); 839de9c22e95d4e2797076db0c6b798e54f0638b7f0Amit Mahajan } 840d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan 841d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan @Test 842d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan @SmallTest 843d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan public void testCallForwardingIndicator() { 844d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan doReturn(IccRecords.CALL_FORWARDING_STATUS_UNKNOWN).when(mSimRecords). 845d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan getVoiceCallForwardingFlag(); 846d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan 847d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan // invalid subId 848d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan doReturn(SubscriptionManager.INVALID_SUBSCRIPTION_ID).when(mSubscriptionController). 849d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan getSubIdUsingPhoneId(anyInt()); 850d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan assertEquals(false, mPhoneUT.getCallForwardingIndicator()); 851d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan 852d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan // valid subId, sharedPreference not present 853d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan int subId1 = 0; 854d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan int subId2 = 1; 855d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan doReturn(subId1).when(mSubscriptionController).getSubIdUsingPhoneId(anyInt()); 856d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan assertEquals(false, mPhoneUT.getCallForwardingIndicator()); 857d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan 858d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan // old sharedPreference present 859d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan String imsi = "1234"; 860d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan doReturn(imsi).when(mSimRecords).getIMSI(); 861d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); 862d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan SharedPreferences.Editor editor = sp.edit(); 863d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan editor.putString(Phone.CF_ID, imsi); 864d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan editor.putInt(Phone.CF_STATUS, IccRecords.CALL_FORWARDING_STATUS_ENABLED); 865d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan editor.apply(); 866d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan assertEquals(true, mPhoneUT.getCallForwardingIndicator()); 867d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan 868d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan // old sharedPreference should be removed now 869d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan assertEquals(null, sp.getString(Phone.CF_ID, null)); 870d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan assertEquals(IccRecords.CALL_FORWARDING_STATUS_UNKNOWN, 871d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan sp.getInt(Phone.CF_ID, IccRecords.CALL_FORWARDING_STATUS_UNKNOWN)); 872d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan 873d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan // now verify value from new sharedPreference 874d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan assertEquals(true, mPhoneUT.getCallForwardingIndicator()); 875d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan 876d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan // check for another subId 877d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan doReturn(subId2).when(mSubscriptionController).getSubIdUsingPhoneId(anyInt()); 878d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan assertEquals(false, mPhoneUT.getCallForwardingIndicator()); 879d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan 880d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan // set value for the new subId in sharedPreference 881d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan editor.putInt(Phone.CF_STATUS + subId2, IccRecords.CALL_FORWARDING_STATUS_ENABLED); 882d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan editor.apply(); 883d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan assertEquals(true, mPhoneUT.getCallForwardingIndicator()); 884d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan 885d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan // switching back to previous subId, stored value should still be available 886d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan doReturn(subId1).when(mSubscriptionController).getSubIdUsingPhoneId(anyInt()); 887d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan assertEquals(true, mPhoneUT.getCallForwardingIndicator()); 888d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan 889d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan // cleanup 890d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan editor.remove(Phone.CF_STATUS + subId1); 891d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan editor.remove(Phone.CF_STATUS + subId2); 892d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan editor.apply(); 893d520d895c1af9974f61235bdf35cf5221abbe98aAmit Mahajan } 8942dd874066ed871c8adf50f58e4b025d525db78ebJack Yu 8952dd874066ed871c8adf50f58e4b025d525db78ebJack Yu @Test 8962dd874066ed871c8adf50f58e4b025d525db78ebJack Yu @SmallTest 8972dd874066ed871c8adf50f58e4b025d525db78ebJack Yu public void testEriLoading() { 8982dd874066ed871c8adf50f58e4b025d525db78ebJack Yu mPhoneUT.mEriManager = mEriManager; 8992dd874066ed871c8adf50f58e4b025d525db78ebJack Yu mPhoneUT.sendMessage(mPhoneUT.obtainMessage(GsmCdmaPhone.EVENT_CARRIER_CONFIG_CHANGED, 9002dd874066ed871c8adf50f58e4b025d525db78ebJack Yu null)); 9012dd874066ed871c8adf50f58e4b025d525db78ebJack Yu waitForMs(100); 9022dd874066ed871c8adf50f58e4b025d525db78ebJack Yu verify(mEriManager, times(1)).loadEriFile(); 9032dd874066ed871c8adf50f58e4b025d525db78ebJack Yu } 904649c81576a5d145fffab05896f02b433612c2847Malcolm Chen 905649c81576a5d145fffab05896f02b433612c2847Malcolm Chen @Test 906649c81576a5d145fffab05896f02b433612c2847Malcolm Chen @SmallTest 90796170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu public void testGetIccCardUnknownAndAbsent() { 90896170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu // If UiccSlot.isStateUnknown is true, we should return a dummy IccCard with the state 90996170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu // set to UNKNOWN 91096170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu doReturn(null).when(mUiccController).getUiccProfileForPhone(anyInt()); 91196170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu UiccSlot mockSlot = mock(UiccSlot.class); 91296170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu doReturn(mockSlot).when(mUiccController).getUiccSlotForPhone(anyInt()); 91396170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu doReturn(true).when(mockSlot).isStateUnknown(); 91496170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu 91596170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu IccCard iccCard = mPhoneUT.getIccCard(); 91696170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu assertEquals(IccCardConstants.State.UNKNOWN, iccCard.getState()); 91796170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu 91896170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu // if isStateUnknown is false, we should return a dummy IccCard with the state set to 91996170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu // ABSENT 92096170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu doReturn(false).when(mockSlot).isStateUnknown(); 92196170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu iccCard = mPhoneUT.getIccCard(); 92296170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu assertEquals(IccCardConstants.State.ABSENT, iccCard.getState()); 92396170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu } 92496170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu 92596170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu @Test 92696170b8afa17db4832f5f0e7fab0f64dc2428a64Jordan Liu @SmallTest 927649c81576a5d145fffab05896f02b433612c2847Malcolm Chen public void testGetEmptyIccCard() { 928649c81576a5d145fffab05896f02b433612c2847Malcolm Chen doReturn(null).when(mUiccController).getUiccProfileForPhone(anyInt()); 929649c81576a5d145fffab05896f02b433612c2847Malcolm Chen 930649c81576a5d145fffab05896f02b433612c2847Malcolm Chen IccCard iccCard = mPhoneUT.getIccCard(); 931649c81576a5d145fffab05896f02b433612c2847Malcolm Chen 932649c81576a5d145fffab05896f02b433612c2847Malcolm Chen // The iccCard should be a dummy object, not null. 933649c81576a5d145fffab05896f02b433612c2847Malcolm Chen assertTrue(!(iccCard instanceof UiccProfile)); 934649c81576a5d145fffab05896f02b433612c2847Malcolm Chen 935649c81576a5d145fffab05896f02b433612c2847Malcolm Chen assertTrue(iccCard != null); 936649c81576a5d145fffab05896f02b433612c2847Malcolm Chen assertEquals(IccCardConstants.State.UNKNOWN, iccCard.getState()); 937649c81576a5d145fffab05896f02b433612c2847Malcolm Chen assertEquals(null, iccCard.getIccRecords()); 938649c81576a5d145fffab05896f02b433612c2847Malcolm Chen assertEquals(false, iccCard.getIccLockEnabled()); 939649c81576a5d145fffab05896f02b433612c2847Malcolm Chen assertEquals(false, iccCard.getIccFdnEnabled()); 940649c81576a5d145fffab05896f02b433612c2847Malcolm Chen assertEquals(false, iccCard.isApplicationOnIcc( 941649c81576a5d145fffab05896f02b433612c2847Malcolm Chen IccCardApplicationStatus.AppType.APPTYPE_SIM)); 942649c81576a5d145fffab05896f02b433612c2847Malcolm Chen assertEquals(false, iccCard.hasIccCard()); 943649c81576a5d145fffab05896f02b433612c2847Malcolm Chen assertEquals(false, iccCard.getIccPin2Blocked()); 944649c81576a5d145fffab05896f02b433612c2847Malcolm Chen assertEquals(false, iccCard.getIccPuk2Blocked()); 945649c81576a5d145fffab05896f02b433612c2847Malcolm Chen 946649c81576a5d145fffab05896f02b433612c2847Malcolm Chen Message onComplete = mTestHandler.obtainMessage(EVENT_SET_ICC_LOCK_ENABLED); 947649c81576a5d145fffab05896f02b433612c2847Malcolm Chen iccCard.setIccLockEnabled(true, "password", onComplete); 948649c81576a5d145fffab05896f02b433612c2847Malcolm Chen 949649c81576a5d145fffab05896f02b433612c2847Malcolm Chen waitForMs(100); 950649c81576a5d145fffab05896f02b433612c2847Malcolm Chen 951649c81576a5d145fffab05896f02b433612c2847Malcolm Chen ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); 952649c81576a5d145fffab05896f02b433612c2847Malcolm Chen // Verify that message is sent back with exception. 953649c81576a5d145fffab05896f02b433612c2847Malcolm Chen verify(mTestHandler, times(1)).sendMessageAtTime(messageArgumentCaptor.capture(), 954649c81576a5d145fffab05896f02b433612c2847Malcolm Chen anyLong()); 955649c81576a5d145fffab05896f02b433612c2847Malcolm Chen Message message = messageArgumentCaptor.getAllValues().get(0); 956649c81576a5d145fffab05896f02b433612c2847Malcolm Chen AsyncResult ret = (AsyncResult) message.obj; 957649c81576a5d145fffab05896f02b433612c2847Malcolm Chen assertEquals(EVENT_SET_ICC_LOCK_ENABLED, message.what); 958649c81576a5d145fffab05896f02b433612c2847Malcolm Chen assertTrue(ret.exception != null); 959649c81576a5d145fffab05896f02b433612c2847Malcolm Chen } 960e5e4b94927937ac5cbc83ac577d4a572fa412784Robert Greenwalt} 961