1aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad/* 2aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad * Copyright (C) 2015 The Android Open Source Project 3aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad * 4aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad * Licensed under the Apache License, Version 2.0 (the "License"); 5aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad * you may not use this file except in compliance with the License. 6aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad * You may obtain a copy of the License at 7aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad * 8aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad * http://www.apache.org/licenses/LICENSE-2.0 9aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad * 10aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad * Unless required by applicable law or agreed to in writing, software 11aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad * distributed under the License is distributed on an "AS IS" BASIS, 12aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad * See the License for the specific language governing permissions and 14aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad * limitations under the License. 15aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad */ 16aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 17aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadpackage com.android.server.telecom.tests; 18aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 19aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport com.android.internal.telecom.IConnectionService; 20aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport com.android.internal.telecom.IConnectionServiceAdapter; 21aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport com.android.internal.telecom.IVideoProvider; 22aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport com.android.internal.telecom.RemoteServiceCallback; 23aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 24aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport junit.framework.TestCase; 25aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 26aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport org.mockito.Mockito; 27aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 28aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport android.content.ComponentName; 2974bb635206f94e6846810d9dcbd41d56c07f24f7Hall Liuimport android.content.Context; 30b7853c0b716f9cc9ae174d1ca4efaa118ef1740eAbhijith Shastryimport android.net.Uri; 31b3907b3e79864a3a42d5e7105e5051f7e364fdbaSantos Cordonimport android.os.Bundle; 32aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport android.os.IBinder; 331b5490ac8643a5969adaba6f68d872acd251d666Ihab Awadimport android.os.IInterface; 34aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liuimport android.os.ParcelFileDescriptor; 35aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport android.os.RemoteException; 361b5490ac8643a5969adaba6f68d872acd251d666Ihab Awadimport android.telecom.CallAudioState; 37f7783fb45c262a36d813cb450062d0076490a530Hall Liuimport android.telecom.Conference; 38aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport android.telecom.Connection; 39aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport android.telecom.ConnectionRequest; 40f7783fb45c262a36d813cb450062d0076490a530Hall Liuimport android.telecom.ConnectionService; 41aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport android.telecom.DisconnectCause; 42953e1af643b66df6f931d76c23bcc54147668cd4Brad Ebingerimport android.telecom.Log; 43b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebingerimport android.telecom.Logging.Session; 44aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport android.telecom.ParcelableConference; 45aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport android.telecom.ParcelableConnection; 46aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport android.telecom.PhoneAccountHandle; 47aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport android.telecom.StatusHints; 48b7853c0b716f9cc9ae174d1ca4efaa118ef1740eAbhijith Shastryimport android.telecom.TelecomManager; 49aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 50c6e42ef0465fe01b35bb3aa94fbcbc081e3b45edAbhijith Shastryimport com.google.android.collect.Lists; 51c6e42ef0465fe01b35bb3aa94fbcbc081e3b45edAbhijith Shastry 526d96252436c34cbc2407767f67f2f397f390ad95Bryce Leeimport java.lang.Override; 53aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport java.util.ArrayList; 54aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport java.util.HashMap; 55aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport java.util.HashSet; 56aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport java.util.List; 57aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport java.util.Map; 58aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadimport java.util.Set; 59961694a9750626c067be960170bc95f10b5efcc2Tyler Gunnimport java.util.concurrent.CountDownLatch; 60961694a9750626c067be960170bc95f10b5efcc2Tyler Gunnimport java.util.concurrent.TimeUnit; 61aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 62aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad/** 63aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad * Controls a test {@link IConnectionService} as would be provided by a source of connectivity 64aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad * to the Telecom framework. 65aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad */ 66aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awadpublic class ConnectionServiceFixture implements TestFixture<IConnectionService> { 67b7853c0b716f9cc9ae174d1ca4efaa118ef1740eAbhijith Shastry static int INVALID_VIDEO_STATE = -1; 68961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn public CountDownLatch mExtrasLock = new CountDownLatch(1); 69571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn static int NOT_SPECIFIED = 0; 70aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 71f7783fb45c262a36d813cb450062d0076490a530Hall Liu /** 72f7783fb45c262a36d813cb450062d0076490a530Hall Liu * Implementation of ConnectionService that performs no-ops for tasks normally meant for 73f7783fb45c262a36d813cb450062d0076490a530Hall Liu * Telephony and reports success back to Telecom 74f7783fb45c262a36d813cb450062d0076490a530Hall Liu */ 75f7783fb45c262a36d813cb450062d0076490a530Hall Liu public class FakeConnectionServiceDelegate extends ConnectionService { 76b7853c0b716f9cc9ae174d1ca4efaa118ef1740eAbhijith Shastry int mVideoState = INVALID_VIDEO_STATE; 77571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn int mCapabilities = NOT_SPECIFIED; 78571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn int mProperties = NOT_SPECIFIED; 79b7853c0b716f9cc9ae174d1ca4efaa118ef1740eAbhijith Shastry 8074bb635206f94e6846810d9dcbd41d56c07f24f7Hall Liu public FakeConnectionServiceDelegate(Context base) { 8174bb635206f94e6846810d9dcbd41d56c07f24f7Hall Liu attachBaseContext(base); 8274bb635206f94e6846810d9dcbd41d56c07f24f7Hall Liu } 8374bb635206f94e6846810d9dcbd41d56c07f24f7Hall Liu 84f7783fb45c262a36d813cb450062d0076490a530Hall Liu @Override 85f7783fb45c262a36d813cb450062d0076490a530Hall Liu public Connection onCreateUnknownConnection( 86f7783fb45c262a36d813cb450062d0076490a530Hall Liu PhoneAccountHandle connectionManagerPhoneAccount, ConnectionRequest request) { 87961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn mLatestConnection = new FakeConnection(request.getVideoState(), request.getAddress()); 88961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn return mLatestConnection; 89f7783fb45c262a36d813cb450062d0076490a530Hall Liu } 90f7783fb45c262a36d813cb450062d0076490a530Hall Liu 91f7783fb45c262a36d813cb450062d0076490a530Hall Liu @Override 92f7783fb45c262a36d813cb450062d0076490a530Hall Liu public Connection onCreateIncomingConnection( 93f7783fb45c262a36d813cb450062d0076490a530Hall Liu PhoneAccountHandle connectionManagerPhoneAccount, ConnectionRequest request) { 94d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn FakeConnection fakeConnection = new FakeConnection( 95b7853c0b716f9cc9ae174d1ca4efaa118ef1740eAbhijith Shastry mVideoState == INVALID_VIDEO_STATE ? request.getVideoState() : mVideoState, 96b7853c0b716f9cc9ae174d1ca4efaa118ef1740eAbhijith Shastry request.getAddress()); 97961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn mLatestConnection = fakeConnection; 98571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn if (mCapabilities != NOT_SPECIFIED) { 99d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn fakeConnection.setConnectionCapabilities(mCapabilities); 100d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn } 101571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn if (mProperties != NOT_SPECIFIED) { 102571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn fakeConnection.setConnectionProperties(mProperties); 103571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn } 104d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn 105d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn return fakeConnection; 106f7783fb45c262a36d813cb450062d0076490a530Hall Liu } 107f7783fb45c262a36d813cb450062d0076490a530Hall Liu 108f7783fb45c262a36d813cb450062d0076490a530Hall Liu @Override 109f7783fb45c262a36d813cb450062d0076490a530Hall Liu public Connection onCreateOutgoingConnection( 110f7783fb45c262a36d813cb450062d0076490a530Hall Liu PhoneAccountHandle connectionManagerPhoneAccount, ConnectionRequest request) { 11184771f8f87f5f582bf848b621eed8c6cd99d41b0Brad Ebinger FakeConnection fakeConnection = new FakeConnection(request.getVideoState(), 11284771f8f87f5f582bf848b621eed8c6cd99d41b0Brad Ebinger request.getAddress()); 11384771f8f87f5f582bf848b621eed8c6cd99d41b0Brad Ebinger mLatestConnection = fakeConnection; 11484771f8f87f5f582bf848b621eed8c6cd99d41b0Brad Ebinger if (mCapabilities != NOT_SPECIFIED) { 11584771f8f87f5f582bf848b621eed8c6cd99d41b0Brad Ebinger fakeConnection.setConnectionCapabilities(mCapabilities); 11684771f8f87f5f582bf848b621eed8c6cd99d41b0Brad Ebinger } 11784771f8f87f5f582bf848b621eed8c6cd99d41b0Brad Ebinger if (mProperties != NOT_SPECIFIED) { 11884771f8f87f5f582bf848b621eed8c6cd99d41b0Brad Ebinger fakeConnection.setConnectionProperties(mProperties); 11984771f8f87f5f582bf848b621eed8c6cd99d41b0Brad Ebinger } 12084771f8f87f5f582bf848b621eed8c6cd99d41b0Brad Ebinger return fakeConnection; 121f7783fb45c262a36d813cb450062d0076490a530Hall Liu } 122f7783fb45c262a36d813cb450062d0076490a530Hall Liu 123f7783fb45c262a36d813cb450062d0076490a530Hall Liu @Override 124ddb03e1387a09f9c7da624b064bf4f5b90ed478cTyler Gunn public void onCreateConnectionComplete(Connection connection) { 125ddb03e1387a09f9c7da624b064bf4f5b90ed478cTyler Gunn } 126ddb03e1387a09f9c7da624b064bf4f5b90ed478cTyler Gunn 127ddb03e1387a09f9c7da624b064bf4f5b90ed478cTyler Gunn @Override 128f7783fb45c262a36d813cb450062d0076490a530Hall Liu public void onConference(Connection cxn1, Connection cxn2) { 1290d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger if (((FakeConnection) cxn1).getIsConferenceCreated()) { 1300d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger // Usually, this is implemented by something in Telephony, which does a bunch of 1310d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger // radio work to conference the two connections together. Here we just short-cut 1320d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger // that and declare them conferenced. 1330d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger Conference fakeConference = new FakeConference(); 1340d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger fakeConference.addConnection(cxn1); 1350d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger fakeConference.addConnection(cxn2); 1360d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger mLatestConference = fakeConference; 1370d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger addConference(fakeConference); 1380d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger } else { 1390d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger try { 1400d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger sendSetConferenceMergeFailed(cxn1.getTelecomCallId()); 1410d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger } catch (Exception e) { 1420d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger Log.w(this, "Exception on sendSetConferenceMergeFailed: " + e.getMessage()); 1430d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger } 1440d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger } 145f7783fb45c262a36d813cb450062d0076490a530Hall Liu } 146f7783fb45c262a36d813cb450062d0076490a530Hall Liu } 147f7783fb45c262a36d813cb450062d0076490a530Hall Liu 148f7783fb45c262a36d813cb450062d0076490a530Hall Liu public class FakeConnection extends Connection { 1490d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger // Set to false if you wish the Conference merge to fail. 1500d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger boolean mIsConferenceCreated = true; 1510d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger 152b7853c0b716f9cc9ae174d1ca4efaa118ef1740eAbhijith Shastry public FakeConnection(int videoState, Uri address) { 153f7783fb45c262a36d813cb450062d0076490a530Hall Liu super(); 154f7783fb45c262a36d813cb450062d0076490a530Hall Liu int capabilities = getConnectionCapabilities(); 155f7783fb45c262a36d813cb450062d0076490a530Hall Liu capabilities |= CAPABILITY_MUTE; 156f7783fb45c262a36d813cb450062d0076490a530Hall Liu capabilities |= CAPABILITY_SUPPORT_HOLD; 157f7783fb45c262a36d813cb450062d0076490a530Hall Liu capabilities |= CAPABILITY_HOLD; 158b492f4c845e61fac17c0e523363607d2dd6ba987Tyler Gunn setVideoState(videoState); 159f7783fb45c262a36d813cb450062d0076490a530Hall Liu setConnectionCapabilities(capabilities); 1606e8f3d70ac7397afb4cb5ab276d1cd385c92dd21Brad Ebinger setDialing(); 161b7853c0b716f9cc9ae174d1ca4efaa118ef1740eAbhijith Shastry setAddress(address, TelecomManager.PRESENTATION_ALLOWED); 162f7783fb45c262a36d813cb450062d0076490a530Hall Liu } 163961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn 164961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn @Override 165961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn public void onExtrasChanged(Bundle extras) { 166961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn mExtrasLock.countDown(); 167961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn } 1680d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger 1690d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger public boolean getIsConferenceCreated() { 1700d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger return mIsConferenceCreated; 1710d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger } 1720d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger 1730d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger public void setIsConferenceCreated(boolean isConferenceCreated) { 1740d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger mIsConferenceCreated = isConferenceCreated; 1750d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger } 176f7783fb45c262a36d813cb450062d0076490a530Hall Liu } 177f7783fb45c262a36d813cb450062d0076490a530Hall Liu 178f7783fb45c262a36d813cb450062d0076490a530Hall Liu public class FakeConference extends Conference { 179f7783fb45c262a36d813cb450062d0076490a530Hall Liu public FakeConference() { 180f7783fb45c262a36d813cb450062d0076490a530Hall Liu super(null); 181f7783fb45c262a36d813cb450062d0076490a530Hall Liu setConnectionCapabilities( 182f7783fb45c262a36d813cb450062d0076490a530Hall Liu Connection.CAPABILITY_SUPPORT_HOLD 183f7783fb45c262a36d813cb450062d0076490a530Hall Liu | Connection.CAPABILITY_HOLD 184f7783fb45c262a36d813cb450062d0076490a530Hall Liu | Connection.CAPABILITY_MUTE 185f7783fb45c262a36d813cb450062d0076490a530Hall Liu | Connection.CAPABILITY_MANAGE_CONFERENCE); 186f7783fb45c262a36d813cb450062d0076490a530Hall Liu } 187f7783fb45c262a36d813cb450062d0076490a530Hall Liu 188f7783fb45c262a36d813cb450062d0076490a530Hall Liu @Override 189f7783fb45c262a36d813cb450062d0076490a530Hall Liu public void onMerge(Connection connection) { 190f7783fb45c262a36d813cb450062d0076490a530Hall Liu // Do nothing besides inform the connection that it was merged into this conference. 191f7783fb45c262a36d813cb450062d0076490a530Hall Liu connection.setConference(this); 192f7783fb45c262a36d813cb450062d0076490a530Hall Liu } 193961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn 194961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn @Override 195961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn public void onExtrasChanged(Bundle extras) { 196961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn Log.w(this, "FakeConference onExtrasChanged"); 197961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn mExtrasLock.countDown(); 198961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn } 199f7783fb45c262a36d813cb450062d0076490a530Hall Liu } 200f7783fb45c262a36d813cb450062d0076490a530Hall Liu 2011b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad public class FakeConnectionService extends IConnectionService.Stub { 202c6e42ef0465fe01b35bb3aa94fbcbc081e3b45edAbhijith Shastry List<String> rejectedCallIds = Lists.newArrayList(); 2031b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 2041b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 205b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void addConnectionServiceAdapter(IConnectionServiceAdapter adapter, 206b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger Session.Info info) throws RemoteException { 2071b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad if (!mConnectionServiceAdapters.add(adapter)) { 2081b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad throw new RuntimeException("Adapter already added: " + adapter); 2091b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad } 210b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger mConnectionServiceDelegateAdapter.addConnectionServiceAdapter(adapter, 211b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger null /*Session.Info*/); 2121b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad } 2131b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 2141b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 215b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void removeConnectionServiceAdapter(IConnectionServiceAdapter adapter, 216b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger Session.Info info) throws RemoteException { 2171b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad if (!mConnectionServiceAdapters.remove(adapter)) { 2181b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad throw new RuntimeException("Adapter never added: " + adapter); 2191b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad } 220b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger mConnectionServiceDelegateAdapter.removeConnectionServiceAdapter(adapter, 221b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger null /*Session.Info*/); 2221b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad } 2231b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 2241b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 2251b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad public void createConnection(PhoneAccountHandle connectionManagerPhoneAccount, 226b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger String id, ConnectionRequest request, boolean isIncoming, boolean isUnknown, 227b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger Session.Info info) throws RemoteException { 228a90ba73e6ca2e7e3ef88e41477bf595e03f9359fTyler Gunn Log.i(ConnectionServiceFixture.this, "createConnection --> " + id); 2291b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 2301b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad if (mConnectionById.containsKey(id)) { 2311b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad throw new RuntimeException("Connection already exists: " + id); 2321b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad } 2331b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad mLatestConnectionId = id; 2341b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad ConnectionInfo c = new ConnectionInfo(); 2351b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad c.connectionManagerPhoneAccount = connectionManagerPhoneAccount; 2361b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad c.id = id; 2371b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad c.request = request; 2381b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad c.isIncoming = isIncoming; 2391b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad c.isUnknown = isUnknown; 24032dd7c331c5b4dc475d96b113a052286973f78fcIhab Awad c.capabilities |= Connection.CAPABILITY_HOLD | Connection.CAPABILITY_SUPPORT_HOLD; 241b492f4c845e61fac17c0e523363607d2dd6ba987Tyler Gunn c.videoState = request.getVideoState(); 242b492f4c845e61fac17c0e523363607d2dd6ba987Tyler Gunn c.mockVideoProvider = new MockVideoProvider(); 243b492f4c845e61fac17c0e523363607d2dd6ba987Tyler Gunn c.videoProvider = c.mockVideoProvider.getInterface(); 2440d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger c.isConferenceCreated = true; 2451b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad mConnectionById.put(id, c); 246f7783fb45c262a36d813cb450062d0076490a530Hall Liu mConnectionServiceDelegateAdapter.createConnection(connectionManagerPhoneAccount, 247b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger id, request, isIncoming, isUnknown, null /*Session.Info*/); 2481b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad } 2491b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 2501b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 251ddb03e1387a09f9c7da624b064bf4f5b90ed478cTyler Gunn public void createConnectionComplete(String id, Session.Info info) throws RemoteException { 252ddb03e1387a09f9c7da624b064bf4f5b90ed478cTyler Gunn mConnectionServiceDelegateAdapter.createConnectionComplete(id, null /*Session.Info*/); 253ddb03e1387a09f9c7da624b064bf4f5b90ed478cTyler Gunn } 254ddb03e1387a09f9c7da624b064bf4f5b90ed478cTyler Gunn 255ddb03e1387a09f9c7da624b064bf4f5b90ed478cTyler Gunn @Override 256115c06ee64e209cda99abdc1fbd23fd65aa6da47Tyler Gunn public void createConnectionFailed(PhoneAccountHandle connectionManagerPhoneAccount, 257115c06ee64e209cda99abdc1fbd23fd65aa6da47Tyler Gunn String callId, ConnectionRequest request, boolean isIncoming, 258115c06ee64e209cda99abdc1fbd23fd65aa6da47Tyler Gunn Session.Info sessionInfo) throws RemoteException { 259a90ba73e6ca2e7e3ef88e41477bf595e03f9359fTyler Gunn Log.i(ConnectionServiceFixture.this, "createConnectionFailed --> " + callId); 260a90ba73e6ca2e7e3ef88e41477bf595e03f9359fTyler Gunn 261a90ba73e6ca2e7e3ef88e41477bf595e03f9359fTyler Gunn if (mConnectionById.containsKey(callId)) { 262a90ba73e6ca2e7e3ef88e41477bf595e03f9359fTyler Gunn throw new RuntimeException("Connection already exists: " + callId); 263a90ba73e6ca2e7e3ef88e41477bf595e03f9359fTyler Gunn } 264a90ba73e6ca2e7e3ef88e41477bf595e03f9359fTyler Gunn 265a90ba73e6ca2e7e3ef88e41477bf595e03f9359fTyler Gunn // TODO(3p-calls): Implement this. 266a90ba73e6ca2e7e3ef88e41477bf595e03f9359fTyler Gunn } 267a90ba73e6ca2e7e3ef88e41477bf595e03f9359fTyler Gunn 268a90ba73e6ca2e7e3ef88e41477bf595e03f9359fTyler Gunn @Override 269b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void abort(String callId, Session.Info info) throws RemoteException { } 2701b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 2711b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 272b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void answerVideo(String callId, int videoState, 273b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger Session.Info info) throws RemoteException { } 2741b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 2751b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 276b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void answer(String callId, Session.Info info) throws RemoteException { } 2771b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 2781b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 279ad4ebc022bf8a28958606121a1a2a0c4130dc821Pooja Jain public void deflect(String callId, Uri address, Session.Info info) 280ad4ebc022bf8a28958606121a1a2a0c4130dc821Pooja Jain throws RemoteException { } 281ad4ebc022bf8a28958606121a1a2a0c4130dc821Pooja Jain 282ad4ebc022bf8a28958606121a1a2a0c4130dc821Pooja Jain @Override 283b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void reject(String callId, Session.Info info) throws RemoteException { 284c6e42ef0465fe01b35bb3aa94fbcbc081e3b45edAbhijith Shastry rejectedCallIds.add(callId); 285c6e42ef0465fe01b35bb3aa94fbcbc081e3b45edAbhijith Shastry } 2861b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 2871b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 288b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void rejectWithMessage(String callId, String message, 289b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger Session.Info info) throws RemoteException { } 290ddd966e7f6b947e345163c442f4c2f9c3d146024Bryce Lee 291ddd966e7f6b947e345163c442f4c2f9c3d146024Bryce Lee @Override 292b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void disconnect(String callId, Session.Info info) throws RemoteException { } 2931b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 2941b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 295b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void silence(String callId, Session.Info info) throws RemoteException { } 2966d96252436c34cbc2407767f67f2f397f390ad95Bryce Lee 2976d96252436c34cbc2407767f67f2f397f390ad95Bryce Lee @Override 298b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void hold(String callId, Session.Info info) throws RemoteException { } 2991b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 3001b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 301b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void unhold(String callId, Session.Info info) throws RemoteException { } 3021b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 3031b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 304b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void onCallAudioStateChanged(String activeCallId, CallAudioState audioState, 305b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger Session.Info info) 3061b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad throws RemoteException { } 3071b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 3081b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 309b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void playDtmfTone(String callId, char digit, 310b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger Session.Info info) throws RemoteException { } 3111b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 3121b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 313b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void stopDtmfTone(String callId, Session.Info info) throws RemoteException { } 3141b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 3151b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 316b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void conference(String conferenceCallId, String callId, 317b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger Session.Info info) throws RemoteException { 318b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger mConnectionServiceDelegateAdapter.conference(conferenceCallId, callId, info); 319f7783fb45c262a36d813cb450062d0076490a530Hall Liu } 3201b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 3211b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 322b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void splitFromConference(String callId, Session.Info info) throws RemoteException { } 3231b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 3241b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 325b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void mergeConference(String conferenceCallId, 326b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger Session.Info info) throws RemoteException { } 3271b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 3281b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 329b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void swapConference(String conferenceCallId, 330b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger Session.Info info) throws RemoteException { } 3311b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 3321b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 333b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void onPostDialContinue(String callId, boolean proceed, 334b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger Session.Info info) throws RemoteException { } 3351b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 3361b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 337b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void pullExternalCall(String callId, Session.Info info) throws RemoteException { } 338d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn 339d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn @Override 340b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void sendCallEvent(String callId, String event, Bundle extras, 341b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger Session.Info info) throws RemoteException 342d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn {} 343d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn 344b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger public void onExtrasChanged(String callId, Bundle extras, 345b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger Session.Info info) throws RemoteException { 346b78b0234c6e9a937fc00fec6d16e534535b6fab9Brad Ebinger mConnectionServiceDelegateAdapter.onExtrasChanged(callId, extras, info); 347961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn } 348961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn 349d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn @Override 350aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu public void startRtt(String callId, ParcelFileDescriptor fromInCall, 351aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu ParcelFileDescriptor toInCall, Session.Info sessionInfo) throws RemoteException { 352aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu 353aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu } 354aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu 355aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu @Override 356aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu public void stopRtt(String callId, Session.Info sessionInfo) throws RemoteException { 357aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu 358aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu } 359aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu 360aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu @Override 361aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu public void respondToRttUpgradeRequest(String callId, ParcelFileDescriptor fromInCall, 362aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu ParcelFileDescriptor toInCall, Session.Info sessionInfo) throws RemoteException { 363aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu 364aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu } 365aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu 366aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu @Override 3671952a36d0f29ec9e880d5228ba40a52def1af437Pengquan Meng public void connectionServiceFocusLost(Session.Info sessionInfo) throws RemoteException { 3681952a36d0f29ec9e880d5228ba40a52def1af437Pengquan Meng } 3691952a36d0f29ec9e880d5228ba40a52def1af437Pengquan Meng 3701952a36d0f29ec9e880d5228ba40a52def1af437Pengquan Meng @Override 3711952a36d0f29ec9e880d5228ba40a52def1af437Pengquan Meng public void connectionServiceFocusGained(Session.Info sessionInfo) throws RemoteException { 3721952a36d0f29ec9e880d5228ba40a52def1af437Pengquan Meng } 3731952a36d0f29ec9e880d5228ba40a52def1af437Pengquan Meng 3741952a36d0f29ec9e880d5228ba40a52def1af437Pengquan Meng @Override 3751b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad public IBinder asBinder() { 3761b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad return this; 3771b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad } 3781b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 3791b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad @Override 3801b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad public IInterface queryLocalInterface(String descriptor) { 3811b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad return this; 3821b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad } 38329411c95d0a0fe3fe84a460934fe89078327311eSanket Padawe 38429411c95d0a0fe3fe84a460934fe89078327311eSanket Padawe @Override 38529411c95d0a0fe3fe84a460934fe89078327311eSanket Padawe public void handoverFailed(String callId, ConnectionRequest request, 38629411c95d0a0fe3fe84a460934fe89078327311eSanket Padawe int error, Session.Info sessionInfo) {} 3877c031f2244d820ead60523cf515f6610bf215873Tyler Gunn 3887c031f2244d820ead60523cf515f6610bf215873Tyler Gunn @Override 3897c031f2244d820ead60523cf515f6610bf215873Tyler Gunn public void handoverComplete(String callId, Session.Info sessionInfo) {} 390f7783fb45c262a36d813cb450062d0076490a530Hall Liu } 391f7783fb45c262a36d813cb450062d0076490a530Hall Liu 39274bb635206f94e6846810d9dcbd41d56c07f24f7Hall Liu FakeConnectionServiceDelegate mConnectionServiceDelegate; 39374bb635206f94e6846810d9dcbd41d56c07f24f7Hall Liu private IConnectionService mConnectionServiceDelegateAdapter; 3941b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad 395c6e42ef0465fe01b35bb3aa94fbcbc081e3b45edAbhijith Shastry FakeConnectionService mConnectionService = new FakeConnectionService(); 3961b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad private IConnectionService.Stub mConnectionServiceSpy = Mockito.spy(mConnectionService); 397aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 398aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public class ConnectionInfo { 399aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad PhoneAccountHandle connectionManagerPhoneAccount; 400aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad String id; 401aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad boolean ringing; 402aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad ConnectionRequest request; 403aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad boolean isIncoming; 404aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad boolean isUnknown; 405aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad int state; 406aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad int addressPresentation; 407aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad int capabilities; 408571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn int properties; 40996a0be67619944378d95cdedc64b004aadb341e2Christine Hallstrom int supportedAudioRoutes; 410aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad StatusHints statusHints; 411aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad DisconnectCause disconnectCause; 412aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad String conferenceId; 413aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad String callerDisplayName; 414aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad int callerDisplayNamePresentation; 415aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad final List<String> conferenceableConnectionIds = new ArrayList<>(); 416aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad IVideoProvider videoProvider; 417b492f4c845e61fac17c0e523363607d2dd6ba987Tyler Gunn Connection.VideoProvider videoProviderImpl; 418b492f4c845e61fac17c0e523363607d2dd6ba987Tyler Gunn MockVideoProvider mockVideoProvider; 419aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad int videoState; 420aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad boolean isVoipAudioMode; 421b3907b3e79864a3a42d5e7105e5051f7e364fdbaSantos Cordon Bundle extras; 4220d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger boolean isConferenceCreated; 423aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 424aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 425aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public class ConferenceInfo { 426aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad PhoneAccountHandle phoneAccount; 427aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad int state; 428aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad int capabilities; 429571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn int properties; 430aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad final List<String> connectionIds = new ArrayList<>(); 431d240fe8e16205623eb6cb73c3d42448554690033Rekha Kumar IVideoProvider videoProvider; 432d240fe8e16205623eb6cb73c3d42448554690033Rekha Kumar int videoState; 433aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad long connectTimeMillis; 4348bb2b019123e50a21709eae20edc9db043326053Tyler Gunn long connectElapsedTimeMillis; 435569b54e5dff12cc29aa253efb3c61bc4fc5d778eAndrew Lee StatusHints statusHints; 436b3907b3e79864a3a42d5e7105e5051f7e364fdbaSantos Cordon Bundle extras; 437aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 438aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 439aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public String mLatestConnectionId; 440961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn public Connection mLatestConnection; 441961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn public Conference mLatestConference; 442aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public final Set<IConnectionServiceAdapter> mConnectionServiceAdapters = new HashSet<>(); 443aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public final Map<String, ConnectionInfo> mConnectionById = new HashMap<>(); 444aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public final Map<String, ConferenceInfo> mConferenceById = new HashMap<>(); 445aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public final List<ComponentName> mRemoteConnectionServiceNames = new ArrayList<>(); 446aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public final List<IBinder> mRemoteConnectionServices = new ArrayList<>(); 447aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 44874bb635206f94e6846810d9dcbd41d56c07f24f7Hall Liu public ConnectionServiceFixture(Context context) throws Exception { 44974bb635206f94e6846810d9dcbd41d56c07f24f7Hall Liu mConnectionServiceDelegate = new FakeConnectionServiceDelegate(context); 45074bb635206f94e6846810d9dcbd41d56c07f24f7Hall Liu mConnectionServiceDelegateAdapter = IConnectionService.Stub.asInterface( 45174bb635206f94e6846810d9dcbd41d56c07f24f7Hall Liu mConnectionServiceDelegate.onBind(null)); 45274bb635206f94e6846810d9dcbd41d56c07f24f7Hall Liu } 453aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 454aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad @Override 455aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public IConnectionService getTestDouble() { 4561b5490ac8643a5969adaba6f68d872acd251d666Ihab Awad return mConnectionServiceSpy; 457aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 458aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 459aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendHandleCreateConnectionComplete(String id) throws Exception { 460aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 461aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad a.handleCreateConnectionComplete( 462aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad id, 463aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad mConnectionById.get(id).request, 46465912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger parcelable(mConnectionById.get(id)), null /*Session.Info*/); 465aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 466aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 467aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 468aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendSetActive(String id) throws Exception { 469aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad mConnectionById.get(id).state = Connection.STATE_ACTIVE; 470aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 47165912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.setActive(id, null /*Session.Info*/); 472aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 473aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 474aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 475aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendSetRinging(String id) throws Exception { 476aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad mConnectionById.get(id).state = Connection.STATE_RINGING; 477aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 47865912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.setRinging(id, null /*Session.Info*/); 479aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 480aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 481aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 482aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendSetDialing(String id) throws Exception { 483aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad mConnectionById.get(id).state = Connection.STATE_DIALING; 484aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 48565912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.setDialing(id, null /*Session.Info*/); 486aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 487aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 488aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 489aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendSetDisconnected(String id, int disconnectCause) throws Exception { 490aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad mConnectionById.get(id).state = Connection.STATE_DISCONNECTED; 491aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad mConnectionById.get(id).disconnectCause = new DisconnectCause(disconnectCause); 492aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 49365912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.setDisconnected(id, mConnectionById.get(id).disconnectCause, null /*Session.Info*/); 494aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 495aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 496aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 497aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendSetOnHold(String id) throws Exception { 498aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad mConnectionById.get(id).state = Connection.STATE_HOLDING; 499aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 50065912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.setOnHold(id, null /*Session.Info*/); 501aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 502aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 503aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 504aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendSetRingbackRequested(String id) throws Exception { 505aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 50665912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.setRingbackRequested(id, mConnectionById.get(id).ringing, null /*Session.Info*/); 507aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 508aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 509aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 510aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendSetConnectionCapabilities(String id) throws Exception { 511aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 51265912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.setConnectionCapabilities(id, mConnectionById.get(id).capabilities, 51365912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger null /*Session.Info*/); 514aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 515aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 516aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 517d7fe686253f2135a948cafc776aa25db645ec27eHall Liu public void sendSetConnectionProperties(String id) throws Exception { 518d7fe686253f2135a948cafc776aa25db645ec27eHall Liu for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 51965912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.setConnectionProperties(id, mConnectionById.get(id).properties, null /*Session.Info*/); 520d7fe686253f2135a948cafc776aa25db645ec27eHall Liu } 521d7fe686253f2135a948cafc776aa25db645ec27eHall Liu } 522aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendSetIsConferenced(String id) throws Exception { 523aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 52465912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.setIsConferenced(id, mConnectionById.get(id).conferenceId, null /*Session.Info*/); 525aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 526aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 527aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 528aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendAddConferenceCall(String id) throws Exception { 529aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 53065912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.addConferenceCall(id, parcelable(mConferenceById.get(id)), null /*Session.Info*/); 531aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 532aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 533aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 534aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendRemoveCall(String id) throws Exception { 535aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 53665912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.removeCall(id, null /*Session.Info*/); 537aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 538aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 539aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 540aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendOnPostDialWait(String id, String remaining) throws Exception { 541aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 54265912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.onPostDialWait(id, remaining, null /*Session.Info*/); 543aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 544aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 545aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 546aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendOnPostDialChar(String id, char nextChar) throws Exception { 547aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 54865912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.onPostDialChar(id, nextChar, null /*Session.Info*/); 549aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 550aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 551aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 552aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendQueryRemoteConnectionServices() throws Exception { 553aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad mRemoteConnectionServices.clear(); 554aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 555aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad a.queryRemoteConnectionServices(new RemoteServiceCallback.Stub() { 556aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad @Override 557aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void onError() throws RemoteException { 558aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad throw new RuntimeException(); 559aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 560aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 561aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad @Override 562aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void onResult( 563aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad List<ComponentName> names, 564aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad List<IBinder> services) 565aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad throws RemoteException { 566aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad TestCase.assertEquals(names.size(), services.size()); 567aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad mRemoteConnectionServiceNames.addAll(names); 568aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad mRemoteConnectionServices.addAll(services); 569aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 570aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 571aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad @Override 572aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public IBinder asBinder() { 573aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad return this; 574aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 57565912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger }, null /*Session.Info*/); 576aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 577aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 578aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 579aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendSetVideoProvider(String id) throws Exception { 580aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 58165912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.setVideoProvider(id, mConnectionById.get(id).videoProvider, null /*Session.Info*/); 582aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 583aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 584aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 585aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendSetVideoState(String id) throws Exception { 586aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 58765912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.setVideoState(id, mConnectionById.get(id).videoState, null /*Session.Info*/); 588aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 589aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 590aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 591aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendSetIsVoipAudioMode(String id) throws Exception { 592aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 59365912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.setIsVoipAudioMode(id, mConnectionById.get(id).isVoipAudioMode, 59465912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger null /*Session.Info*/); 595aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 596aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 597aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 598aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendSetStatusHints(String id) throws Exception { 599aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 60065912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.setStatusHints(id, mConnectionById.get(id).statusHints, null /*Session.Info*/); 601aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 602aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 603aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 604aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendSetAddress(String id) throws Exception { 605aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 606aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad a.setAddress( 607aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad id, 608aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad mConnectionById.get(id).request.getAddress(), 60965912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger mConnectionById.get(id).addressPresentation, null /*Session.Info*/); 610aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 611aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 612aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 613aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendSetCallerDisplayName(String id) throws Exception { 614aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 615aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad a.setCallerDisplayName( 616aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad id, 617aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad mConnectionById.get(id).callerDisplayName, 61865912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger mConnectionById.get(id).callerDisplayNamePresentation, null /*Session.Info*/); 619aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 620aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 621aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 622aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendSetConferenceableConnections(String id) throws Exception { 623aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 62465912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.setConferenceableConnections(id, mConnectionById.get(id).conferenceableConnectionIds, 62565912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger null /*Session.Info*/); 626aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 627aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 628aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 629aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad public void sendAddExistingConnection(String id) throws Exception { 630aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 63165912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.addExistingConnection(id, parcelable(mConnectionById.get(id)), null /*Session.Info*/); 632aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 633aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 634aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 635d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn public void sendConnectionEvent(String id, String event, Bundle extras) throws Exception { 636d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 63765912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.onConnectionEvent(id, event, extras, null /*Session.Info*/); 638d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn } 639d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn } 640d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn 6410d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger public void sendSetConferenceMergeFailed(String id) throws Exception { 6420d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger for (IConnectionServiceAdapter a : mConnectionServiceAdapters) { 64365912759cdf64aa5a38f5498f22c8b5ba8a97ebeBrad Ebinger a.setConferenceMergeFailed(id, null /*Session.Info*/); 6440d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger } 6450d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger } 6460d40255032680d3cce56a07f7eba8baefc5512cdBrad Ebinger 647961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn /** 648961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn * Waits until the {@link Connection#onExtrasChanged(Bundle)} API has been called on a 649961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn * {@link Connection} or {@link Conference}. 650961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn */ 651961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn public void waitForExtras() { 652961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn try { 653961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn mExtrasLock.await(TelecomSystemTest.TEST_TIMEOUT, TimeUnit.MILLISECONDS); 654961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn } catch (InterruptedException ie) { 655961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn } 656961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn mExtrasLock = new CountDownLatch(1); 657961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn } 658961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn 659aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad private ParcelableConference parcelable(ConferenceInfo c) { 660aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad return new ParcelableConference( 661aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad c.phoneAccount, 662aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad c.state, 663aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad c.capabilities, 664571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn c.properties, 665aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad c.connectionIds, 666d240fe8e16205623eb6cb73c3d42448554690033Rekha Kumar c.videoProvider, 667d240fe8e16205623eb6cb73c3d42448554690033Rekha Kumar c.videoState, 668569b54e5dff12cc29aa253efb3c61bc4fc5d778eAndrew Lee c.connectTimeMillis, 6698bb2b019123e50a21709eae20edc9db043326053Tyler Gunn c.connectElapsedTimeMillis, 670b3907b3e79864a3a42d5e7105e5051f7e364fdbaSantos Cordon c.statusHints, 671b3907b3e79864a3a42d5e7105e5051f7e364fdbaSantos Cordon c.extras); 672aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 673aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad 674aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad private ParcelableConnection parcelable(ConnectionInfo c) { 675aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad return new ParcelableConnection( 676aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad c.request.getAccountHandle(), 677aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad c.state, 678aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad c.capabilities, 679571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn c.properties, 68096a0be67619944378d95cdedc64b004aadb341e2Christine Hallstrom c.supportedAudioRoutes, 681aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad c.request.getAddress(), 682aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad c.addressPresentation, 683aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad c.callerDisplayName, 684aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad c.callerDisplayNamePresentation, 685aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad c.videoProvider, 686aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad c.videoState, 687aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad false, /* ringback requested */ 688aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad false, /* voip audio mode */ 689084ab0835ea9879185d3e6aa7f9be48ae4067bedRoshan Pius 0, /* Connect Time for conf call on this connection */ 6908bb2b019123e50a21709eae20edc9db043326053Tyler Gunn 0, /* Connect Real Time comes from conference call */ 691aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad c.statusHints, 692aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad c.disconnectCause, 693b3907b3e79864a3a42d5e7105e5051f7e364fdbaSantos Cordon c.conferenceableConnectionIds, 694b3907b3e79864a3a42d5e7105e5051f7e364fdbaSantos Cordon c.extras); 695aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad } 696aa383cca668afd8578a6e007c3ea360768dc52f6Ihab Awad} 697