1c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad/* 2c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad * Copyright (C) 2013 The Android Open Source Project 3c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad * 4c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad * Licensed under the Apache License, Version 2.0 (the "License"); 5c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad * you may not use this file except in compliance with the License. 6c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad * You may obtain a copy of the License at 7c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad * 8c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad * http://www.apache.org/licenses/LICENSE-2.0 9c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad * 10c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad * Unless required by applicable law or agreed to in writing, software 11c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad * distributed under the License is distributed on an "AS IS" BASIS, 12c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad * See the License for the specific language governing permissions and 14c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad * limitations under the License. 15c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad */ 16c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 177cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnpackage com.android.server.telecom.testapps; 18c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 19c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awadimport android.net.Uri; 202a66f7b906b225413ae33f72e70a75e4f9c883c0Yorke Leeimport android.telecom.CallAudioState; 217cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnimport android.telecom.Conference; 227cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnimport android.telecom.Connection; 237cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnimport android.telecom.ConnectionRequest; 247cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnimport android.telecom.ConnectionService; 25701dc006ac11625b55d872f1639107b028933895Andrew Leeimport android.telecom.DisconnectCause; 267cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnimport android.telecom.PhoneAccountHandle; 277cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnimport android.telecom.RemoteConference; 287cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnimport android.telecom.RemoteConnection; 297cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnimport android.telecom.StatusHints; 307cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnimport android.telecom.VideoProfile; 31c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awadimport android.util.Log; 32c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 338000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awadimport java.util.ArrayList; 348000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awadimport java.util.HashMap; 358000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awadimport java.util.List; 368000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awadimport java.util.Map; 37c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 38c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad/** 39c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad * Service which acts as a fake ConnectionManager if so configured. 40c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad * TODO(santoscordon): Rename all classes in the directory to Dummy* (e.g., DummyConnectionService). 41c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad */ 42c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awadpublic class TestConnectionManager extends ConnectionService { 438000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad public final class TestManagedConnection extends Connection { 445be64bc46c23b614d5452ca398a6bb7a512f1887Andrew Lee private final RemoteConnection.Callback mRemoteCallback = new RemoteConnection.Callback() { 45c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 46c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad public void onStateChanged(RemoteConnection connection, int state) { 47c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad setState(state); 48c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 49c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 50c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 51701dc006ac11625b55d872f1639107b028933895Andrew Lee public void onDisconnected( 52701dc006ac11625b55d872f1639107b028933895Andrew Lee RemoteConnection connection, DisconnectCause disconnectCause) { 53701dc006ac11625b55d872f1639107b028933895Andrew Lee setDisconnected(disconnectCause); 54c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad destroy(); 55c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 56c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 57c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 585be64bc46c23b614d5452ca398a6bb7a512f1887Andrew Lee public void onRingbackRequested(RemoteConnection connection, boolean ringback) { 595be64bc46c23b614d5452ca398a6bb7a512f1887Andrew Lee setRingbackRequested(ringback); 60c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 61c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 62c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 6307bc5ee853bc9a0b4cd46e0c702888b2c7989392Ihab Awad public void onConnectionCapabilitiesChanged(RemoteConnection connection, 6407bc5ee853bc9a0b4cd46e0c702888b2c7989392Ihab Awad int connectionCapabilities) { 6507bc5ee853bc9a0b4cd46e0c702888b2c7989392Ihab Awad setConnectionCapabilities(connectionCapabilities); 66c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 67c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 68c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 69571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn public void onConnectionPropertiesChanged(RemoteConnection connection, 70571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn int connectionProperties) { 71571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn setConnectionProperties(connectionProperties); 72571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn } 73571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn 74571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn @Override 75c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad public void onPostDialWait(RemoteConnection connection, String remainingDigits) { 76c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad setPostDialWait(remainingDigits); 77c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 78c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 79c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 805be64bc46c23b614d5452ca398a6bb7a512f1887Andrew Lee public void onVoipAudioChanged(RemoteConnection connection, boolean isVoip) { 81c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad setAudioModeIsVoip(isVoip); 82c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 83c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 84c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 85c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad public void onStatusHintsChanged(RemoteConnection connection, StatusHints statusHints) { 86c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad setStatusHints(statusHints); 87c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 88c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 89c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 90c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad public void onVideoStateChanged(RemoteConnection connection, int videoState) { 915b8824979e929250a46791c785b8459512236585Tyler Gunn if (videoState == VideoProfile.STATE_BIDIRECTIONAL) { 92a123a5b741135a4f97a997e498a88ab33257d72dIhab Awad setVideoProvider(new TestManagedVideoProvider(connection.getVideoProvider())); 93a123a5b741135a4f97a997e498a88ab33257d72dIhab Awad } 94c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad setVideoState(videoState); 95c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 96c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 97c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 985be64bc46c23b614d5452ca398a6bb7a512f1887Andrew Lee public void onAddressChanged( 995be64bc46c23b614d5452ca398a6bb7a512f1887Andrew Lee RemoteConnection connection, Uri address, int presentation) { 1005be64bc46c23b614d5452ca398a6bb7a512f1887Andrew Lee setAddress(address, presentation); 101c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 102c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 103c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 104c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad public void onCallerDisplayNameChanged( 105c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad RemoteConnection connection, String callerDisplayName, int presentation) { 106c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad setCallerDisplayName(callerDisplayName, presentation); 107c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 108c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 109c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 110c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad public void onDestroyed(RemoteConnection connection) { 111c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad destroy(); 1128000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad mManagedConnectionByRemote.remove(mRemote); 1138000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 1148000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad 1158000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad @Override 1168000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad public void onConferenceableConnectionsChanged( 1178000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad RemoteConnection connect, 1188000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad List<RemoteConnection> conferenceable) { 1198000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad List<Connection> c = new ArrayList<>(); 1208000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad for (RemoteConnection remote : conferenceable) { 1218000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad if (mManagedConnectionByRemote.containsKey(remote)) { 1228000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad c.add(mManagedConnectionByRemote.get(remote)); 1238000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 1248000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 1258000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad setConferenceableConnections(c); 126c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 127aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu 128aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu @Override 129aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu public void onRttInitiationSuccess(RemoteConnection connection) { 130aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu sendRttInitiationSuccess(); 131aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu } 132aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu 133aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu @Override 134aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu public void onRttInitiationFailure(RemoteConnection connection, int reason) { 135aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu sendRttInitiationFailure(reason); 136aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu } 137aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu 138aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu @Override 139aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu public void onRttSessionRemotelyTerminated(RemoteConnection connection) { 140aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu sendRttSessionRemotelyTerminated(); 141aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu } 142aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu 143aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu @Override 144aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu public void onRemoteRttRequest(RemoteConnection connection) { 145aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu sendRemoteRttRequest(); 146aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu } 147c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad }; 148c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 1498000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad private final RemoteConnection mRemote; 150c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad private final boolean mIsIncoming; 151c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 1528000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad TestManagedConnection(RemoteConnection remote, boolean isIncoming) { 1538000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad mRemote = remote; 154c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad mIsIncoming = isIncoming; 1555be64bc46c23b614d5452ca398a6bb7a512f1887Andrew Lee mRemote.registerCallback(mRemoteCallback); 1568000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad setState(mRemote.getState()); 157a123a5b741135a4f97a997e498a88ab33257d72dIhab Awad setVideoState(mRemote.getVideoState()); 158dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu setConnectionProperties(remote.getConnectionProperties()); 159c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 160c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 161c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 162c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad public void onAbort() { 1638000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad mRemote.abort(); 164c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 165c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 166aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu /** 167aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu * ${inheritDoc} 168aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu */ 169c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 170c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad public void onAnswer(int videoState) { 1718000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad mRemote.answer(videoState); 172c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 173c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 174aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu /** 175aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu * ${inheritDoc} 176aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu */ 177c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 178c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad public void onDisconnect() { 1798000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad mRemote.disconnect(); 180c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 181c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 18239b6a9847b8b39b85145d7abdad6485c8f6f0beaIhab Awad @Override 18339b6a9847b8b39b85145d7abdad6485c8f6f0beaIhab Awad public void onPlayDtmfTone(char c) { 1848000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad mRemote.playDtmfTone(c); 18539b6a9847b8b39b85145d7abdad6485c8f6f0beaIhab Awad } 18639b6a9847b8b39b85145d7abdad6485c8f6f0beaIhab Awad 187aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu /** 188aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu * ${inheritDoc} 189aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu */ 190c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 191c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad public void onHold() { 1928000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad mRemote.hold(); 193c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 194c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 195aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu /** 196aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu * ${inheritDoc} 197aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu */ 198c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 199c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad public void onReject() { 2008000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad mRemote.reject(); 201c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 202c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 203aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu /** 204aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu * ${inheritDoc} 205aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu */ 206c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 207c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad public void onUnhold() { 2088000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad mRemote.unhold(); 209c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 210c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 211c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 2122a66f7b906b225413ae33f72e70a75e4f9c883c0Yorke Lee public void onCallAudioStateChanged(CallAudioState state) { 2132a66f7b906b225413ae33f72e70a75e4f9c883c0Yorke Lee mRemote.setCallAudioState(state); 214c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 215c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 216aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu @Override 217aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu public void onStartRtt(RttTextStream rttTextStream) { 218aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu mRemote.startRtt(rttTextStream); 219aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu } 220aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu 221aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu @Override 222aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu public void onStopRtt() { 223aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu mRemote.stopRtt(); 224aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu } 225aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu 226aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu @Override 227aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu public void handleRttUpgradeResponse(RttTextStream rttTextStream) { 228aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu mRemote.sendRttUpgradeResponse(rttTextStream); 229aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu } 230aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu 231c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad private void setState(int state) { 232c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad log("setState: " + state); 233c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad switch (state) { 2346fb37c87836b5245046bd3b14320823ab839a10cIhab Awad case STATE_ACTIVE: 235c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad setActive(); 236c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad break; 2376fb37c87836b5245046bd3b14320823ab839a10cIhab Awad case STATE_HOLDING: 238c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad setOnHold(); 239c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad break; 2406fb37c87836b5245046bd3b14320823ab839a10cIhab Awad case STATE_DIALING: 241c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad setDialing(); 242c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad break; 2436fb37c87836b5245046bd3b14320823ab839a10cIhab Awad case STATE_RINGING: 244c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad setRinging(); 245c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad break; 246c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 247c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 248c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 2498000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad public final class TestManagedConference extends Conference { 250066fc775ad653e0ce94b6253746081f6a5ea5272Nancy Chen private final RemoteConference.Callback mRemoteCallback = new RemoteConference.Callback() { 2518000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad @Override 2528000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad public void onStateChanged(RemoteConference conference, int oldState, int newState) { 2538000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad switch (newState) { 2548000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad case Connection.STATE_DISCONNECTED: 2558000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad // See onDisconnected below 2568000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad break; 2578000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad case Connection.STATE_HOLDING: 2588000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad setOnHold(); 2598000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad break; 2608000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad case Connection.STATE_ACTIVE: 2618000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad setActive(); 2628000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad break; 2638000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad default: 2648000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad log("unrecognized state for Conference: " + newState); 2658000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad break; 2668000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 2678000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 2688000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad 2698000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad @Override 270701dc006ac11625b55d872f1639107b028933895Andrew Lee public void onDisconnected(RemoteConference conference, 271701dc006ac11625b55d872f1639107b028933895Andrew Lee DisconnectCause disconnectCause) { 272701dc006ac11625b55d872f1639107b028933895Andrew Lee setDisconnected(disconnectCause); 2738000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 2748000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad 2758000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad @Override 2768000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad public void onConnectionAdded( 2778000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad RemoteConference conference, 2788000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad RemoteConnection connection) { 2798000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad TestManagedConnection c = mManagedConnectionByRemote.get(connection); 2808000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad if (c == null) { 2818000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad log("onConnectionAdded cannot find remote connection: " + connection); 2828000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } else { 2838000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad addConnection(c); 2848000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 2858000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 2868000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad 2878000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad @Override 2888000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad public void onConnectionRemoved( 2898000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad RemoteConference conference, 2908000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad RemoteConnection connection) { 2918000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad TestManagedConnection c = mManagedConnectionByRemote.get(connection); 2928000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad if (c == null) { 2938000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad log("onConnectionRemoved cannot find remote connection: " + connection); 2948000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } else { 2958000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad removeConnection(c); 2968000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 2978000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 2988000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad 2998000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad @Override 30007bc5ee853bc9a0b4cd46e0c702888b2c7989392Ihab Awad public void onConnectionCapabilitiesChanged(RemoteConference conference, 30107bc5ee853bc9a0b4cd46e0c702888b2c7989392Ihab Awad int connectionCapabilities) { 30207bc5ee853bc9a0b4cd46e0c702888b2c7989392Ihab Awad setConnectionCapabilities(connectionCapabilities); 3038000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 3048000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad 3058000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad @Override 306571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn public void onConnectionPropertiesChanged(RemoteConference conference, 307571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn int connectionProperties) { 308571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn setConnectionProperties(connectionProperties); 309571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn } 310571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn 311571d5e66b8cbee023702b4b0a2a1c28663c5a7f8Tyler Gunn @Override 3128000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad public void onDestroyed(RemoteConference conference) { 3138000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad destroy(); 3145be64bc46c23b614d5452ca398a6bb7a512f1887Andrew Lee mRemote.unregisterCallback(mRemoteCallback); 3158000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad mManagedConferenceByRemote.remove(mRemote); 3168000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 317c43894f93d4481eac726e1a47b3fe1b620f37876Yorke Lee 318c43894f93d4481eac726e1a47b3fe1b620f37876Yorke Lee }; 319c43894f93d4481eac726e1a47b3fe1b620f37876Yorke Lee 320c43894f93d4481eac726e1a47b3fe1b620f37876Yorke Lee @Override 321c43894f93d4481eac726e1a47b3fe1b620f37876Yorke Lee public void onPlayDtmfTone(char c) { 322c43894f93d4481eac726e1a47b3fe1b620f37876Yorke Lee mRemote.playDtmfTone(c); 323c43894f93d4481eac726e1a47b3fe1b620f37876Yorke Lee }; 324c43894f93d4481eac726e1a47b3fe1b620f37876Yorke Lee 325c43894f93d4481eac726e1a47b3fe1b620f37876Yorke Lee @Override 326c43894f93d4481eac726e1a47b3fe1b620f37876Yorke Lee public void onStopDtmfTone() { 327c43894f93d4481eac726e1a47b3fe1b620f37876Yorke Lee mRemote.stopDtmfTone(); 3288000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad }; 3298000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad 3308000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad private final RemoteConference mRemote; 3318000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad 3328000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad public TestManagedConference(RemoteConference remote) { 3338000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad super(null); 3348000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad mRemote = remote; 3355be64bc46c23b614d5452ca398a6bb7a512f1887Andrew Lee remote.registerCallback(mRemoteCallback); 3368000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad setActive(); 3378000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad for (RemoteConnection r : remote.getConnections()) { 3388000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad TestManagedConnection c = mManagedConnectionByRemote.get(r); 3398000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad if (c != null) { 3408000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad addConnection(c); 3418000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 3428000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 3438000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 3448000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 3458000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad 346a123a5b741135a4f97a997e498a88ab33257d72dIhab Awad static void log(String msg) { 34750e41d0d9c179e9628098cdddb12546b8882839fSailesh Nepal Log.w("telecomtestcs", "[TestConnectionManager] " + msg); 348c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 349c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 3508000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad private final Map<RemoteConference, TestManagedConference> mManagedConferenceByRemote 3518000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad = new HashMap<>(); 3528000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad private final Map<RemoteConnection, TestManagedConnection> mManagedConnectionByRemote 3538000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad = new HashMap<>(); 3548000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad 355c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 356c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad public Connection onCreateOutgoingConnection( 357c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad PhoneAccountHandle connectionManagerAccount, 358c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad final ConnectionRequest request) { 3598000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad return makeConnection(request, false); 360c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 361c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad 362c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad @Override 363c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad public Connection onCreateIncomingConnection( 364c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad PhoneAccountHandle connectionManagerAccount, 365c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad final ConnectionRequest request) { 3668000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad return makeConnection(request, true); 3678000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 3688000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad 3698000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad @Override 3708000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad public void onConference(Connection a, Connection b) { 3718000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad conferenceRemoteConnections( 3728000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad ((TestManagedConnection) a).mRemote, 3738000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad ((TestManagedConnection) b).mRemote); 3748000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 3758000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad 3768000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad @Override 3778000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad public void onRemoteConferenceAdded(RemoteConference remoteConference) { 3788000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad addConference(new TestManagedConference(remoteConference)); 3798000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad } 3808000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad 381a123a5b741135a4f97a997e498a88ab33257d72dIhab Awad Map<RemoteConnection, TestManagedConnection> getManagedConnectionByRemote() { 382a123a5b741135a4f97a997e498a88ab33257d72dIhab Awad return mManagedConnectionByRemote; 383a123a5b741135a4f97a997e498a88ab33257d72dIhab Awad } 384a123a5b741135a4f97a997e498a88ab33257d72dIhab Awad 3858000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad private Connection makeConnection(ConnectionRequest request, boolean incoming) { 3868000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad RemoteConnection remote = incoming 3878000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad ? createRemoteIncomingConnection(request.getAccountHandle(), request) 3888000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad : createRemoteOutgoingConnection(request.getAccountHandle(), request); 3898000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad TestManagedConnection local = new TestManagedConnection(remote, false); 3908000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad mManagedConnectionByRemote.put(remote, local); 3918000845a81fd6a88ff69cb11e1b6dff5f47c2332Ihab Awad return local; 392c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad } 393c17294cfaf9cc649a362117fba544f0b5cb18cdfIhab Awad} 394