15755ef622fec6f3c592467c685503826862a7536fionaxu/* 2655bae990bdd7e4584491def4d30692e6173779cfionaxu * Copyright (C) 2016 The Android Open Source Project 35755ef622fec6f3c592467c685503826862a7536fionaxu * 45755ef622fec6f3c592467c685503826862a7536fionaxu * Licensed under the Apache License, Version 2.0 (the "License"); 55755ef622fec6f3c592467c685503826862a7536fionaxu * you may not use this file except in compliance with the License. 65755ef622fec6f3c592467c685503826862a7536fionaxu * You may obtain a copy of the License at 75755ef622fec6f3c592467c685503826862a7536fionaxu * 85755ef622fec6f3c592467c685503826862a7536fionaxu * http://www.apache.org/licenses/LICENSE-2.0 95755ef622fec6f3c592467c685503826862a7536fionaxu * 105755ef622fec6f3c592467c685503826862a7536fionaxu * Unless required by applicable law or agreed to in writing, software 115755ef622fec6f3c592467c685503826862a7536fionaxu * distributed under the License is distributed on an "AS IS" BASIS, 125755ef622fec6f3c592467c685503826862a7536fionaxu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135755ef622fec6f3c592467c685503826862a7536fionaxu * See the License for the specific language governing permissions and 145755ef622fec6f3c592467c685503826862a7536fionaxu * limitations under the License. 155755ef622fec6f3c592467c685503826862a7536fionaxu */ 165755ef622fec6f3c592467c685503826862a7536fionaxupackage com.android.internal.telephony; 175755ef622fec6f3c592467c685503826862a7536fionaxu 18802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static com.android.internal.telephony.TelephonyTestUtils.waitForMs; 19802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajan 20802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.junit.Assert.assertEquals; 21802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.junit.Assert.assertNotNull; 22802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Mockito.any; 23802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Mockito.anyInt; 24802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Mockito.doReturn; 25802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Mockito.eq; 26802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Mockito.isA; 27802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Mockito.times; 28802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport static org.mockito.Mockito.verify; 29802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajan 30802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport android.os.Handler; 315755ef622fec6f3c592467c685503826862a7536fionaxuimport android.os.HandlerThread; 32802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport android.os.Message; 33e73ef117c8f5a7ea2feaa9ba8a15ec2de4137c7dJordan Liuimport android.support.test.filters.FlakyTest; 345755ef622fec6f3c592467c685503826862a7536fionaxuimport android.telephony.DisconnectCause; 355755ef622fec6f3c592467c685503826862a7536fionaxuimport android.telephony.PhoneNumberUtils; 365755ef622fec6f3c592467c685503826862a7536fionaxuimport android.telephony.ServiceState; 37f9665d579a68b00057cc171b2f1c39a010b7e40afionaxuimport android.test.suitebuilder.annotation.MediumTest; 385755ef622fec6f3c592467c685503826862a7536fionaxuimport android.test.suitebuilder.annotation.SmallTest; 39655bae990bdd7e4584491def4d30692e6173779cfionaxu 405755ef622fec6f3c592467c685503826862a7536fionaxuimport org.junit.After; 415755ef622fec6f3c592467c685503826862a7536fionaxuimport org.junit.Assert; 425755ef622fec6f3c592467c685503826862a7536fionaxuimport org.junit.Before; 43802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport org.junit.Ignore; 445755ef622fec6f3c592467c685503826862a7536fionaxuimport org.junit.Test; 455755ef622fec6f3c592467c685503826862a7536fionaxuimport org.mockito.ArgumentCaptor; 46802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport org.mockito.Mock; 475755ef622fec6f3c592467c685503826862a7536fionaxu 48655bae990bdd7e4584491def4d30692e6173779cfionaxupublic class GsmCdmaCallTrackerTest extends TelephonyTest { 495755ef622fec6f3c592467c685503826862a7536fionaxu private static final int VOICE_CALL_STARTED_EVENT = 0; 505755ef622fec6f3c592467c685503826862a7536fionaxu private static final int VOICE_CALL_ENDED_EVENT = 1; 51655bae990bdd7e4584491def4d30692e6173779cfionaxu private String mDialString = PhoneNumberUtils.stripSeparators("+17005554141"); 525755ef622fec6f3c592467c685503826862a7536fionaxu /* Handler class initiated at the HandlerThread */ 53655bae990bdd7e4584491def4d30692e6173779cfionaxu private GsmCdmaCallTracker mCTUT; 547e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan private GsmCdmaCTHandlerThread mGsmCdmaCTHandlerThread; 555755ef622fec6f3c592467c685503826862a7536fionaxu @Mock 565755ef622fec6f3c592467c685503826862a7536fionaxu GsmCdmaCall mCall; 575755ef622fec6f3c592467c685503826862a7536fionaxu @Mock 585755ef622fec6f3c592467c685503826862a7536fionaxu private Handler mHandler; 595755ef622fec6f3c592467c685503826862a7536fionaxu 605755ef622fec6f3c592467c685503826862a7536fionaxu private class GsmCdmaCTHandlerThread extends HandlerThread { 615755ef622fec6f3c592467c685503826862a7536fionaxu 625755ef622fec6f3c592467c685503826862a7536fionaxu private GsmCdmaCTHandlerThread(String name) { 635755ef622fec6f3c592467c685503826862a7536fionaxu super(name); 645755ef622fec6f3c592467c685503826862a7536fionaxu } 655755ef622fec6f3c592467c685503826862a7536fionaxu @Override 665755ef622fec6f3c592467c685503826862a7536fionaxu public void onLooperPrepared() { 67655bae990bdd7e4584491def4d30692e6173779cfionaxu mCTUT = new GsmCdmaCallTracker(mPhone); 68655bae990bdd7e4584491def4d30692e6173779cfionaxu setReady(true); 695755ef622fec6f3c592467c685503826862a7536fionaxu } 705755ef622fec6f3c592467c685503826862a7536fionaxu } 715755ef622fec6f3c592467c685503826862a7536fionaxu 725755ef622fec6f3c592467c685503826862a7536fionaxu @Before 735755ef622fec6f3c592467c685503826862a7536fionaxu public void setUp() throws Exception { 74655bae990bdd7e4584491def4d30692e6173779cfionaxu super.setUp(this.getClass().getSimpleName()); 75655bae990bdd7e4584491def4d30692e6173779cfionaxu mSimulatedCommands.setRadioPower(true, null); 76655bae990bdd7e4584491def4d30692e6173779cfionaxu mPhone.mCi = this.mSimulatedCommands; 77caf788f85debe35e07c1821f20ea8949b1c60c61fionaxu 787e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mGsmCdmaCTHandlerThread = new GsmCdmaCTHandlerThread(TAG); 797e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mGsmCdmaCTHandlerThread.start(); 805755ef622fec6f3c592467c685503826862a7536fionaxu 815755ef622fec6f3c592467c685503826862a7536fionaxu waitUntilReady(); 82655bae990bdd7e4584491def4d30692e6173779cfionaxu logd("GsmCdmaCallTracker initiated, waiting for Power on"); 835755ef622fec6f3c592467c685503826862a7536fionaxu /* Make sure radio state is power on before dial. 845755ef622fec6f3c592467c685503826862a7536fionaxu * When radio state changed from off to on, CallTracker 855755ef622fec6f3c592467c685503826862a7536fionaxu * will poll result from RIL. Avoid dialing triggered at the same*/ 86655bae990bdd7e4584491def4d30692e6173779cfionaxu waitForMs(100); 875755ef622fec6f3c592467c685503826862a7536fionaxu } 885755ef622fec6f3c592467c685503826862a7536fionaxu 895755ef622fec6f3c592467c685503826862a7536fionaxu @After 905755ef622fec6f3c592467c685503826862a7536fionaxu public void tearDown() throws Exception { 91655bae990bdd7e4584491def4d30692e6173779cfionaxu mCTUT = null; 92ae6e8f99bdb297f906d6dcdc0a385ba27eee47fdJack Yu mGsmCdmaCTHandlerThread.quit(); 93655bae990bdd7e4584491def4d30692e6173779cfionaxu super.tearDown(); 945755ef622fec6f3c592467c685503826862a7536fionaxu } 955755ef622fec6f3c592467c685503826862a7536fionaxu 965755ef622fec6f3c592467c685503826862a7536fionaxu @Test 975755ef622fec6f3c592467c685503826862a7536fionaxu @SmallTest 985755ef622fec6f3c592467c685503826862a7536fionaxu public void testMOCallDial() { 9919561243b57cea1863585443a92801724d41a4d9fionaxu doReturn(ServiceState.STATE_IN_SERVICE).when(mServiceState).getState(); 100655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(PhoneConstants.State.IDLE, mCTUT.getState()); 101655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mForegroundCall.getState()); 102655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mBackgroundCall.getState()); 103655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(0, mCTUT.mForegroundCall.getConnections().size()); 1045755ef622fec6f3c592467c685503826862a7536fionaxu try { 105655bae990bdd7e4584491def4d30692e6173779cfionaxu mCTUT.dial(mDialString); 10648a5ba5d3cc80ffaaa82caed6f2344166da99c08Jack Yu waitForMs(100); 1075755ef622fec6f3c592467c685503826862a7536fionaxu } catch(Exception ex) { 1085755ef622fec6f3c592467c685503826862a7536fionaxu ex.printStackTrace(); 1095bc609873dfd5a4c51798139512c206ac0ab7503fionaxu Assert.fail("unexpected exception thrown"+ex.getMessage()+ex.getStackTrace()); 1105755ef622fec6f3c592467c685503826862a7536fionaxu } 1115755ef622fec6f3c592467c685503826862a7536fionaxu 112655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(PhoneConstants.State.OFFHOOK, mCTUT.getState()); 113655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.DIALING, mCTUT.mForegroundCall.getState()); 114655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(1, mCTUT.mForegroundCall.getConnections().size()); 1155755ef622fec6f3c592467c685503826862a7536fionaxu /* verify the command is sent out to RIL */ 1165755ef622fec6f3c592467c685503826862a7536fionaxu verify(mSimulatedCommandsVerifier).dial(eq(PhoneNumberUtils. 117b54a7201000c50c505814aa62e114010f5310d0ffionaxu extractNetworkPortionAlt(mDialString)), anyInt(), 118b54a7201000c50c505814aa62e114010f5310d0ffionaxu eq((UUSInfo) null), 119b54a7201000c50c505814aa62e114010f5310d0ffionaxu isA(Message.class)); 1205755ef622fec6f3c592467c685503826862a7536fionaxu } 1215755ef622fec6f3c592467c685503826862a7536fionaxu 1225755ef622fec6f3c592467c685503826862a7536fionaxu @Test 1235755ef622fec6f3c592467c685503826862a7536fionaxu @SmallTest 1245755ef622fec6f3c592467c685503826862a7536fionaxu public void testMOCallPickUp() { 1255755ef622fec6f3c592467c685503826862a7536fionaxu testMOCallDial(); 1265755ef622fec6f3c592467c685503826862a7536fionaxu logd("Waiting for POLL CALL response from RIL"); 127b54a7201000c50c505814aa62e114010f5310d0ffionaxu TelephonyTestUtils.waitForMs(50); 1285755ef622fec6f3c592467c685503826862a7536fionaxu logd("Pick Up MO call, expecting call state change event "); 129655bae990bdd7e4584491def4d30692e6173779cfionaxu mSimulatedCommands.progressConnectingToActive(); 130655bae990bdd7e4584491def4d30692e6173779cfionaxu waitForMs(100); 131655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.ACTIVE, mCTUT.mForegroundCall.getState()); 132655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mBackgroundCall.getState()); 1335755ef622fec6f3c592467c685503826862a7536fionaxu } 1345755ef622fec6f3c592467c685503826862a7536fionaxu 135cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan @FlakyTest 136cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan @Ignore 1375755ef622fec6f3c592467c685503826862a7536fionaxu @Test 138f9665d579a68b00057cc171b2f1c39a010b7e40afionaxu @MediumTest 1395755ef622fec6f3c592467c685503826862a7536fionaxu public void testMOCallHangup() { 1405755ef622fec6f3c592467c685503826862a7536fionaxu testMOCallDial(); 1415755ef622fec6f3c592467c685503826862a7536fionaxu logd("Waiting for POLL CALL response from RIL "); 142b54a7201000c50c505814aa62e114010f5310d0ffionaxu TelephonyTestUtils.waitForMs(50); 143655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.DIALING, mCTUT.mForegroundCall.getState()); 144655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(PhoneConstants.State.OFFHOOK, mCTUT.getState()); 145655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(1, mCTUT.mForegroundCall.getConnections().size()); 1465755ef622fec6f3c592467c685503826862a7536fionaxu logd("Hang up MO call after MO call established "); 1475755ef622fec6f3c592467c685503826862a7536fionaxu try { 148655bae990bdd7e4584491def4d30692e6173779cfionaxu mCTUT.hangup(mCTUT.mForegroundCall); 1495755ef622fec6f3c592467c685503826862a7536fionaxu } catch(Exception ex) { 1505755ef622fec6f3c592467c685503826862a7536fionaxu ex.printStackTrace(); 151b54a7201000c50c505814aa62e114010f5310d0ffionaxu Assert.fail("unexpected exception thrown" + ex.getMessage()); 1525755ef622fec6f3c592467c685503826862a7536fionaxu } 153f9665d579a68b00057cc171b2f1c39a010b7e40afionaxu waitForMs(300); 154655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mForegroundCall.getState()); 155655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(0, mCTUT.mForegroundCall.getConnections().size()); 156655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(PhoneConstants.State.IDLE, mCTUT.getState()); 1575755ef622fec6f3c592467c685503826862a7536fionaxu } 1585755ef622fec6f3c592467c685503826862a7536fionaxu 159cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan @FlakyTest 160cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan @Ignore 1615755ef622fec6f3c592467c685503826862a7536fionaxu @Test 162f9665d579a68b00057cc171b2f1c39a010b7e40afionaxu @MediumTest 1635755ef622fec6f3c592467c685503826862a7536fionaxu public void testMOCallDialPickUpHangup() { 1645755ef622fec6f3c592467c685503826862a7536fionaxu testMOCallPickUp(); 165655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.ACTIVE, mCTUT.mForegroundCall.getState()); 166655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(PhoneConstants.State.OFFHOOK, mCTUT.getState()); 167655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(1, mCTUT.mForegroundCall.getConnections().size()); 1685755ef622fec6f3c592467c685503826862a7536fionaxu /* get the reference of the connection before reject */ 169655bae990bdd7e4584491def4d30692e6173779cfionaxu Connection mConnection = mCTUT.mForegroundCall.getConnections().get(0); 170655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(DisconnectCause.NOT_DISCONNECTED, mConnection.getDisconnectCause()); 1715755ef622fec6f3c592467c685503826862a7536fionaxu logd("hang up MO call after pickup"); 1725755ef622fec6f3c592467c685503826862a7536fionaxu try { 173655bae990bdd7e4584491def4d30692e6173779cfionaxu mCTUT.hangup(mCTUT.mForegroundCall); 1745755ef622fec6f3c592467c685503826862a7536fionaxu } catch(Exception ex) { 1755755ef622fec6f3c592467c685503826862a7536fionaxu ex.printStackTrace(); 176b54a7201000c50c505814aa62e114010f5310d0ffionaxu Assert.fail("unexpected exception thrown" + ex.getMessage()); 1775755ef622fec6f3c592467c685503826862a7536fionaxu } 1785755ef622fec6f3c592467c685503826862a7536fionaxu /* request send to RIL still in disconnecting state */ 179f9665d579a68b00057cc171b2f1c39a010b7e40afionaxu waitForMs(300); 180655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mForegroundCall.getState()); 181655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(0, mCTUT.mForegroundCall.getConnections().size()); 182655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(PhoneConstants.State.IDLE, mCTUT.getState()); 183655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(DisconnectCause.LOCAL, mConnection.getDisconnectCause()); 1845755ef622fec6f3c592467c685503826862a7536fionaxu 1855755ef622fec6f3c592467c685503826862a7536fionaxu } 1865755ef622fec6f3c592467c685503826862a7536fionaxu 18792428df50d736a3d1d0f32779a22c65fcec0efabJordan Liu @FlakyTest 1885755ef622fec6f3c592467c685503826862a7536fionaxu @Test 189f9665d579a68b00057cc171b2f1c39a010b7e40afionaxu @MediumTest 1905755ef622fec6f3c592467c685503826862a7536fionaxu public void testMOCallPendingHangUp() { 1915755ef622fec6f3c592467c685503826862a7536fionaxu testMOCallDial(); 1925755ef622fec6f3c592467c685503826862a7536fionaxu logd("MO call hangup before established[ getting result from RIL ]"); 1935755ef622fec6f3c592467c685503826862a7536fionaxu /* poll call result from RIL, find that there is a pendingMO call, 1945755ef622fec6f3c592467c685503826862a7536fionaxu * Didn't do anything for hangup, clear during handle poll result */ 1955755ef622fec6f3c592467c685503826862a7536fionaxu try { 196655bae990bdd7e4584491def4d30692e6173779cfionaxu mCTUT.hangup(mCTUT.mForegroundCall); 1975755ef622fec6f3c592467c685503826862a7536fionaxu } catch(Exception ex) { 1985755ef622fec6f3c592467c685503826862a7536fionaxu ex.printStackTrace(); 199b54a7201000c50c505814aa62e114010f5310d0ffionaxu Assert.fail("unexpected exception thrown" + ex.getMessage()); 2005755ef622fec6f3c592467c685503826862a7536fionaxu } 201f9665d579a68b00057cc171b2f1c39a010b7e40afionaxu waitForMs(300); 202655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mForegroundCall.getState()); 203655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(0, mCTUT.mForegroundCall.getConnections().size()); 204655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(PhoneConstants.State.IDLE, mCTUT.getState()); 2055755ef622fec6f3c592467c685503826862a7536fionaxu } 2065755ef622fec6f3c592467c685503826862a7536fionaxu 2075755ef622fec6f3c592467c685503826862a7536fionaxu @Test 208f9665d579a68b00057cc171b2f1c39a010b7e40afionaxu @MediumTest 2095755ef622fec6f3c592467c685503826862a7536fionaxu public void testMOCallSwitch() { 2105755ef622fec6f3c592467c685503826862a7536fionaxu testMOCallPickUp(); 2115755ef622fec6f3c592467c685503826862a7536fionaxu logd("MO call picked up, initiating a new MO call"); 212655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.ACTIVE, mCTUT.mForegroundCall.getState()); 213655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mBackgroundCall.getState()); 214655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(1, mCTUT.mForegroundCall.getConnections().size()); 215655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(0, mCTUT.mBackgroundCall.getConnections().size()); 2165755ef622fec6f3c592467c685503826862a7536fionaxu 2175755ef622fec6f3c592467c685503826862a7536fionaxu String mDialString = PhoneNumberUtils.stripSeparators("+17005554142"); 2185755ef622fec6f3c592467c685503826862a7536fionaxu try { 219655bae990bdd7e4584491def4d30692e6173779cfionaxu mCTUT.dial(mDialString); 2205755ef622fec6f3c592467c685503826862a7536fionaxu } catch(Exception ex) { 2215755ef622fec6f3c592467c685503826862a7536fionaxu ex.printStackTrace(); 222b54a7201000c50c505814aa62e114010f5310d0ffionaxu Assert.fail("unexpected exception thrown" + ex.getMessage()); 2235755ef622fec6f3c592467c685503826862a7536fionaxu } 224282e49e614393f9a597f058fe6fe3185c02ded94fionaxu waitForMs(200); 225655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.DIALING, mCTUT.mForegroundCall.getState()); 226655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.HOLDING, mCTUT.mBackgroundCall.getState()); 227655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(1, mCTUT.mForegroundCall.getConnections().size()); 228655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(1, mCTUT.mBackgroundCall.getConnections().size()); 2295755ef622fec6f3c592467c685503826862a7536fionaxu 2305755ef622fec6f3c592467c685503826862a7536fionaxu } 2315755ef622fec6f3c592467c685503826862a7536fionaxu 2325755ef622fec6f3c592467c685503826862a7536fionaxu @Test 2335755ef622fec6f3c592467c685503826862a7536fionaxu @SmallTest 234802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajan @FlakyTest 235802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajan @Ignore 2365755ef622fec6f3c592467c685503826862a7536fionaxu public void testMTCallRinging() { 2375755ef622fec6f3c592467c685503826862a7536fionaxu /* Mock there is a MT call mRinging call and try to accept this MT call */ 2385755ef622fec6f3c592467c685503826862a7536fionaxu /* if we got a active state followed by another MT call-> move to background call */ 239655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(PhoneConstants.State.IDLE, mCTUT.getState()); 240655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(0, mCTUT.mRingingCall.getConnections().size()); 241655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mForegroundCall.getState()); 2425755ef622fec6f3c592467c685503826862a7536fionaxu String mDialString = PhoneNumberUtils.stripSeparators("+17005554141"); 2435755ef622fec6f3c592467c685503826862a7536fionaxu logd("MT call Ringing"); 244655bae990bdd7e4584491def4d30692e6173779cfionaxu mSimulatedCommands.triggerRing(mDialString); 245655bae990bdd7e4584491def4d30692e6173779cfionaxu waitForMs(50); 246655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(PhoneConstants.State.RINGING, mCTUT.getState()); 247655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(1, mCTUT.mRingingCall.getConnections().size()); 2485755ef622fec6f3c592467c685503826862a7536fionaxu } 2495755ef622fec6f3c592467c685503826862a7536fionaxu 2505755ef622fec6f3c592467c685503826862a7536fionaxu @Test 2515755ef622fec6f3c592467c685503826862a7536fionaxu @SmallTest 252802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajan @FlakyTest 253802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajan @Ignore 2545755ef622fec6f3c592467c685503826862a7536fionaxu public void testMTCallAccept() { 2555755ef622fec6f3c592467c685503826862a7536fionaxu testMTCallRinging(); 256655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(mCTUT.mForegroundCall.getConnections().size(),0); 2575755ef622fec6f3c592467c685503826862a7536fionaxu logd("accept the MT call"); 2585755ef622fec6f3c592467c685503826862a7536fionaxu try{ 259655bae990bdd7e4584491def4d30692e6173779cfionaxu mCTUT.acceptCall(); 2605755ef622fec6f3c592467c685503826862a7536fionaxu } catch(Exception ex) { 2615755ef622fec6f3c592467c685503826862a7536fionaxu ex.printStackTrace(); 262b54a7201000c50c505814aa62e114010f5310d0ffionaxu Assert.fail("unexpected exception thrown" + ex.getMessage()); 2635755ef622fec6f3c592467c685503826862a7536fionaxu } 2645755ef622fec6f3c592467c685503826862a7536fionaxu verify(mSimulatedCommandsVerifier).acceptCall(isA(Message.class)); 2655755ef622fec6f3c592467c685503826862a7536fionaxu /* send to the RIL */ 266b54a7201000c50c505814aa62e114010f5310d0ffionaxu TelephonyTestUtils.waitForMs(50); 267655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(PhoneConstants.State.OFFHOOK, mCTUT.getState()); 268655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.ACTIVE, mCTUT.mForegroundCall.getState()); 269655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(1, mCTUT.mForegroundCall.getConnections().size()); 270655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(0, mCTUT.mRingingCall.getConnections().size()); 2715755ef622fec6f3c592467c685503826862a7536fionaxu } 2725755ef622fec6f3c592467c685503826862a7536fionaxu 2735755ef622fec6f3c592467c685503826862a7536fionaxu @Test 2745755ef622fec6f3c592467c685503826862a7536fionaxu @SmallTest 2755755ef622fec6f3c592467c685503826862a7536fionaxu public void testMTCallReject() { 2765755ef622fec6f3c592467c685503826862a7536fionaxu testMTCallRinging(); 2775755ef622fec6f3c592467c685503826862a7536fionaxu logd("MT call ringing and rejected "); 2785755ef622fec6f3c592467c685503826862a7536fionaxu /* get the reference of the connection before reject */ 279655bae990bdd7e4584491def4d30692e6173779cfionaxu Connection mConnection = mCTUT.mRingingCall.getConnections().get(0); 2805755ef622fec6f3c592467c685503826862a7536fionaxu assertNotNull(mConnection); 281655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(DisconnectCause.NOT_DISCONNECTED, mConnection.getDisconnectCause()); 2825755ef622fec6f3c592467c685503826862a7536fionaxu try { 283655bae990bdd7e4584491def4d30692e6173779cfionaxu mCTUT.rejectCall(); 2845755ef622fec6f3c592467c685503826862a7536fionaxu } catch(Exception ex) { 2855755ef622fec6f3c592467c685503826862a7536fionaxu ex.printStackTrace(); 286b54a7201000c50c505814aa62e114010f5310d0ffionaxu Assert.fail("unexpected exception thrown" + ex.getMessage()); 2875755ef622fec6f3c592467c685503826862a7536fionaxu } 288655bae990bdd7e4584491def4d30692e6173779cfionaxu waitForMs(50); 289655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(PhoneConstants.State.IDLE, mCTUT.getState()); 290655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mForegroundCall.getState()); 291655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(0, mCTUT.mForegroundCall.getConnections().size()); 2925755ef622fec6f3c592467c685503826862a7536fionaxu /* ? why rejectCall didnt -> hang up locally to set the cause to LOCAL? */ 293655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(DisconnectCause.INCOMING_MISSED, mConnection.getDisconnectCause()); 2945755ef622fec6f3c592467c685503826862a7536fionaxu 2955755ef622fec6f3c592467c685503826862a7536fionaxu } 2965755ef622fec6f3c592467c685503826862a7536fionaxu 2975755ef622fec6f3c592467c685503826862a7536fionaxu @Test 298f9665d579a68b00057cc171b2f1c39a010b7e40afionaxu @MediumTest 2995755ef622fec6f3c592467c685503826862a7536fionaxu public void testMOCallSwitchHangupForeGround() { 3005755ef622fec6f3c592467c685503826862a7536fionaxu testMOCallSwitch(); 3015755ef622fec6f3c592467c685503826862a7536fionaxu logd("Hang up the foreground MO call while dialing "); 3025755ef622fec6f3c592467c685503826862a7536fionaxu try { 303655bae990bdd7e4584491def4d30692e6173779cfionaxu mCTUT.hangup(mCTUT.mForegroundCall); 3045755ef622fec6f3c592467c685503826862a7536fionaxu } catch(Exception ex) { 3055755ef622fec6f3c592467c685503826862a7536fionaxu ex.printStackTrace(); 306b54a7201000c50c505814aa62e114010f5310d0ffionaxu Assert.fail("unexpected exception thrown" + ex.getMessage()); 3075755ef622fec6f3c592467c685503826862a7536fionaxu } 308f9665d579a68b00057cc171b2f1c39a010b7e40afionaxu waitForMs(300); 3095755ef622fec6f3c592467c685503826862a7536fionaxu logd(" Foreground Call is IDLE and BackGround Call is still HOLDING "); 3105755ef622fec6f3c592467c685503826862a7536fionaxu /* if we want to hang up foreground call which is alerting state, hangup all */ 311655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mForegroundCall.getState()); 312655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.HOLDING, mCTUT.mBackgroundCall.getState()); 3135755ef622fec6f3c592467c685503826862a7536fionaxu } 3145755ef622fec6f3c592467c685503826862a7536fionaxu 315a18eb87506359758fb67899525d0737d98923b8dSanket Padawe @FlakyTest 316a18eb87506359758fb67899525d0737d98923b8dSanket Padawe @Ignore 3175755ef622fec6f3c592467c685503826862a7536fionaxu @Test 318f9665d579a68b00057cc171b2f1c39a010b7e40afionaxu @MediumTest 3195755ef622fec6f3c592467c685503826862a7536fionaxu public void testMOCallPickUpHangUpResumeBackGround() { 3205755ef622fec6f3c592467c685503826862a7536fionaxu testMOCallSwitch(); 3215755ef622fec6f3c592467c685503826862a7536fionaxu logd("Pick up the new MO Call"); 3225755ef622fec6f3c592467c685503826862a7536fionaxu try{ 323655bae990bdd7e4584491def4d30692e6173779cfionaxu mSimulatedCommands.progressConnectingToActive(); 3245755ef622fec6f3c592467c685503826862a7536fionaxu } catch(Exception ex) { 3255755ef622fec6f3c592467c685503826862a7536fionaxu ex.printStackTrace(); 326b54a7201000c50c505814aa62e114010f5310d0ffionaxu Assert.fail("unexpected exception thrown" + ex.getMessage()); 3275755ef622fec6f3c592467c685503826862a7536fionaxu } 3285755ef622fec6f3c592467c685503826862a7536fionaxu 329282e49e614393f9a597f058fe6fe3185c02ded94fionaxu waitForMs(200); 330655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.ACTIVE, mCTUT.mForegroundCall.getState()); 331655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.HOLDING, mCTUT.mBackgroundCall.getState()); 3325755ef622fec6f3c592467c685503826862a7536fionaxu 3335755ef622fec6f3c592467c685503826862a7536fionaxu logd("Hang up the new MO Call"); 3345755ef622fec6f3c592467c685503826862a7536fionaxu try { 335655bae990bdd7e4584491def4d30692e6173779cfionaxu mCTUT.hangup(mCTUT.mForegroundCall); 3365755ef622fec6f3c592467c685503826862a7536fionaxu } catch(Exception ex) { 3375755ef622fec6f3c592467c685503826862a7536fionaxu ex.printStackTrace(); 338b54a7201000c50c505814aa62e114010f5310d0ffionaxu Assert.fail("unexpected exception thrown" + ex.getMessage()); 3395755ef622fec6f3c592467c685503826862a7536fionaxu } 3405755ef622fec6f3c592467c685503826862a7536fionaxu 341f9665d579a68b00057cc171b2f1c39a010b7e40afionaxu waitForMs(300); 3425755ef622fec6f3c592467c685503826862a7536fionaxu logd(" BackGround Call switch to ForeGround Call "); 343655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.ACTIVE, mCTUT.mForegroundCall.getState()); 344655bae990bdd7e4584491def4d30692e6173779cfionaxu assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mBackgroundCall.getState()); 3455755ef622fec6f3c592467c685503826862a7536fionaxu } 3465755ef622fec6f3c592467c685503826862a7536fionaxu 3475755ef622fec6f3c592467c685503826862a7536fionaxu @Test @SmallTest 3485755ef622fec6f3c592467c685503826862a7536fionaxu public void testVoiceCallStartListener(){ 3495755ef622fec6f3c592467c685503826862a7536fionaxu logd("register for voice call started event"); 350655bae990bdd7e4584491def4d30692e6173779cfionaxu mCTUT.registerForVoiceCallStarted(mHandler, VOICE_CALL_STARTED_EVENT, null); 3515755ef622fec6f3c592467c685503826862a7536fionaxu logd("voice call started"); 3525755ef622fec6f3c592467c685503826862a7536fionaxu testMOCallPickUp(); 3535755ef622fec6f3c592467c685503826862a7536fionaxu ArgumentCaptor<Message> mCaptorMessage = ArgumentCaptor.forClass(Message.class); 354703e603fecd2a07e232afe1e2b277fd0a786237bfionaxu ArgumentCaptor<Long> mCaptorLong = ArgumentCaptor.forClass(Long.class); 3555755ef622fec6f3c592467c685503826862a7536fionaxu verify(mHandler,times(1)).sendMessageAtTime(mCaptorMessage.capture(), mCaptorLong.capture()); 3565755ef622fec6f3c592467c685503826862a7536fionaxu assertEquals(VOICE_CALL_STARTED_EVENT, mCaptorMessage.getValue().what); 3575755ef622fec6f3c592467c685503826862a7536fionaxu 3585755ef622fec6f3c592467c685503826862a7536fionaxu } 3595755ef622fec6f3c592467c685503826862a7536fionaxu 360cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan @FlakyTest 361cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan @Ignore 3625755ef622fec6f3c592467c685503826862a7536fionaxu @Test @SmallTest 3635755ef622fec6f3c592467c685503826862a7536fionaxu public void testVoiceCallEndedListener(){ 3645755ef622fec6f3c592467c685503826862a7536fionaxu logd("register for voice call ended event"); 365655bae990bdd7e4584491def4d30692e6173779cfionaxu mCTUT.registerForVoiceCallEnded(mHandler, VOICE_CALL_ENDED_EVENT, null); 3665755ef622fec6f3c592467c685503826862a7536fionaxu ArgumentCaptor<Message> mCaptorMessage = ArgumentCaptor.forClass(Message.class); 367655bae990bdd7e4584491def4d30692e6173779cfionaxu ArgumentCaptor<Long> mCaptorLong = ArgumentCaptor.forClass(Long.class); 3685755ef622fec6f3c592467c685503826862a7536fionaxu testMOCallHangup(); 3695755ef622fec6f3c592467c685503826862a7536fionaxu verify(mHandler,times(1)).sendMessageAtTime(mCaptorMessage.capture(), mCaptorLong.capture()); 3705755ef622fec6f3c592467c685503826862a7536fionaxu assertEquals(VOICE_CALL_ENDED_EVENT, mCaptorMessage.getValue().what); 3715755ef622fec6f3c592467c685503826862a7536fionaxu } 37277eeade7a1391b045f8b2ce681efd49f27d3506fAmit Mahajan 37377eeade7a1391b045f8b2ce681efd49f27d3506fAmit Mahajan @Test @SmallTest 37477eeade7a1391b045f8b2ce681efd49f27d3506fAmit Mahajan public void testUpdatePhoneType() { 37577eeade7a1391b045f8b2ce681efd49f27d3506fAmit Mahajan // verify getCurrentCalls is called on init 37677eeade7a1391b045f8b2ce681efd49f27d3506fAmit Mahajan verify(mSimulatedCommandsVerifier).getCurrentCalls(any(Message.class)); 37777eeade7a1391b045f8b2ce681efd49f27d3506fAmit Mahajan 378e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan // update phone type (call the function on same thread as the call tracker) 379e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan Handler updatePhoneTypeHandler = new Handler(mCTUT.getLooper()) { 380e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan @Override 381e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan public void handleMessage(Message msg) { 382e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan mCTUT.updatePhoneType(); 383e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan } 384e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan }; 385e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan updatePhoneTypeHandler.sendEmptyMessage(0); 386e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan waitForMs(100); 38777eeade7a1391b045f8b2ce681efd49f27d3506fAmit Mahajan 38877eeade7a1391b045f8b2ce681efd49f27d3506fAmit Mahajan // verify getCurrentCalls is called on updating phone type 38977eeade7a1391b045f8b2ce681efd49f27d3506fAmit Mahajan verify(mSimulatedCommandsVerifier, times(2)).getCurrentCalls(any(Message.class)); 3908dd4a1915f45460dfed9646470fbc0405bff934bAmit Mahajan 391e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan // we'd like to verify that if phone type is updated, calls and callTracker go to idle. 392e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan // However, as soon as phone type is updated, call tracker queries for calls from RIL and 393e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan // will go back to OFFHOOK 394e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan 395e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan // call tracker goes to OFFHOOK 3968dd4a1915f45460dfed9646470fbc0405bff934bAmit Mahajan testMOCallPickUp(); 3978dd4a1915f45460dfed9646470fbc0405bff934bAmit Mahajan 398e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan // update phone type - call tracker goes to IDLE and then due to getCurrentCalls(), 399e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan // goes back to OFFHOOK 400e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan updatePhoneTypeHandler.sendEmptyMessage(0); 401e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan waitForMs(100); 4028dd4a1915f45460dfed9646470fbc0405bff934bAmit Mahajan 4038dd4a1915f45460dfed9646470fbc0405bff934bAmit Mahajan // verify CT and calls go to idle 404e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan assertEquals(PhoneConstants.State.OFFHOOK, mCTUT.getState()); 405e97fb0b4ff012fe960c36d7cb09311550c7d4055Amit Mahajan assertEquals(GsmCdmaCall.State.ACTIVE, mCTUT.mForegroundCall.getState()); 4068dd4a1915f45460dfed9646470fbc0405bff934bAmit Mahajan assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mBackgroundCall.getState()); 4078dd4a1915f45460dfed9646470fbc0405bff934bAmit Mahajan assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mRingingCall.getState()); 40877eeade7a1391b045f8b2ce681efd49f27d3506fAmit Mahajan } 4095755ef622fec6f3c592467c685503826862a7536fionaxu} 4105755ef622fec6f3c592467c685503826862a7536fionaxu 411