1f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu/* 2f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu * Copyright (C) 2016 The Android Open Source Project 3f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu * 4f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu * Licensed under the Apache License, Version 2.0 (the "License"); 5f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu * you may not use this file except in compliance with the License. 6f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu * You may obtain a copy of the License at 7f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu * 8f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu * http://www.apache.org/licenses/LICENSE-2.0 9f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu * 10f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu * Unless required by applicable law or agreed to in writing, software 11f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu * distributed under the License is distributed on an "AS IS" BASIS, 12f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu * See the License for the specific language governing permissions and 14f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu * limitations under the License. 15f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu */ 16ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanpackage com.android.internal.telephony.imsphone; 17f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 18f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport android.os.AsyncResult; 19f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport android.os.Bundle; 20f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport android.os.Handler; 21f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport android.os.Looper; 22f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport android.os.Message; 23ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport android.telephony.DisconnectCause; 24f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport android.telephony.PhoneNumberUtils; 25f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport android.telephony.ServiceState; 26f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport android.test.suitebuilder.annotation.MediumTest; 27ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport android.test.suitebuilder.annotation.SmallTest; 28f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 29f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport com.android.ims.ImsCallProfile; 30ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport com.android.internal.telephony.Call; 31ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport com.android.internal.telephony.Connection; 32ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport com.android.internal.telephony.GsmCdmaCall; 33ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport com.android.internal.telephony.PhoneConstants; 34ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport com.android.internal.telephony.TelephonyTest; 35f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 36f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport org.junit.After; 37f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport org.junit.Assert; 38f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport org.junit.Before; 39f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport org.junit.Test; 40f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport org.mockito.Mock; 41f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport org.mockito.invocation.InvocationOnMock; 42f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport org.mockito.stubbing.Answer; 43f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 44f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport java.lang.reflect.Field; 45f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 46f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxuimport static com.android.internal.telephony.TelephonyTestUtils.waitForMs; 47ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport static org.junit.Assert.assertEquals; 48ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport static org.junit.Assert.assertFalse; 49ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport static org.junit.Assert.assertNull; 50ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport static org.junit.Assert.assertTrue; 51ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport static org.mockito.Mockito.any; 52ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport static org.mockito.Mockito.anyChar; 53ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport static org.mockito.Mockito.doAnswer; 54ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport static org.mockito.Mockito.doReturn; 55ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport static org.mockito.Mockito.eq; 56ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport static org.mockito.Mockito.times; 57ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport static org.mockito.Mockito.verify; 58f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 59f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxupublic class ImsPhoneConnectionTest extends TelephonyTest { 60f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu private ImsPhoneConnection mConnectionUT; 61f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu private Bundle mBundle = new Bundle(); 62f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Mock 63f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu private ImsPhoneCall mForeGroundCall; 64f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Mock 65f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu private ImsPhoneCall mBackGroundCall; 66f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Mock 67f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu private ImsPhoneCall mRingGroundCall; 68f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 69f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Before 70f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu public void setUp() throws Exception { 71f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu super.setUp(getClass().getSimpleName()); 72f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu replaceInstance(Handler.class, "mLooper", mImsCT, Looper.getMainLooper()); 73f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu replaceInstance(ImsPhoneCallTracker.class, "mForegroundCall", mImsCT, mForeGroundCall); 74f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu replaceInstance(ImsPhoneCallTracker.class, "mBackgroundCall", mImsCT, mBackGroundCall); 75f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu replaceInstance(ImsPhoneCallTracker.class, "mRingingCall", mImsCT, mRingGroundCall); 76f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu replaceInstance(ImsPhoneCallTracker.class, "mPhone", mImsCT, mImsPhone); 77f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 78f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mImsCallProfile.mCallExtras = mBundle; 79f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu doReturn(ImsPhoneCall.State.IDLE).when(mForeGroundCall).getState(); 80f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu } 81f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 82f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @After 83f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu public void tearDown() throws Exception { 84f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu super.tearDown(); 85f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu } 86f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 87f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Test 88f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @SmallTest 89f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu public void testImsConnectionSanity() { 90f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu logd("Testing initial state of MT ImsPhoneConnection"); 91f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mConnectionUT = new ImsPhoneConnection(mImsPhone, mImsCall, mImsCT, mForeGroundCall, false); 92f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 93f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(ImsPhoneCall.State.IDLE, mConnectionUT.getState()); 94f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(PhoneConstants.PRESENTATION_UNKNOWN, mConnectionUT.getNumberPresentation()); 95f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(PhoneConstants.PRESENTATION_UNKNOWN, mConnectionUT.getCnapNamePresentation()); 96f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(Connection.PostDialState.NOT_STARTED, mConnectionUT.getPostDialState()); 97f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(0, mConnectionUT.getDisconnectTime()); 98f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(0, mConnectionUT.getHoldDurationMillis()); 99f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertNull(mConnectionUT.getOrigDialString()); 100f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertFalse(mConnectionUT.isMultiparty()); 101f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertFalse(mConnectionUT.isConferenceHost()); 102f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu verify(mForeGroundCall, times(1)).attach((Connection) any(), 103f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu eq(ImsPhoneCall.State.INCOMING)); 104f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 105f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu logd("Testing initial state of MO ImsPhoneConnection"); 106f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mConnectionUT = new ImsPhoneConnection(mImsPhone, String.format("+1 (700).555-41NN%c1234", 107f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu PhoneNumberUtils.PAUSE), mImsCT, mForeGroundCall, false); 108f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(PhoneConstants.PRESENTATION_ALLOWED, mConnectionUT.getNumberPresentation()); 109f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(PhoneConstants.PRESENTATION_ALLOWED, mConnectionUT.getCnapNamePresentation()); 110f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals("+1 (700).555-41NN,1234", mConnectionUT.getOrigDialString()); 111f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu verify(mForeGroundCall, times(1)).attachFake((Connection) any(), 112f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu eq(ImsPhoneCall.State.DIALING)); 113f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu } 114f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 115f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Test 116f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @SmallTest 117f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu public void testImsUpdateStateForeGround() { 118f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu // MO Foreground Connection dailing -> active 119f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mConnectionUT = new ImsPhoneConnection(mImsPhone, "+1 (700).555-41NN1234", mImsCT, 120f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mForeGroundCall, false); 121f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu // initially in dialing state 122f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu doReturn(Call.State.DIALING).when(mForeGroundCall).getState(); 123f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertTrue(mConnectionUT.update(mImsCall, Call.State.ACTIVE)); 124f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu // for Ringing/Dialing upadte postDialState 125f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(Connection.PostDialState.COMPLETE, mConnectionUT.getPostDialState()); 126f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu verify(mForeGroundCall, times(1)).update(eq(mConnectionUT), eq(mImsCall), 127f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu eq(Call.State.ACTIVE)); 128f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu } 129f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 130f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Test 131f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @SmallTest 132f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu public void testImsUpdateStateBackGround() { 133f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu // MT background Connection dialing -> active 134f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mConnectionUT = new ImsPhoneConnection(mImsPhone, mImsCall, mImsCT, mBackGroundCall, false); 135f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu doReturn(Call.State.HOLDING).when(mBackGroundCall).getState(); 13674c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi assertFalse(mConnectionUT.update(mImsCall, Call.State.ACTIVE)); 137f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu verify(mBackGroundCall, times(1)).detach(eq(mConnectionUT)); 138f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu verify(mForeGroundCall, times(1)).attach(eq(mConnectionUT)); 139f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu verify(mForeGroundCall, times(1)).update(eq(mConnectionUT), eq(mImsCall), 140f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu eq(Call.State.ACTIVE)); 141f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(Connection.PostDialState.NOT_STARTED, mConnectionUT.getPostDialState()); 142f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu } 143f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 144f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Test 145f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @SmallTest 146f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu public void testImsUpdateStatePendingHold() { 147f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mConnectionUT = new ImsPhoneConnection(mImsPhone, "+1 (700).555-41NN1234", mImsCT, 148f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mForeGroundCall, false); 149f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu doReturn(true).when(mImsCall).isPendingHold(); 150f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertFalse(mConnectionUT.update(mImsCall, Call.State.ACTIVE)); 151f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu verify(mForeGroundCall, times(0)).update(eq(mConnectionUT), eq(mImsCall), 152f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu eq(Call.State.ACTIVE)); 153f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(Connection.PostDialState.NOT_STARTED, mConnectionUT.getPostDialState()); 154f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu } 155f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 156f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Test 157f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @SmallTest 158f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu public void testUpdateAddressDisplay() { 159f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mConnectionUT = new ImsPhoneConnection(mImsPhone, mImsCall, mImsCT, mForeGroundCall, false); 160f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(PhoneConstants.PRESENTATION_UNKNOWN, mConnectionUT.getNumberPresentation()); 161f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(PhoneConstants.PRESENTATION_UNKNOWN, mConnectionUT.getCnapNamePresentation()); 162f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu doReturn(ImsCallProfile.OIR_PRESENTATION_PAYPHONE).when(mImsCallProfile) 163f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu .getCallExtraInt(eq(ImsCallProfile.EXTRA_CNAP)); 164f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu doReturn(ImsCallProfile.OIR_PRESENTATION_NOT_RESTRICTED).when(mImsCallProfile) 165f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu .getCallExtraInt(eq(ImsCallProfile.EXTRA_OIR)); 166f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 167f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mConnectionUT.updateAddressDisplay(mImsCall); 168f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(ImsCallProfile.OIRToPresentation(ImsCallProfile.OIR_PRESENTATION_PAYPHONE), 169f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mConnectionUT.getCnapNamePresentation()); 170f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(ImsCallProfile.OIRToPresentation( 171f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu ImsCallProfile.OIR_PRESENTATION_NOT_RESTRICTED), 172f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mConnectionUT.getNumberPresentation()); 173f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu } 174f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 175f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Test 176f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @SmallTest 177f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu public void testConnectionDisconnect() { 178f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu //Mock we have an active connection 179f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu testImsUpdateStateForeGround(); 180f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu waitForMs(50); 181f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mConnectionUT.onDisconnect(DisconnectCause.LOCAL); 182f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(DisconnectCause.LOCAL, mConnectionUT.getDisconnectCause()); 183f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(GsmCdmaCall.State.DISCONNECTED, mConnectionUT.getState()); 184f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertTrue(mConnectionUT.getDisconnectTime() <= System.currentTimeMillis()); 185f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertTrue(mConnectionUT.getDurationMillis() >= 50); 186f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu } 187f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 188f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Test 189f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @SmallTest 190f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu public void testPostDialWait() { 191f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mConnectionUT = new ImsPhoneConnection(mImsPhone, String.format("+1 (700).555-41NN%c1234", 192f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu PhoneNumberUtils.WAIT), mImsCT, mForeGroundCall, false); 193f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu doReturn(Call.State.DIALING).when(mForeGroundCall).getState(); 194f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu doAnswer(new Answer() { 195f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Override 196f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu public Void answer(InvocationOnMock invocation) throws Throwable { 197f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu Message msg = (Message) invocation.getArguments()[1]; 198f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu AsyncResult.forMessage(msg); 199f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu msg.sendToTarget(); 200f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu return null; 201f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu } 202f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu }).when(mImsCT).sendDtmf(anyChar(), (Message) any()); 203f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu // process post dial string during update 204f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertTrue(mConnectionUT.update(mImsCall, Call.State.ACTIVE)); 205f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(Connection.PostDialState.WAIT, mConnectionUT.getPostDialState()); 206f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mConnectionUT.proceedAfterWaitChar(); 207f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu waitForMs(50); 208f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(Connection.PostDialState.COMPLETE, mConnectionUT.getPostDialState()); 209f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu } 210f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 211f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Test 212f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @MediumTest 213f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu public void testPostDialPause() { 214f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mConnectionUT = new ImsPhoneConnection(mImsPhone, String.format("+1 (700).555-41NN%c1234", 215f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu PhoneNumberUtils.PAUSE), mImsCT, mForeGroundCall, false); 216f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu doReturn(Call.State.DIALING).when(mForeGroundCall).getState(); 217f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu doAnswer(new Answer() { 218f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Override 219f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu public Void answer(InvocationOnMock invocation) throws Throwable { 220f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu Message msg = (Message) invocation.getArguments()[1]; 221f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu AsyncResult.forMessage(msg); 222f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu msg.sendToTarget(); 223f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu return null; 224f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu } 225f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu }).when(mImsCT).sendDtmf(anyChar(), (Message) any()); 226f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 227f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu // process post dial string during update 228f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertTrue(mConnectionUT.update(mImsCall, Call.State.ACTIVE)); 229f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(Connection.PostDialState.STARTED, mConnectionUT.getPostDialState()); 230f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu try { 231f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu Field field = ImsPhoneConnection.class.getDeclaredField("PAUSE_DELAY_MILLIS"); 232f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu field.setAccessible(true); 233f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu waitForMs((Integer) field.get(null) + 50); 234f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu } catch (Exception ex) { 235f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu Assert.fail("unexpected exception thrown" + ex.getMessage()); 236f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu } 237f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertEquals(Connection.PostDialState.COMPLETE, mConnectionUT.getPostDialState()); 238f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu } 239f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu 240f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @Test 241f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu @SmallTest 242f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu public void testSetWifi() { 243f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mConnectionUT = new ImsPhoneConnection(mImsPhone, mImsCall, mImsCT, mForeGroundCall, false); 244f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertFalse(mConnectionUT.isWifi()); 245d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger // ImsCall.isWifiCall is tested elsewhere 246d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger doReturn(true).when(mImsCall).isWifiCall(); 247f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu mBundle.putString(ImsCallProfile.EXTRA_CALL_RAT_TYPE, 248f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN + ""); 249f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertTrue(mConnectionUT.update(mImsCall, Call.State.ACTIVE)); 250f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu assertTrue(mConnectionUT.isWifi()); 251f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu } 252d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger 253d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger @Test 254d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger @SmallTest 255d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger public void testSetWifi2() { 256d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger mConnectionUT = new ImsPhoneConnection(mImsPhone, mImsCall, mImsCT, mForeGroundCall, false); 257d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger assertFalse(mConnectionUT.isWifi()); 258d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger // ImsCall.isWifiCall is tested elsewhere 259d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger doReturn(true).when(mImsCall).isWifiCall(); 260d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger // Tests to make sure that the EXTRA_CALL_RAT_TYPE_ALT string is set correctly for newer 261d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger // devices. 262d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger mBundle.putString(ImsCallProfile.EXTRA_CALL_RAT_TYPE_ALT, 263d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN + ""); 264d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger assertTrue(mConnectionUT.update(mImsCall, Call.State.ACTIVE)); 265d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger assertTrue(mConnectionUT.isWifi()); 266d0a85e9d7e52ecd5de9f7063361d9b01d2493627Brad Ebinger } 26774c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi 268eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn /** 269eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn * Test updates to address for incoming calls. 270eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn */ 27174c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi @Test 27274c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi @SmallTest 27374c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi public void testAddressUpdate() { 27474c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi String[] testAddressMappingSet[] = { 27574c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi /* {"inputAddress", "updateAddress", "ExpectResult"} */ 27674c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi {"12345", "12345", "12345"}, 27774c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi {"12345", "67890", "67890"}, 27874c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi {"12345*00000", "12345", "12345*00000"}, 27974c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi {"12345*00000", "67890", "67890"}, 28074c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi {"12345*00000", "12345*00000", "12345*00000"}, 28174c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi {"12345;11111*00000", "12345", "12345"}, 28274c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi {"12345*00000;11111", "12345", "12345*00000"}, 28374c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi {"18412345*00000", "18412345", "18412345*00000"}, 28474c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi {"+8112345*00000", "+8112345", "+8112345*00000"}, 28574c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi {"12345*00000", "12346", "12346"}}; 28674c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi for (String[] testAddress : testAddressMappingSet) { 28774c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi mConnectionUT = new ImsPhoneConnection(mImsPhone, testAddress[0], mImsCT, 28874c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi mForeGroundCall, false); 289eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn mConnectionUT.setIsIncoming(true); 29074c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi doReturn(testAddress[1]).when(mImsCallProfile) 29174c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi .getCallExtra(eq(ImsCallProfile.EXTRA_OI)); 29274c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi mConnectionUT.updateAddressDisplay(mImsCall); 29374c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi assertEquals(testAddress[2], mConnectionUT.getAddress()); 29474c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi } 29574c8509aede6fe748904e75c156049b4f1ba5e28Hanada Masafumi } 296eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn 297eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn /** 298eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn * Ensure updates to the address for outgoing calls are ignored. 299eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn */ 300eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn @Test 301eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn @SmallTest 302eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn public void testSetAddressOnOutgoing() { 303eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn String inputAddress = "12345"; 304eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn String updateAddress = "6789"; 305eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn 306eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn mConnectionUT = new ImsPhoneConnection(mImsPhone, inputAddress, mImsCT, mForeGroundCall, 307eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn false); 308eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn mConnectionUT.setIsIncoming(false); 309eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn doReturn(updateAddress).when(mImsCallProfile) 310eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn .getCallExtra(eq(ImsCallProfile.EXTRA_OI)); 311eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn mConnectionUT.updateAddressDisplay(mImsCall); 312eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn assertEquals(inputAddress, mConnectionUT.getAddress()); 313eb7465409290618ca5d7b5f8ba2ffabba2d936d9Tyler Gunn } 314f9b150b221db15e88b97a0b9c0971ca3c71c0313fionaxu} 315