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