10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/* 20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2007 The Android Open Source Project 30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License. 60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at 70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software 110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF GSMTestHandler.ANY KIND, either express or implied. 130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and 140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License. 150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony.gsm; 180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.AsyncResult; 200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Handler; 210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message; 220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.ServiceState; 230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.test.AndroidTestCase; 240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.test.PerformanceTestCase; 250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.Call; 270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.CallStateException; 280825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.Connection; 290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.MmiCode; 300825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.Phone; 310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.PhoneConstants; 320825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.CallFailCause; 330825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.GSMPhone; 340825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.GSMTestHandler; 350825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.GsmMmiCode; 360825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.SuppServiceNotification; 370825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.test.SimulatedRadioControl; 380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 390825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.List; 400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 420825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class GSMPhoneTest extends AndroidTestCase implements PerformanceTestCase { 430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private SimulatedRadioControl mRadioControl; 440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private GSMPhone mGSMPhone; 450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private GSMTestHandler mGSMTestHandler; 460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private Handler mHandler; 470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int EVENT_PHONE_STATE_CHANGED = 1; 490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int EVENT_DISCONNECT = 2; 500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int EVENT_RINGING = 3; 510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int EVENT_CHANNEL_OPENED = 4; 520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int EVENT_POST_DIAL = 5; 530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int EVENT_DONE = 6; 540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int EVENT_SSN = 7; 550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int EVENT_MMI_INITIATE = 8; 560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int EVENT_MMI_COMPLETE = 9; 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int EVENT_IN_SERVICE = 10; 580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int SUPP_SERVICE_FAILED = 11; 590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int SERVICE_STATE_CHANGED = 12; 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int EVENT_OEM_RIL_MESSAGE = 13; 610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final int ANY_MESSAGE = -1; 620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void setUp() throws Exception { 650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super.setUp(); 660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMTestHandler = new GSMTestHandler(mContext); 670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMTestHandler.start(); 690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville synchronized (mGSMTestHandler) { 700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMTestHandler.wait(); 720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMTestHandler.getGSMPhone() == null); 730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone = mGSMTestHandler.getGSMPhone(); 760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl = mGSMTestHandler.getSimulatedCommands(); 770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mHandler = mGSMTestHandler.getHandler(); 790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.registerForPreciseCallStateChanged(mHandler, EVENT_PHONE_STATE_CHANGED, null); 800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.registerForNewRingingConnection(mHandler, EVENT_RINGING, null); 810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.registerForDisconnect(mHandler, EVENT_DISCONNECT, null); 820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.setOnPostDialCharacter(mHandler, EVENT_POST_DIAL, null); 840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.registerForSuppServiceNotification(mHandler, EVENT_SSN, null); 860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.registerForMmiInitiate(mHandler, EVENT_MMI_INITIATE, null); 870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.registerForMmiComplete(mHandler, EVENT_MMI_COMPLETE, null); 880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.registerForSuppServiceFailed(mHandler, SUPP_SERVICE_FAILED, null); 890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.registerForServiceStateChanged(mHandler, SERVICE_STATE_CHANGED, null); 910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // wait until we get phone in both voice and data service 930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ServiceState state; 950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(SERVICE_STATE_CHANGED); 980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville state = (ServiceState) ((AsyncResult) msg.obj).result; 1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (state.getState() != ServiceState.STATE_IN_SERVICE); 1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void tearDown() throws Exception { 1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.shutdown(); 1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.unregisterForPreciseCallStateChanged(mHandler); 1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.unregisterForNewRingingConnection(mHandler); 1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.unregisterForDisconnect(mHandler); 1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.setOnPostDialCharacter(mHandler, 0, null); 1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.unregisterForSuppServiceNotification(mHandler); 1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.unregisterForMmiInitiate(mHandler); 1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.unregisterForMmiComplete(mHandler); 1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone = null; 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl = null; 1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mHandler = null; 1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMTestHandler.cleanup(); 1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super.tearDown(); 1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // These test can only be run once. 1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int startPerformance(Intermediates intermediates) { 1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return 1; 1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isPerformanceOnly() { 1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //This test is causing the emulator screen to turn off. I don't understand 1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //why, but I'm removing it until we can figure it out. 1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void brokenTestGeneral() throws Exception { 1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Connection cn; 1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar; 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // IDLE state 1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.IDLE, mGSMPhone.getState()); 1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getConnections().size()); 1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getConnections().size()); 1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getForegroundCall().getState()); 1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestCreateTime()); 1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestConnectTime()); 1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One DIALING connection 1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.setAutoProgressConnectingCall(false); 1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("+13125551212"); 1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.OFFHOOK, mGSMPhone.getState()); 1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_PHONE_STATE_CHANGED); 1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.OFFHOOK, mGSMPhone.getState()); 1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DIALING, mGSMPhone.getForegroundCall().getState()); 1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /*do { 1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMTestHandler.waitForMessage(ANY_MESSAGE); 1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getConnections().size() == 0);*/ 1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getConnections().size()); 1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(1, mGSMPhone.getForegroundCall().getConnections().size()); 1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DIALING, 1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getState()); 1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().getEarliestCreateTime() > 0); 1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestConnectTime()); 1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.getForegroundCall().getConnections().get(0); 1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(!cn.isIncoming()); 1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.NOT_STARTED, cn.getPostDialState()); 1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.NOT_DISCONNECTED, cn.getDisconnectCause()); 1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One ALERTING connection 1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville while (mGSMPhone.getForegroundCall().getState() != Call.State.ALERTING); 2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.OFFHOOK, mGSMPhone.getState()); 2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getConnections().size()); 2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(1, mGSMPhone.getForegroundCall().getConnections().size()); 2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ALERTING, mGSMPhone.getForegroundCall().getState()); 2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().getEarliestCreateTime() > 0); 2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestConnectTime()); 2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.getForegroundCall().getConnections().get(0); 2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(!cn.isIncoming()); 2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.NOT_STARTED, cn.getPostDialState()); 2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One ACTIVE connection 2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() != Call.State.ACTIVE); 2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.OFFHOOK, mGSMPhone.getState()); 2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getConnections().size()); 2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(1, mGSMPhone.getForegroundCall().getConnections().size()); 2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().getEarliestCreateTime() > 0); 2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().getEarliestConnectTime() > 0); 2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.getForegroundCall().getConnections().get(0); 2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(!cn.isIncoming()); 2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.COMPLETE, cn.getPostDialState()); 2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One disconnected connection 2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().hangup(); 2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_DISCONNECT); 2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.IDLE, mGSMPhone.getState()); 2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getConnections().size()); 2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(1, mGSMPhone.getForegroundCall().getConnections().size()); 2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getForegroundCall().getState()); 2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().getEarliestCreateTime() > 0); 2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().getEarliestConnectTime() > 0); 2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.getForegroundCall().getEarliestConnection(); 2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, cn.getState()); 2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Back to idle state 2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.clearDisconnected(); 2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.IDLE, mGSMPhone.getState()); 2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getConnections().size()); 2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getConnections().size()); 2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getForegroundCall().getState()); 2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestCreateTime()); 2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestConnectTime()); 2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // cn left over from before phone.clearDisconnected(); 2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, cn.getState()); 2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One ringing (INCOMING) call 3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerRing("18005551212"); 3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_RINGING); 3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.RINGING, mGSMPhone.getState()); 3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getRingingCall().isRinging()); 3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) msg.obj; 3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = (Connection) ar.result; 3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(cn.isRinging()); 3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(mGSMPhone.getRingingCall(), cn.getCall()); 3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(1, mGSMPhone.getRingingCall().getConnections().size()); 3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getConnections().size()); 3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.INCOMING, mGSMPhone.getRingingCall().getState()); 3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getForegroundCall().getState()); 3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getRingingCall().getEarliestCreateTime() > 0); 3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getEarliestConnectTime()); 3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestCreateTime()); 3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestConnectTime()); 3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.getRingingCall().getConnections().get(0); 3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(cn.isIncoming()); 3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.NOT_STARTED, cn.getPostDialState()); 3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One mobile terminated active call 3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.acceptCall(); 3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getRingingCall().getConnections().size() == 1); 3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.OFFHOOK, mGSMPhone.getState()); 3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getRingingCall().isRinging()); 3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getConnections().size()); 3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(1, mGSMPhone.getForegroundCall().getConnections().size()); 3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, 3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getState()); 3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().getEarliestCreateTime() > 0); 3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().getEarliestConnectTime() > 0); 3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.getForegroundCall().getConnections().get(0); 3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(cn.isIncoming()); 3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.NOT_STARTED, cn.getPostDialState()); 3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One disconnected (local hangup) call 3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Connection conn; 3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville conn = mGSMPhone.getForegroundCall().getConnections().get(0); 3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville conn.hangup(); 3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (CallStateException ex) { 3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ex.printStackTrace(); 3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville fail("unexpected ex"); 3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_DISCONNECT); 3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.IDLE, mGSMPhone.getState()); 3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getRingingCall().isRinging()); 3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getConnections().size()); 3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(1, mGSMPhone.getForegroundCall().getConnections().size()); 3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, 3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getState()); 3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().getEarliestCreateTime() > 0); 3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().getEarliestConnectTime() > 0); 3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.getForegroundCall().getEarliestConnection(); 3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, cn.getState()); 3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.LOCAL, cn.getDisconnectCause()); 3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Back to idle state 4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.clearDisconnected(); 4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getRingingCall().isRinging()); 4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.LOCAL, cn.getDisconnectCause()); 4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getConnections().size()); 4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.IDLE, mGSMPhone.getState()); 4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getConnections().size()); 4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getConnections().size()); 4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getForegroundCall().getState()); 4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestCreateTime()); 4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestConnectTime()); 4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // cn left over from before phone.clearDisconnected(); 4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, cn.getState()); 4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One ringing call 4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerRing("18005551212"); 4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getRingingCall().getConnections().isEmpty()); 4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.RINGING, mGSMPhone.getState()); 4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getRingingCall().isRinging()); 4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(1, mGSMPhone.getRingingCall().getConnections().size()); 4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getConnections().size()); 4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.INCOMING, mGSMPhone.getRingingCall().getState()); 4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getForegroundCall().getState()); 4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getRingingCall().getEarliestCreateTime() > 0); 4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getEarliestConnectTime()); 4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestCreateTime()); 4520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestConnectTime()); 4530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 4550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One rejected call 4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.rejectCall(); 4580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 4610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getState() != PhoneConstants.State.IDLE); 4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getRingingCall().isRinging()); 4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(1, mGSMPhone.getRingingCall().getConnections().size()); 4670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getConnections().size()); 4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 4690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getRingingCall().getState()); 4710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getForegroundCall().getState()); 4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 4730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getRingingCall().getEarliestCreateTime() > 0); 4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getEarliestConnectTime()); 4760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestCreateTime()); 4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestConnectTime()); 4790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.getRingingCall().getEarliestConnection(); 4810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, cn.getState()); 4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.INCOMING_MISSED, cn.getDisconnectCause()); 4840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 4860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Back to idle state 4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.clearDisconnected(); 4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.INCOMING_MISSED, cn.getDisconnectCause()); 4920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getConnections().size()); 4930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.IDLE, mGSMPhone.getState()); 4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getConnections().size()); 4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getConnections().size()); 4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 5000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getForegroundCall().getState()); 5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestCreateTime()); 5040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestConnectTime()); 5050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 5070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, cn.getState()); 5080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One ringing call 5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerRing("18005551212"); 5120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 5140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 5150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getRingingCall().getConnections().isEmpty()); 5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.RINGING, mGSMPhone.getState()); 5180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 5190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getRingingCall().isRinging()); 5200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.getRingingCall().getEarliestConnection(); 5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Ringing call disconnects 5240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerHangupForeground(); 5260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 5280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getState() != PhoneConstants.State.IDLE); 5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.INCOMING_MISSED, cn.getDisconnectCause()); 5320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One Ringing Call 5340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerRing("18005551212"); 5360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 5380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 5390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getState() != PhoneConstants.State.RINGING); 5400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.getRingingCall().getEarliestConnection(); 5430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One answered call 5450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.acceptCall(); 5460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 5480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 5490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getState() != PhoneConstants.State.OFFHOOK); 5500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 5520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 5530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // one holding call 5550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.switchHoldingAndActive(); 5560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getBackgroundCall().getState() == Call.State.IDLE); 5600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getForegroundCall().getState()); 5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // one active call 5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.switchHoldingAndActive(); 5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 5690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville while (mGSMPhone.getBackgroundCall().getState() == Call.State.HOLDING); 5720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 5740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 5750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One disconnected call in the foreground slot 5770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerHangupAll(); 5790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 5810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 5820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getState() != PhoneConstants.State.IDLE); 5830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getForegroundCall().getState()); 5850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.NORMAL, cn.getDisconnectCause()); 5860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Test missed calls 5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerRing("18005551212"); 5900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 5920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 5930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getState() != PhoneConstants.State.RINGING); 5940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.rejectCall(); 5960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 5980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 5990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (msg.what != EVENT_DISCONNECT); 6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) msg.obj; 6020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = (Connection) ar.result; 6030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.INCOMING_MISSED, cn.getDisconnectCause()); 6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.IDLE, mGSMPhone.getState()); 6060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getRingingCall().getState()); 6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Test incoming not missed calls 6090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerRing("18005551212"); 6110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 6130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 6140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getState() != PhoneConstants.State.RINGING); 6150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.getRingingCall().getEarliestConnection(); 6170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.acceptCall(); 6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 6220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getState() != PhoneConstants.State.OFFHOOK); 6230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.NOT_DISCONNECTED, cn.getDisconnectCause()); 6250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 6260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 6270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 6290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().hangup(); 6300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (CallStateException ex) { 6310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ex.printStackTrace(); 6320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville fail("unexpected ex"); 6330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 6360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 6370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() 6380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville != Call.State.DISCONNECTED); 6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.LOCAL, cn.getDisconnectCause()); 6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // 6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Test held and hangup held calls 6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // 6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One ALERTING call 6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("+13125551212"); 6480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 6500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 6510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getState() != PhoneConstants.State.OFFHOOK); 6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 6540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 6560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 6570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One ACTIVE call 6590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 6610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 6620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() != Call.State.ACTIVE); 6630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 6650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One ACTIVE call, one ringing call 6670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerRing("18005551212"); 6690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 6720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getState() != PhoneConstants.State.RINGING); 6730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getRingingCall().isRinging()); 6760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // One HOLDING call, one ACTIVE call 6780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.acceptCall(); 6790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 6810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 6820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getState() != PhoneConstants.State.OFFHOOK); 6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 6850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 6870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 6880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 6890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.canConference()); 6900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Conference the two 6920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.conference(); 6930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 6950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 6960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getBackgroundCall().getState() != Call.State.IDLE); 6970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 7010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 7020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().isMultiparty()); 7030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Hold the multiparty call 7060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.switchHoldingAndActive(); 7070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 7090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 7100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville while (mGSMPhone.getBackgroundCall().getState() != Call.State.HOLDING); 7120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 7140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getForegroundCall().getState()); 7150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getBackgroundCall().isMultiparty()); 7160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 7170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Multiparty call on hold, call waiting added 7190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerRing("18005558355"); 7210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 7230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 7240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getState() != PhoneConstants.State.RINGING); 7250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getRingingCall().isRinging()); 7280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getForegroundCall().getState()); 7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getBackgroundCall().isMultiparty()); 7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.WAITING, mGSMPhone.getRingingCall().getState()); 7330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.canConference()); 7340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Hangup conference call, ringing call still around 7360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getBackgroundCall().hangup(); 7370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 7390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 7400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getBackgroundCall().getState() != Call.State.DISCONNECTED); 7410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.RINGING, mGSMPhone.getState()); 7430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getBackgroundCall().getState()); 7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 7460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getRingingCall().isRinging()); 7470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Reject waiting call 7490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.rejectCall(); 7500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 7520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 7530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getState() != PhoneConstants.State.IDLE); 7540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getForegroundCall().isDialingOrAlerting()); 7560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getRingingCall().isRinging()); 7570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testOutgoingCallFailImmediately() throws Exception { 7600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Test outgoing call fail-immediately edge case 7630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This happens when a call terminated before ever appearing in a 7640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // call list 7650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This should land the immediately-failing call in the 7660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // ForegroundCall list as an IDLE call 7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.setNextDialFailImmediately(true); 7680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Connection cn = mGSMPhone.dial("+13125551212"); 7700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_DISCONNECT); 7720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 7730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.IDLE, mGSMPhone.getState()); 7740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.NORMAL, cn.getDisconnectCause()); 7760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getConnections().size()); 7780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(1, mGSMPhone.getForegroundCall().getConnections().size()); 7790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 7800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 7820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getForegroundCall().getState()); 7830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 7840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().getEarliestCreateTime() > 0); 7860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestConnectTime()); 7870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testHangupOnOutgoing() throws Exception { 7900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Connection cn; 7910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 7920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.setAutoProgressConnectingCall(false); 7940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Test 1: local hangup in "DIALING" state 7960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("+13125551212"); 7970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 7990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 8000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville while (mGSMPhone.getForegroundCall().getState() != Call.State.DIALING); 8020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.getForegroundCall().getEarliestConnection(); 8040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().hangup(); 8060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_DISCONNECT); 8080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 8090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.IDLE, mGSMPhone.getState()); 8100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getForegroundCall().getState()); 8120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.LOCAL, cn.getDisconnectCause()); 8130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Test 2: local hangup in "ALERTING" state 8150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("+13125551212"); 8160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 8180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 8190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getState() != PhoneConstants.State.OFFHOOK); 8200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 8220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 8240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 8250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville while (mGSMPhone.getForegroundCall().getState() != Call.State.ALERTING); 8270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.getForegroundCall().getEarliestConnection(); 8290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().hangup(); 8310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_DISCONNECT); 8330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 8340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.IDLE, mGSMPhone.getState()); 8360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getForegroundCall().getState()); 8380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.LOCAL, cn.getDisconnectCause()); 8390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Test 3: local immediate hangup before GSM index is 8410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // assigned (CallTracker.hangupPendingMO case) 8420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.pauseResponses(); 8440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.dial("+13125551212"); 8460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn.hangup(); 8480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.resumeResponses(); 8500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_DISCONNECT); 8520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 8530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.IDLE, mGSMPhone.getState()); 8540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getForegroundCall().getState()); 8560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.LOCAL, 8580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getEarliestConnection().getDisconnectCause()); 8590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testHangupOnChannelClose() throws Exception { 8620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("+13125551212"); 8630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 8650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 8660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getConnections().isEmpty()); 8670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.shutdown(); 8690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 8710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 8720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.clearDisconnected(); 8730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (!mGSMPhone.getForegroundCall().getConnections().isEmpty()); 8740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testIncallMmiCallDeflection() throws Exception { 8770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 8780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // establish an active call 8800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("+13125551212"); 8810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 8830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 8840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 8850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() != Call.State.ACTIVE); 8860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 8880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 8890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // establish a ringing (WAITING) call 8910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerRing("18005551212"); 8930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_RINGING); 8950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 8960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.RINGING, mGSMPhone.getState()); 8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getRingingCall().isRinging()); 8990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.WAITING, mGSMPhone.getRingingCall().getState()); 9000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 9010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 9020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Simulate entering 0 followed by SEND: release all held calls 9040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // or sets UDUB for a waiting call. 9050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("0"); 9060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 9080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 9090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getRingingCall().getState() == Call.State.WAITING); 9100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.OFFHOOK, mGSMPhone.getState()); 9120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getRingingCall().isRinging()); 9130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getRingingCall().getState()); 9140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 9150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 9160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // change the active call to holding call 9180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.switchHoldingAndActive(); 9190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 9210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 9220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getBackgroundCall().getState() == Call.State.IDLE); 9230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getForegroundCall().getState()); 9260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 9270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Simulate entering 0 followed by SEND: release all held calls 9290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // or sets UDUB for a waiting call. 9300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("0"); 9310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 9330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 9340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getBackgroundCall().getState() == Call.State.HOLDING); 9350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.IDLE, mGSMPhone.getState()); 9370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getForegroundCall().getState()); 9380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getBackgroundCall().getState()); 9390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testIncallMmiCallWaiting() throws Exception { 9420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 9430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // establish an active call 9450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("+13125551212"); 9460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 9480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 9490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 9500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() != Call.State.ACTIVE); 9510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 9530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 9540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // establish a ringing (WAITING) call 9560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerRing("18005551212"); 9580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 9600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(ANY_MESSAGE); 9610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 9620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (msg.what != EVENT_RINGING); 9630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.RINGING, mGSMPhone.getState()); 9650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getRingingCall().isRinging()); 9660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.WAITING, mGSMPhone.getRingingCall().getState()); 9670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 9680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 9690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Simulate entering 1 followed by SEND: release all active calls 9710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // (if any exist) and accepts the other (held or waiting) call. 9720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("1"); 9740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 9760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 9770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getRingingCall().getState() == Call.State.WAITING); 9780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.OFFHOOK, mGSMPhone.getState()); 9800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getRingingCall().isRinging()); 9810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 9820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 9830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("18005551212", 9840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getConnections().get(0).getAddress()); 9850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // change the active call to holding call 9870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.switchHoldingAndActive(); 9880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 9900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 9910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getBackgroundCall().getState() == Call.State.IDLE); 9920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getForegroundCall().getState()); 9940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 9950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Simulate entering 1 followed by SEND: release all active calls 9970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // (if any exist) and accepts the other (held or waiting) call. 9980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("1"); 9990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 10010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 10020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getBackgroundCall().getState() != Call.State.IDLE); 10030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.OFFHOOK, mGSMPhone.getState()); 10050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 10060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 10070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("18005551212", 10080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getConnections().get(0).getAddress()); 10090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // at this point, the active call with number==18005551212 should 10110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // have the gsm index of 2 10120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerRing("16505550100"); 10140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_RINGING); 10160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 10170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.RINGING, mGSMPhone.getState()); 10190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getRingingCall().isRinging()); 10200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.WAITING, mGSMPhone.getRingingCall().getState()); 10210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 10220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 10230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Simulate entering "12" followed by SEND: release the call with 10250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // gsm index equals to 2. 10260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("12"); 10270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 10290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 10300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() == Call.State.ACTIVE); 10310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.RINGING, mGSMPhone.getState()); 10330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getRingingCall().isRinging()); 10340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.WAITING, mGSMPhone.getRingingCall().getState()); 10350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getForegroundCall().getState()); 10360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 10370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.acceptCall(); 10390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 10410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 10420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getState() != PhoneConstants.State.OFFHOOK); 10430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.OFFHOOK, mGSMPhone.getState()); 10450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getRingingCall().isRinging()); 10460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 10470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 10480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 10490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // at this point, the call with number==16505550100 should 10510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // have the gsm index of 1 10520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("+13125551212"); 10530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 10550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 10560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 10570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() != Call.State.ACTIVE || 10580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getBackgroundCall().getState() != Call.State.HOLDING); 10590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 10610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 10620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // at this point, the active call with number==13125551212 should 10640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // have the gsm index of 2 10650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Simulate entering "11" followed by SEND: release the call with 10670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // gsm index equals to 1. This should not be allowed, and a 10680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Supplementary Service notification must be received. 10690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("11"); 10700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(SUPP_SERVICE_FAILED); 10720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 10730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse("IncallMmiCallWaiting: command should not work on holding call", msg == null); 10740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Simulate entering "12" followed by SEND: release the call with 10760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // gsm index equals to 2. 10770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("12"); 10780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 10800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 10810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() == Call.State.ACTIVE); 10820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getForegroundCall().getState()); 10840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 10850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Simulate entering 1 followed by SEND: release all active calls 10870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // (if any exist) and accepts the other (held or waiting) call. 10880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("1"); 10890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 10910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 10920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getBackgroundCall().getState() != Call.State.IDLE); 10930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.OFFHOOK, mGSMPhone.getState()); 10950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 10960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 10970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("16505550100", 10980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getConnections().get(0).getAddress()); 10990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Simulate entering "11" followed by SEND: release the call with 11010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // gsm index equals to 1. 11020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("11"); 11030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 11050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 11060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() == Call.State.ACTIVE); 11070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getForegroundCall().getState()); 11090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 11100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testIncallMmiCallHold() throws Exception { 11130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 11140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // establish an active call 11160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("13125551212"); 11170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 11190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 11200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 11210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() != Call.State.ACTIVE); 11220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 11240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 11250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // establish a ringing (WAITING) call 11270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerRing("18005551212"); 11290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_RINGING); 11310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 11320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.RINGING, mGSMPhone.getState()); 11340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getRingingCall().isRinging()); 11350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.WAITING, mGSMPhone.getRingingCall().getState()); 11360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 11370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 11380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // simulate entering 2 followed by SEND: place all active calls 11400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // (if any exist) on hold and accepts the other (held or waiting) 11410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // call 11420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("2"); 11440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 11460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 11470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getRingingCall().getState() == Call.State.WAITING); 11480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mGSMPhone.getRingingCall().isRinging()); 11510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.OFFHOOK, mGSMPhone.getState()); 11520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 11530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, 11540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getState()); 11550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("18005551212", 11560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getConnections().get(0).getAddress()); 11570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 11580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("13125551212", 11590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getBackgroundCall().getConnections().get(0).getAddress()); 11600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // swap the active and holding calls 11620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("2"); 11630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_PHONE_STATE_CHANGED); 11650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 11660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 11680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("13125551212", 11690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getConnections().get(0).getAddress()); 11700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 11710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("18005551212", 11720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getBackgroundCall().getConnections().get(0).getAddress()); 11730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // merge the calls 11750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.conference(); 11760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 11780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 11790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getBackgroundCall().getState() != Call.State.IDLE); 11800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 11820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 11830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(2, mGSMPhone.getForegroundCall().getConnections().size()); 11840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // at this point, we have an active conference call, with 11860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // call(1) = 13125551212 and call(2) = 18005551212 11870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Simulate entering "23" followed by SEND: places all active call 11890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // on hold except call 3. This should fail and a supplementary service 11900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // failed notification should be received. 11910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("23"); 11930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(SUPP_SERVICE_FAILED); 11950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 11960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse("IncallMmiCallHold: separate should have failed!", msg == null); 11970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Simulate entering "21" followed by SEND: places all active call 11990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // on hold except call 1. 12000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("21"); 12010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 12030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 12040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getBackgroundCall().getState() == Call.State.IDLE); 12050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 12070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("13125551212", 12080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getConnections().get(0).getAddress()); 12090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 12100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("18005551212", 12110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getBackgroundCall().getConnections().get(0).getAddress()); 12120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testIncallMmiMultipartyServices() throws Exception { 12150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // establish an active call 12160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("13125551212"); 12170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 12190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 12200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 12210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() != Call.State.ACTIVE); 12220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 12240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 12250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // dial another call 12270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("18005551212"); 12280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 12300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 12310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 12320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() != Call.State.ACTIVE); 12330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 12350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 12360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("3"); 12380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 12400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 12410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getBackgroundCall().getState() != Call.State.IDLE); 12420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.OFFHOOK, mGSMPhone.getState()); 12440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 12450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("18005551212", 12460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getConnections().get(0).getAddress()); 12470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("13125551212", 12480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getConnections().get(1).getAddress()); 12490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 12500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testCallIndex() throws Exception { 12530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 12540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // establish the first call 12560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("16505550100"); 12570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 12590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 12600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 12610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() != Call.State.ACTIVE); 12620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 12640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 12650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String baseNumber = "1650555010"; 12670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 1; i < 6; i++) { 12690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String number = baseNumber + i; 12700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial(number); 12720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 12740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 12750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 12760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() != Call.State.ACTIVE); 12770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 12790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 12800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mGSMPhone.getBackgroundCall().getConnections().size() >= 5) { 12820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 12830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.conference(); 12860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 12880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 12890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getBackgroundCall().getState() != Call.State.IDLE); 12900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 12920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 12930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 12960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("16505550105", 12970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getConnections().get(0).getAddress()); 12980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 12990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // create an incoming call, this call should have the call index 13010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // of 7 13020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerRing("18005551212"); 13030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_RINGING); 13050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 13060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.RINGING, mGSMPhone.getState()); 13080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getRingingCall().isRinging()); 13090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.WAITING, mGSMPhone.getRingingCall().getState()); 13100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 13110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 13120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // hangup the background call and accept the ringing call 13140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getBackgroundCall().hangup(); 13150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.acceptCall(); 13160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 13180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 13190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getRingingCall().getState() != Call.State.IDLE); 13200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 13220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("18005551212", 13230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getConnections().get(0).getAddress()); 13240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 13250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("16505550105", 13260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getBackgroundCall().getConnections().get(0).getAddress()); 13270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("17"); 13290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 13310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 13320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() == Call.State.ACTIVE); 13330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getForegroundCall().getState()); 13350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.HOLDING, mGSMPhone.getBackgroundCall().getState()); 13360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("16505550105", 13370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getBackgroundCall().getConnections().get(0). 13380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville getAddress()); 13390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("1"); 13410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 13430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 13440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() != Call.State.ACTIVE); 13450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.ACTIVE, mGSMPhone.getForegroundCall().getState()); 13470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 13480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.handleInCallMmiCommands("16"); 13500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 13520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 13530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (mGSMPhone.getForegroundCall().getState() == Call.State.ACTIVE); 13540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getForegroundCall().getState()); 13560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 13570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testPostDialSequences() throws Exception { 13600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 13610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar; 13620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Connection cn; 13630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("+13125551212,1234;5N8xx"); 13650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 13670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 13680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) (msg.obj); 13690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = (Connection) (ar.result); 13700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(',', msg.arg1); 13710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("1234;5N8", cn.getRemainingPostDialString()); 13720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 13750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 13760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals('1', msg.arg1); 13770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) (msg.obj); 13780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.STARTED, ar.userObj); 13790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 13820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 13830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals('2', msg.arg1); 13840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) (msg.obj); 13850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.STARTED, ar.userObj); 13860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 13890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 13900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals('3', msg.arg1); 13910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) (msg.obj); 13920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.STARTED, ar.userObj); 13930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 13960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 13970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals('4', msg.arg1); 13980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) (msg.obj); 13990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.STARTED, ar.userObj); 14000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 14030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 14040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(';', msg.arg1); 14050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) (msg.obj); 14060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = (Connection) (ar.result); 14070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.WAIT, cn.getPostDialState()); 14080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.WAIT, ar.userObj); 14090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn.proceedAfterWaitChar(); 14100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 14130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 14140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals('5', msg.arg1); 14150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) (msg.obj); 14160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.STARTED, ar.userObj); 14170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 14200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals('N', msg.arg1); 14210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) (msg.obj); 14220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = (Connection) (ar.result); 14230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.WILD, cn.getPostDialState()); 14240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.WILD, ar.userObj); 14250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn.proceedAfterWildChar(",6;7"); 14260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 14290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 14300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) (msg.obj); 14310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = (Connection) (ar.result); 14320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(',', msg.arg1); 14330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("6;78", cn.getRemainingPostDialString()); 14340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 14360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 14370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals('6', msg.arg1); 14380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) (msg.obj); 14390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.STARTED, ar.userObj); 14400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 14420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 14430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(';', msg.arg1); 14440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) (msg.obj); 14450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = (Connection) (ar.result); 14460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.WAIT, cn.getPostDialState()); 14470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.WAIT, ar.userObj); 14480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn.proceedAfterWaitChar(); 14490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 14510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 14520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals('7', msg.arg1); 14530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) (msg.obj); 14540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.STARTED, ar.userObj); 14550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 14570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 14580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals('8', msg.arg1); 14590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) (msg.obj); 14600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.STARTED, ar.userObj); 14610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Bogus chars at end should be ignored 14630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 14640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 14650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, msg.arg1); 14660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) (msg.obj); 14670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = (Connection) (ar.result); 14680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.COMPLETE, 14690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn.getPostDialState()); 14700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.COMPLETE, ar.userObj); 14710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testPostDialCancel() throws Exception { 14740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 14750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar; 14760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Connection cn; 14770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("+13125551212,N"); 14790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingToActive(); 14800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingToActive(); 14820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 14840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 14850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(',', msg.arg1); 14860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_POST_DIAL); 14880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals('N', msg.arg1); 14890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) (msg.obj); 14900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = (Connection) (ar.result); 14910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.WILD, cn.getPostDialState()); 14920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn.cancelPostDial(); 14930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.PostDialState.CANCELLED, cn.getPostDialState()); 14950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testOutgoingCallFail() throws Exception { 14980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 14990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* 15000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * normal clearing 15010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 15020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.setNextCallFailCause(CallFailCause.NORMAL_CLEARING); 15040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.setAutoProgressConnectingCall(false); 15050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Connection cn = mGSMPhone.dial("+13125551212"); 15070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 15090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // I'm just progressing the call state to 15110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // ensure getCurrentCalls() gets processed... 15120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Normally these failure conditions would happen in DIALING 15130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // not ALERTING 15140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 15150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 15160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (cn.getState() == Call.State.DIALING); 15170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerHangupAll(); 15200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_DISCONNECT); 15210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 15220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.IDLE, mGSMPhone.getState()); 15230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.NORMAL, cn.getDisconnectCause()); 15250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getConnections().size()); 15270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(1, mGSMPhone.getForegroundCall().getConnections().size()); 15280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 15290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 15310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getForegroundCall().getState()); 15320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 15330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().getEarliestCreateTime() > 0); 15350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestConnectTime()); 15360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* 15380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * busy 15390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 15400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.setNextCallFailCause(CallFailCause.USER_BUSY); 15420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.setAutoProgressConnectingCall(false); 15430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.dial("+13125551212"); 15450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 15470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // I'm just progressing the call state to 15490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // ensure getCurrentCalls() gets processed... 15500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Normally these failure conditions would happen in DIALING 15510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // not ALERTING 15520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 15530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", mGSMTestHandler.waitForMessage(ANY_MESSAGE)); 15540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (cn.getState() == Call.State.DIALING); 15550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerHangupAll(); 15580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_DISCONNECT); 15590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 15600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.IDLE, mGSMPhone.getState()); 15610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.BUSY, cn.getDisconnectCause()); 15630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getConnections().size()); 15650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(1, mGSMPhone.getForegroundCall().getConnections().size()); 15660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 15670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 15690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, 15700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.getForegroundCall().getState()); 15710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 15720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().getEarliestCreateTime() > 0); 15740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestConnectTime()); 15750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* 15770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * congestion 15780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 15790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.setNextCallFailCause(CallFailCause.NO_CIRCUIT_AVAIL); 15810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.setAutoProgressConnectingCall(false); 15820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn = mGSMPhone.dial("+13125551212"); 15840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.progressConnectingCallState(); 15860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // I'm just progressing the call state to 15880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // ensure getCurrentCalls() gets processed... 15890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Normally these failure conditions would happen in DIALING 15900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // not ALERTING 15910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 15920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(ANY_MESSAGE); 15930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 15940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (cn.getState() == Call.State.DIALING); 15950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerHangupAll(); 15980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Unlike the while loops above, this one waits 16000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // for a "phone state changed" message back to "idle" 16010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville do { 16020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(ANY_MESSAGE); 16030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 16040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } while (!(msg.what == EVENT_PHONE_STATE_CHANGED 16050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville && mGSMPhone.getState() == PhoneConstants.State.IDLE)); 16060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(PhoneConstants.State.IDLE, mGSMPhone.getState()); 16080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Connection.DisconnectCause.CONGESTION, cn.getDisconnectCause()); 16100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getRingingCall().getConnections().size()); 16120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(1, mGSMPhone.getForegroundCall().getConnections().size()); 16130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getBackgroundCall().getConnections().size()); 16140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getRingingCall().getState()); 16160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.DISCONNECTED, mGSMPhone.getForegroundCall().getState()); 16170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(Call.State.IDLE, mGSMPhone.getBackgroundCall().getState()); 16180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mGSMPhone.getForegroundCall().getEarliestCreateTime() > 0); 16200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mGSMPhone.getForegroundCall().getEarliestConnectTime()); 16210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testSSNotification() throws Exception { 16240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // MO 16250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runTest(0, SuppServiceNotification.MO_CODE_UNCONDITIONAL_CF_ACTIVE); 16260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runTest(0, SuppServiceNotification.MO_CODE_CALL_IS_WAITING); 16270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runTest(0, SuppServiceNotification.MO_CODE_CALL_DEFLECTED); 16280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // MT 16300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runTest(1, SuppServiceNotification.MT_CODE_FORWARDED_CALL); 16310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runTest(1, SuppServiceNotification.MT_CODE_CALL_CONNECTED_ECT); 16320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runTest(1, SuppServiceNotification.MT_CODE_ADDITIONAL_CALL_FORWARDED); 16330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void runTest(int type, int code) { 16360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 16370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerSsn(type, code); 16390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_SSN); 16410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 16420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = (AsyncResult) msg.obj; 16430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNull(ar.exception); 16450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SuppServiceNotification notification = 16470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville (SuppServiceNotification) ar.result; 16480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(type, notification.notificationType); 16500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(code, notification.code); 16510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUssd() throws Exception { 16540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Quick hack to work around a race condition in this test: 16550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // We may initiate a USSD MMI before GSMPhone receives its initial 16560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // GSMTestHandler.EVENT_RADIO_OFF_OR_NOT_AVAILABLE event. When the phone sees this 16570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // event, it will cancel the just issued USSD MMI, which we don't 16580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // want. So sleep a little first. 16590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 16600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Thread.sleep(1000); 16610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (InterruptedException ex) { 16620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // do nothing 16630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville verifyNormal(); 16660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville verifyCancel(); 16670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville varifyNetworkInitiated(); 16680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void varifyNetworkInitiated() { 16710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 16720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar; 16730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville MmiCode mmi; 16740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Receive an incoming NOTIFY 16760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerIncomingUssd("0", "NOTIFY message"); 16770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_MMI_COMPLETE); 16780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 16790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) msg.obj; 16800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mmi = (MmiCode) ar.result; 16810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mmi.isUssdRequest()); 16830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Receive a REQUEST and send response 16850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerIncomingUssd("1", "REQUEST Message"); 16860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_MMI_COMPLETE); 16870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 16880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) msg.obj; 16890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mmi = (MmiCode) ar.result; 16900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mmi.isUssdRequest()); 16920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.sendUssdResponse("## TEST: TEST_GSMPhone responding..."); 16940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_MMI_INITIATE); 16950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 16960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) msg.obj; 16970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mmi = (MmiCode) ar.result; 16980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville GsmMmiCode gsmMmi = (GsmMmiCode) mmi; 17000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(gsmMmi.isPendingUSSD()); 17010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_MMI_COMPLETE); 17020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 17030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) msg.obj; 17040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mmi = (MmiCode) ar.result; 17050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNull(ar.exception); 17070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertFalse(mmi.isUssdRequest()); 17080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Receive a REQUEST and cancel 17100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.triggerIncomingUssd("1", "REQUEST Message"); 17110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_MMI_COMPLETE); 17120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 17130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) msg.obj; 17140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mmi = (MmiCode) ar.result; 17150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mmi.isUssdRequest()); 17170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mmi.cancel(); 17190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_MMI_COMPLETE); 17200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 17210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) msg.obj; 17230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mmi = (MmiCode) ar.result; 17240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNull(ar.exception); 17260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(MmiCode.State.CANCELLED, mmi.getState()); 17270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List mmiList = mGSMPhone.getPendingMmiCodes(); 17290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, mmiList.size()); 17300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void verifyNormal() throws CallStateException { 17330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 17340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar; 17350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville MmiCode mmi; 17360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("#646#"); 17380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_MMI_INITIATE); 17400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 17410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_MMI_COMPLETE); 17430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 17440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult) msg.obj; 17460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mmi = (MmiCode) ar.result; 17470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(MmiCode.State.COMPLETE, mmi.getState()); 17480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void verifyCancel() throws CallStateException { 17520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 17530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * This case makes an assumption that dial() will add the USSD 17540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * to the "pending MMI codes" list before it returns. This seems 17550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * like reasonable semantics. It also assumes that the USSD 17560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * request in question won't complete until we get back to the 17570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * event loop, thus cancel() is safe. 17580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 17590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 17600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.dial("#646#"); 17620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List<? extends MmiCode> pendingMmis = mGSMPhone.getPendingMmiCodes(); 17640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(1, pendingMmis.size()); 17660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville MmiCode mmi = pendingMmis.get(0); 17680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertTrue(mmi.isCancelable()); 17690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mmi.cancel(); 17700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_MMI_INITIATE); 17720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 17730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_MMI_COMPLETE); 17750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 17760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = (AsyncResult) msg.obj; 17780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mmi = (MmiCode) ar.result; 17790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(MmiCode.State.CANCELLED, mmi.getState()); 17810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testRilHooks() throws Exception { 17840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // 17850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // These test cases all assume the RIL OEM hooks 17860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // just echo back their input 17870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // 17880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg; 17900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar; 17910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // null byte array 17930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.invokeOemRilRequestRaw(null, mHandler.obtainMessage(EVENT_OEM_RIL_MESSAGE)); 17950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_OEM_RIL_MESSAGE); 17970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 17980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = ((AsyncResult) msg.obj); 18000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNull(ar.result); 18020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNull(ar.exception); 18030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // empty byte array 18050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.invokeOemRilRequestRaw(new byte[0], mHandler.obtainMessage(EVENT_OEM_RIL_MESSAGE)); 18070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_OEM_RIL_MESSAGE); 18090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 18100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = ((AsyncResult) msg.obj); 18120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, ((byte[]) (ar.result)).length); 18140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNull(ar.exception); 18150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // byte array with data 18170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.invokeOemRilRequestRaw("Hello".getBytes("utf-8"), 18190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mHandler.obtainMessage(EVENT_OEM_RIL_MESSAGE)); 18200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_OEM_RIL_MESSAGE); 18220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 18230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = ((AsyncResult) msg.obj); 18250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Hello", new String(((byte[]) (ar.result)), "utf-8")); 18270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNull(ar.exception); 18280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // null strings 18300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.invokeOemRilRequestStrings(null, mHandler.obtainMessage(EVENT_OEM_RIL_MESSAGE)); 18320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_OEM_RIL_MESSAGE); 18340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 18350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = ((AsyncResult) msg.obj); 18370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNull(ar.result); 18390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNull(ar.exception); 18400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // empty byte array 18420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.invokeOemRilRequestStrings(new String[0], 18440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mHandler.obtainMessage(EVENT_OEM_RIL_MESSAGE)); 18450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_OEM_RIL_MESSAGE); 18470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 18480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = ((AsyncResult) msg.obj); 18500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, ((String[]) (ar.result)).length); 18520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNull(ar.exception); 18530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Strings with data 18550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String s[] = new String[1]; 18570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville s[0] = "Hello"; 18590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGSMPhone.invokeOemRilRequestStrings(s, mHandler.obtainMessage(EVENT_OEM_RIL_MESSAGE)); 18610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_OEM_RIL_MESSAGE); 18630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 18640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = ((AsyncResult) msg.obj); 18660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Hello", ((String[]) (ar.result))[0]); 18680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(1, ((String[]) (ar.result)).length); 18690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNull(ar.exception); 18700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testMmi() throws Exception { 18730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.setAutoProgressConnectingCall(false); 18740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // "valid" MMI sequences 18760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runValidMmi("*#67#", false); 18770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runValidMmi("##43*11#", false); 18780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runValidMmi("#33*1234*11#", false); 18790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runValidMmi("*21*6505551234**5#", false); 18800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runValidMmi("**03**1234*4321*4321#", false); 18810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // pound string 18820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runValidMmi("5308234092307540923#", true); 18830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // short code 18840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runValidMmi("22", true); 18850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // as part of call setup 18860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runValidMmiWithConnect("*31#6505551234"); 18870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // invalid MMI sequences 18890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runNotMmi("6505551234"); 18900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runNotMmi("1234#*12#34566654"); 18910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville runNotMmi("*#*#12#*"); 18920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void runValidMmi(String dialString, boolean cancelable) throws CallStateException { 18950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Connection c = mGSMPhone.dial(dialString); 18960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNull(c); 18970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message msg = mGSMTestHandler.waitForMessage(EVENT_MMI_INITIATE); 18980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 18990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Should not be cancelable. 19000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = (AsyncResult) msg.obj; 19010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville MmiCode mmi = (MmiCode) ar.result; 19020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(cancelable, mmi.isCancelable()); 19030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville msg = mGSMTestHandler.waitForMessage(EVENT_MMI_COMPLETE); 19050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull("Message Time Out", msg); 19060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 19070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void runValidMmiWithConnect(String dialString) throws CallStateException { 19090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.pauseResponses(); 19100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Connection c = mGSMPhone.dial(dialString); 19120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull(c); 19130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville hangup(c); 19150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 19160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void hangup(Connection cn) throws CallStateException { 19180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cn.hangup(); 19190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.resumeResponses(); 19210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull(mGSMTestHandler.waitForMessage(EVENT_DISCONNECT)); 19220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 19240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void runNotMmi(String dialString) throws CallStateException { 19260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRadioControl.pauseResponses(); 19270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Connection c = mGSMPhone.dial(dialString); 19290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertNotNull(c); 19300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville hangup(c); 19320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 19330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 1934