RemoteConnection.java revision 87b73f370e2b8a76b0540580f43edba6ec21c6cf
152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon/* 252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * Copyright (C) 2014 The Android Open Source Project 352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * 452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * Licensed under the Apache License, Version 2.0 (the "License"); 552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * you may not use this file except in compliance with the License. 652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * You may obtain a copy of the License at 752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * 852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * http://www.apache.org/licenses/LICENSE-2.0 952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * 1052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * Unless required by applicable law or agreed to in writing, software 1152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * distributed under the License is distributed on an "AS IS" BASIS, 1252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * See the License for the specific language governing permissions and 1452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * limitations under the License. 1552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 1652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 17ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunnpackage android.telecom; 1852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 19ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunnimport com.android.internal.telecom.IConnectionService; 20ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunnimport com.android.internal.telecom.IVideoCallback; 21ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunnimport com.android.internal.telecom.IVideoProvider; 22b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad 236b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordonimport android.annotation.Nullable; 244af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Leeimport android.annotation.SystemApi; 2552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordonimport android.net.Uri; 266b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordonimport android.os.Bundle; 27011728fc3a4368b601844d225d1f37bf48ea5735Andrew Leeimport android.os.Handler; 28a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awadimport android.os.IBinder; 2952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordonimport android.os.RemoteException; 30a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awadimport android.view.Surface; 3152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 327c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordonimport java.util.ArrayList; 33f4669dffd5d604f227ceb74c6ea86ee78a882e73Sailesh Nepalimport java.util.Collections; 345d0410fa7c2dead7906780551ba4aa0305021cefIhab Awadimport java.util.List; 3552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordonimport java.util.Set; 36f4669dffd5d604f227ceb74c6ea86ee78a882e73Sailesh Nepalimport java.util.concurrent.ConcurrentHashMap; 3752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 3852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon/** 39b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * A connection provided to a {@link ConnectionService} by another {@code ConnectionService} 40b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * running in a different process. 41b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * 42b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * @see ConnectionService#createRemoteOutgoingConnection(PhoneAccountHandle, ConnectionRequest) 43b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * @see ConnectionService#createRemoteIncomingConnection(PhoneAccountHandle, ConnectionRequest) 4452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 4552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordonpublic final class RemoteConnection { 465d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 47100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public static abstract class Callback { 485d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 495d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Invoked when the state of this {@code RemoteConnection} has changed. See 505d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * {@link #getState()}. 515d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 525d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 535d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param state The new state of the {@code RemoteConnection}. 545d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 55bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton public void onStateChanged(RemoteConnection connection, int state) {} 565d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 575d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 585d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Invoked when this {@code RemoteConnection} is disconnected. 595d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 605d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 617f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * @param disconnectCause The ({@see DisconnectCause}) associated with this failed 627f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * connection. 635d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 645d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad public void onDisconnected( 655d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad RemoteConnection connection, 667f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee DisconnectCause disconnectCause) {} 675d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 685d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 695d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Invoked when this {@code RemoteConnection} is requesting ringback. See 70100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * {@link #isRingbackRequested()}. 715d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 725d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 735d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param ringback Whether the {@code RemoteConnection} is requesting ringback. 745d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 75100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public void onRingbackRequested(RemoteConnection connection, boolean ringback) {} 765d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 775d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 785d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Indicates that the call capabilities of this {@code RemoteConnection} have changed. 795c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * See {@link #getConnectionCapabilities()}. 805d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 815d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 825c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * @param connectionCapabilities The new capabilities of the {@code RemoteConnection}. 835d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 845c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad public void onConnectionCapabilitiesChanged( 855c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad RemoteConnection connection, 865c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad int connectionCapabilities) {} 875d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 885d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 895d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Invoked when the post-dial sequence in the outgoing {@code Connection} has reached a 905d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * pause character. This causes the post-dial signals to stop pending user confirmation. An 915d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * implementation should present this choice to the user and invoke 92b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * {@link RemoteConnection#postDialContinue(boolean)} when the user makes the choice. 935d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 945d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 955d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param remainingPostDialSequence The post-dial characters that remain to be sent. 965d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 975d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad public void onPostDialWait(RemoteConnection connection, String remainingPostDialSequence) {} 985d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 995d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 10027d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen * Invoked when the post-dial sequence in the outgoing {@code Connection} has processed 10127d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen * a character. 10227d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen * 10327d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen * @param connection The {@code RemoteConnection} invoking this method. 10427d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen * @param nextChar The character being processed. 10527d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen */ 10627d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen public void onPostDialChar(RemoteConnection connection, char nextChar) {} 10727d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen 10827d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen /** 1095d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Indicates that the VOIP audio status of this {@code RemoteConnection} has changed. 110100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * See {@link #isVoipAudioMode()}. 1115d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 1125d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 1135d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param isVoip Whether the new audio state of the {@code RemoteConnection} is VOIP. 1145d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 115100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public void onVoipAudioChanged(RemoteConnection connection, boolean isVoip) {} 1165d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 1175d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 1185d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Indicates that the status hints of this {@code RemoteConnection} have changed. See 1195d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * {@link #getStatusHints()} ()}. 1205d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 1215d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 1225d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param statusHints The new status hints of the {@code RemoteConnection}. 1235d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 124bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton public void onStatusHintsChanged(RemoteConnection connection, StatusHints statusHints) {} 1255d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 1265d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 127100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * Indicates that the address (e.g., phone number) of this {@code RemoteConnection} has 128100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * changed. See {@link #getAddress()} and {@link #getAddressPresentation()}. 1295d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 1305d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 131100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * @param address The new address of the {@code RemoteConnection}. 132100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * @param presentation The presentation requirements for the address. 133ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn * See {@link TelecomManager} for valid values. 1345d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 135100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public void onAddressChanged(RemoteConnection connection, Uri address, int presentation) {} 1365d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 1375d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 1385d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Indicates that the caller display name of this {@code RemoteConnection} has changed. 1395d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * See {@link #getCallerDisplayName()} and {@link #getCallerDisplayNamePresentation()}. 1405d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 1415d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 1425d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param callerDisplayName The new caller display name of the {@code RemoteConnection}. 1439d568c01db1f90fbe9cbff1d9385e7e7b809e066Nancy Chen * @param presentation The presentation requirements for the handle. 144ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn * See {@link TelecomManager} for valid values. 1455d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 146bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton public void onCallerDisplayNameChanged( 147bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton RemoteConnection connection, String callerDisplayName, int presentation) {} 1485d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 1495d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 1505d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Indicates that the video state of this {@code RemoteConnection} has changed. 1515d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * See {@link #getVideoState()}. 1525d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 1535d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 1545d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param videoState The new video state of the {@code RemoteConnection}. 1555d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 156bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton public void onVideoStateChanged(RemoteConnection connection, int videoState) {} 1575d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 1585d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 1595d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Indicates that this {@code RemoteConnection} has been destroyed. No further requests 1605d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * should be made to the {@code RemoteConnection}, and references to it should be cleared. 1615d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 1625d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 1635d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 164bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton public void onDestroyed(RemoteConnection connection) {} 165b8e85c74e5910a461078704048d67f82b216508cIhab Awad 166b8e85c74e5910a461078704048d67f82b216508cIhab Awad /** 167b8e85c74e5910a461078704048d67f82b216508cIhab Awad * Indicates that the {@code RemoteConnection}s with which this {@code RemoteConnection} 168b8e85c74e5910a461078704048d67f82b216508cIhab Awad * may be asked to create a conference has changed. 169b8e85c74e5910a461078704048d67f82b216508cIhab Awad * 170b8e85c74e5910a461078704048d67f82b216508cIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 171b8e85c74e5910a461078704048d67f82b216508cIhab Awad * @param conferenceableConnections The {@code RemoteConnection}s with which this 172b8e85c74e5910a461078704048d67f82b216508cIhab Awad * {@code RemoteConnection} may be asked to create a conference. 173b8e85c74e5910a461078704048d67f82b216508cIhab Awad */ 1747c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon public void onConferenceableConnectionsChanged( 175b8e85c74e5910a461078704048d67f82b216508cIhab Awad RemoteConnection connection, 176b8e85c74e5910a461078704048d67f82b216508cIhab Awad List<RemoteConnection> conferenceableConnections) {} 177b8e85c74e5910a461078704048d67f82b216508cIhab Awad 178b8e85c74e5910a461078704048d67f82b216508cIhab Awad /** 179a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * Indicates that the {@code VideoProvider} associated with this {@code RemoteConnection} 180a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * has changed. 181a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * 182a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 183a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * @param videoProvider The new {@code VideoProvider} associated with this 184a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * {@code RemoteConnection}. 185a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad */ 186a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void onVideoProviderChanged( 187a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad RemoteConnection connection, VideoProvider videoProvider) {} 188a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 189a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad /** 190b8e85c74e5910a461078704048d67f82b216508cIhab Awad * Indicates that the {@code RemoteConference} that this {@code RemoteConnection} is a part 191b8e85c74e5910a461078704048d67f82b216508cIhab Awad * of has changed. 192b8e85c74e5910a461078704048d67f82b216508cIhab Awad * 193b8e85c74e5910a461078704048d67f82b216508cIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 194b8e85c74e5910a461078704048d67f82b216508cIhab Awad * @param conference The {@code RemoteConference} of which this {@code RemoteConnection} is 195b8e85c74e5910a461078704048d67f82b216508cIhab Awad * a part, which may be {@code null}. 196b8e85c74e5910a461078704048d67f82b216508cIhab Awad */ 197b8e85c74e5910a461078704048d67f82b216508cIhab Awad public void onConferenceChanged( 198b8e85c74e5910a461078704048d67f82b216508cIhab Awad RemoteConnection connection, 199b8e85c74e5910a461078704048d67f82b216508cIhab Awad RemoteConference conference) {} 2006b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon 2016b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon /** 2026b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon * Handles changes to the {@code RemoteConference} extras. 2036b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon * 2046b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon * @param connection The {@code RemoteConnection} invoking this method. 2056b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon * @param extras The extras containing other information associated with the connection. 2066b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon */ 2076b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon public void onExtrasChanged(RemoteConnection connection, @Nullable Bundle extras) {} 208bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton } 209bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton 210a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public static class VideoProvider { 211a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 212a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn public abstract static class Callback { 213a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn public void onSessionModifyRequestReceived( 214a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProvider videoProvider, 215a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProfile videoProfile) {} 216a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 217a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn public void onSessionModifyResponseReceived( 218a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProvider videoProvider, 219a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad int status, 220a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProfile requestedProfile, 221a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProfile responseProfile) {} 222a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 223a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn public void onCallSessionEvent(VideoProvider videoProvider, int event) {} 224a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 225a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void onPeerDimensionsChanged(VideoProvider videoProvider, int width, int height) {} 226a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 22707366813cdf3768dcd69a1f744023747564d654aRekha Kumar public void onCallDataUsageChanged(VideoProvider videoProvider, long dataUsage) {} 228a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 229a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void onCameraCapabilitiesChanged( 230a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProvider videoProvider, 231400470fab932fe3374149ab89386e460ea161002Yorke Lee VideoProfile.CameraCapabilities cameraCapabilities) {} 23207366813cdf3768dcd69a1f744023747564d654aRekha Kumar 23307366813cdf3768dcd69a1f744023747564d654aRekha Kumar public void onVideoQualityChanged(VideoProvider videoProvider, int videoQuality) {} 234a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 235a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 236a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad private final IVideoCallback mVideoCallbackDelegate = new IVideoCallback() { 237a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad @Override 238a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void receiveSessionModifyRequest(VideoProfile videoProfile) { 239a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn for (Callback l : mCallbacks) { 240a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn l.onSessionModifyRequestReceived(VideoProvider.this, videoProfile); 241a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 242a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 243a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 244a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad @Override 245a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void receiveSessionModifyResponse(int status, VideoProfile requestedProfile, 246a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProfile responseProfile) { 247a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn for (Callback l : mCallbacks) { 248a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn l.onSessionModifyResponseReceived( 249a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProvider.this, 250a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad status, 251a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad requestedProfile, 252a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad responseProfile); 253a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 254a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 255a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 256a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad @Override 257a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void handleCallSessionEvent(int event) { 258a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn for (Callback l : mCallbacks) { 259a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn l.onCallSessionEvent(VideoProvider.this, event); 260a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 261a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 262a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 263a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad @Override 264a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void changePeerDimensions(int width, int height) { 265a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn for (Callback l : mCallbacks) { 266a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad l.onPeerDimensionsChanged(VideoProvider.this, width, height); 267a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 268a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 269a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 270a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad @Override 27107366813cdf3768dcd69a1f744023747564d654aRekha Kumar public void changeCallDataUsage(long dataUsage) { 272a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn for (Callback l : mCallbacks) { 273a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad l.onCallDataUsageChanged(VideoProvider.this, dataUsage); 274a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 275a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 276a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 277a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad @Override 278400470fab932fe3374149ab89386e460ea161002Yorke Lee public void changeCameraCapabilities( 279400470fab932fe3374149ab89386e460ea161002Yorke Lee VideoProfile.CameraCapabilities cameraCapabilities) { 280a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn for (Callback l : mCallbacks) { 281a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad l.onCameraCapabilitiesChanged(VideoProvider.this, cameraCapabilities); 282a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 283a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 284a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 285a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad @Override 28607366813cdf3768dcd69a1f744023747564d654aRekha Kumar public void changeVideoQuality(int videoQuality) { 287a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn for (Callback l : mCallbacks) { 28807366813cdf3768dcd69a1f744023747564d654aRekha Kumar l.onVideoQualityChanged(VideoProvider.this, videoQuality); 28907366813cdf3768dcd69a1f744023747564d654aRekha Kumar } 29007366813cdf3768dcd69a1f744023747564d654aRekha Kumar } 29107366813cdf3768dcd69a1f744023747564d654aRekha Kumar 29207366813cdf3768dcd69a1f744023747564d654aRekha Kumar @Override 293a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public IBinder asBinder() { 294a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad return null; 295a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 296a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad }; 297a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 298a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad private final VideoCallbackServant mVideoCallbackServant = 299a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad new VideoCallbackServant(mVideoCallbackDelegate); 300a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 301a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad private final IVideoProvider mVideoProviderBinder; 302a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 303a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad /** 304a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * ConcurrentHashMap constructor params: 8 is initial table size, 0.9f is 305a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * load factor before resizing, 1 means we only expect a single thread to 306a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * access the map so make only a single shard 307a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad */ 308a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn private final Set<Callback> mCallbacks = Collections.newSetFromMap( 309a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn new ConcurrentHashMap<Callback, Boolean>(8, 0.9f, 1)); 310a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 311a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn VideoProvider(IVideoProvider videoProviderBinder) { 312a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder = videoProviderBinder; 313a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 31475958420f2d294ceda517c2782b294002dc2969fTyler Gunn mVideoProviderBinder.addVideoCallback(mVideoCallbackServant.getStub().asBinder()); 315a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 316a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 317a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 318a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 319a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn public void registerCallback(Callback l) { 320a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn mCallbacks.add(l); 321a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 322a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 323a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn public void unregisterCallback(Callback l) { 324a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn mCallbacks.remove(l); 325a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 326a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 327a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void setCamera(String cameraId) { 328a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 329a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.setCamera(cameraId); 330a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 331a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 332a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 333a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 334a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void setPreviewSurface(Surface surface) { 335a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 336a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.setPreviewSurface(surface); 337a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 338a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 339a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 340a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 341a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void setDisplaySurface(Surface surface) { 342a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 343a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.setDisplaySurface(surface); 344a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 345a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 346a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 347a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 348a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void setDeviceOrientation(int rotation) { 349a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 350a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.setDeviceOrientation(rotation); 351a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 352a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 353a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 354a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 355a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void setZoom(float value) { 356a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 357a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.setZoom(value); 358a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 359a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 360a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 361a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 3624538216a31d15b01e18c7b504e51031da0ce6e40Tyler Gunn public void sendSessionModifyRequest(VideoProfile fromProfile, VideoProfile toProfile) { 363a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 3644538216a31d15b01e18c7b504e51031da0ce6e40Tyler Gunn mVideoProviderBinder.sendSessionModifyRequest(fromProfile, toProfile); 365a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 366a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 367a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 368a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 369a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void sendSessionModifyResponse(VideoProfile responseProfile) { 370a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 371a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.sendSessionModifyResponse(responseProfile); 372a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 373a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 374a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 375a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 376a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void requestCameraCapabilities() { 377a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 378a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.requestCameraCapabilities(); 379a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 380a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 381a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 382a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 383a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void requestCallDataUsage() { 384a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 385a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.requestCallDataUsage(); 386a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 387a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 388a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 389a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 39032f24731604fd81289a39619bbc925b65184b505Yorke Lee public void setPauseImage(Uri uri) { 391a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 392a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.setPauseImage(uri); 393a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 394a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 395a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 396a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 397a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 398bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton private IConnectionService mConnectionService; 39952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon private final String mConnectionId; 400229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner /** 401229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner * ConcurrentHashMap constructor params: 8 is initial table size, 0.9f is 402229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner * load factor before resizing, 1 means we only expect a single thread to 403229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner * access the map so make only a single shard 404229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner */ 405011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee private final Set<CallbackRecord> mCallbackRecords = Collections.newSetFromMap( 406011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee new ConcurrentHashMap<CallbackRecord, Boolean>(8, 0.9f, 1)); 407b8e85c74e5910a461078704048d67f82b216508cIhab Awad private final List<RemoteConnection> mConferenceableConnections = new ArrayList<>(); 408b8e85c74e5910a461078704048d67f82b216508cIhab Awad private final List<RemoteConnection> mUnmodifiableconferenceableConnections = 409b8e85c74e5910a461078704048d67f82b216508cIhab Awad Collections.unmodifiableList(mConferenceableConnections); 41052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 411b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad private int mState = Connection.STATE_NEW; 4127f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee private DisconnectCause mDisconnectCause; 413100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee private boolean mRingbackRequested; 41452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon private boolean mConnected; 4155c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad private int mConnectionCapabilities; 416aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn private int mVideoState; 417a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad private VideoProvider mVideoProvider; 418100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee private boolean mIsVoipAudioMode; 419e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal private StatusHints mStatusHints; 420100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee private Uri mAddress; 421100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee private int mAddressPresentation; 422612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal private String mCallerDisplayName; 423612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal private int mCallerDisplayNamePresentation; 424b8e85c74e5910a461078704048d67f82b216508cIhab Awad private RemoteConference mConference; 4256b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon private Bundle mExtras; 42652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 42752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon /** 42852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * @hide 42952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 430b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad RemoteConnection( 431b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad String id, 432b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad IConnectionService connectionService, 433b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad ConnectionRequest request) { 434b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad mConnectionId = id; 4352a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal mConnectionService = connectionService; 43652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon mConnected = true; 437b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad mState = Connection.STATE_INITIALIZING; 438bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton } 439bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton 440bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton /** 4414a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn * @hide 4424a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn */ 4434a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn RemoteConnection(String callId, IConnectionService connectionService, 4444a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn ParcelableConnection connection) { 4454a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mConnectionId = callId; 4464a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mConnectionService = connectionService; 4474a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mConnected = true; 4484a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mState = connection.getState(); 4494a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mDisconnectCause = connection.getDisconnectCause(); 4504a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mRingbackRequested = connection.isRingbackRequested(); 4515c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad mConnectionCapabilities = connection.getConnectionCapabilities(); 4524a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mVideoState = connection.getVideoState(); 4534a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mVideoProvider = new RemoteConnection.VideoProvider(connection.getVideoProvider()); 4544a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mIsVoipAudioMode = connection.getIsVoipAudioMode(); 4554a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mStatusHints = connection.getStatusHints(); 4564a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mAddress = connection.getHandle(); 4574a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mAddressPresentation = connection.getHandlePresentation(); 4584a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mCallerDisplayName = connection.getCallerDisplayName(); 4594a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mCallerDisplayNamePresentation = connection.getCallerDisplayNamePresentation(); 4604a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mConference = null; 4614a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn } 4624a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn 4634a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn /** 464bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * Create a RemoteConnection which is used for failed connections. Note that using it for any 465bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * "real" purpose will almost certainly fail. Callers should note the failure and act 466bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * accordingly (moving on to another RemoteConnection, for example) 467bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * 4687f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * @param disconnectCause The reason for the failed connection. 4697f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * @hide 470bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton */ 4717f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee RemoteConnection(DisconnectCause disconnectCause) { 4724a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mConnectionId = "NULL"; 473bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton mConnected = false; 4746107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad mState = Connection.STATE_DISCONNECTED; 4757f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee mDisconnectCause = disconnectCause; 47652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 47752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 4785d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 479100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * Adds a callback to this {@code RemoteConnection}. 4805d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 481100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * @param callback A {@code Callback}. 4825d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 483100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public void registerCallback(Callback callback) { 484011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee registerCallback(callback, new Handler()); 485011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 486011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee 487011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee /** 488011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee * Adds a callback to this {@code RemoteConnection}. 489011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee * 490011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee * @param callback A {@code Callback}. 491011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee * @param handler A {@code Handler} which command and status changes will be delivered to. 492011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee */ 493011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void registerCallback(Callback callback, Handler handler) { 494011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee unregisterCallback(callback); 495011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee if (callback != null && handler != null) { 496011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee mCallbackRecords.add(new CallbackRecord(callback, handler)); 497011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 49852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 49952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 5005d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 501100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * Removes a callback from this {@code RemoteConnection}. 5025d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 503100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * @param callback A {@code Callback}. 5045d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 505100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public void unregisterCallback(Callback callback) { 506100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee if (callback != null) { 507011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 508011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee if (record.getCallback() == callback) { 509011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee mCallbackRecords.remove(record); 510011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee break; 511011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 512011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 513229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner } 51452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 51552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 5165d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 5175d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Obtains the state of this {@code RemoteConnection}. 5185d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 5195d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @return A state value, chosen from the {@code STATE_*} constants. 5205d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 521ade3f25a488fc3c1243db8c88554771e571beeb1Sailesh Nepal public int getState() { 522ade3f25a488fc3c1243db8c88554771e571beeb1Sailesh Nepal return mState; 523ade3f25a488fc3c1243db8c88554771e571beeb1Sailesh Nepal } 524ade3f25a488fc3c1243db8c88554771e571beeb1Sailesh Nepal 5255d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 5265c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains the reason why this {@code RemoteConnection} may have been disconnected. 5275c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 528b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * @return For a {@link Connection#STATE_DISCONNECTED} {@code RemoteConnection}, the 5295c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * disconnect cause expressed as a code chosen from among those declared in 5305c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * {@link DisconnectCause}. 5315d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 5327f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee public DisconnectCause getDisconnectCause() { 5337f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee return mDisconnectCause; 53452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 53552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 5365d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 5375c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains the capabilities of this {@code RemoteConnection}. 5385c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 5395d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @return A bitmask of the capabilities of the {@code RemoteConnection}, as defined in 5405c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * the {@code CAPABILITY_*} constants in class {@link Connection}. 5415d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 5425c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad public int getConnectionCapabilities() { 5435c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad return mConnectionCapabilities; 5441a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal } 5451a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal 5465d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 5475c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Determines if the audio mode of this {@code RemoteConnection} is VOIP. 5485c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 5495d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @return {@code true} if the {@code RemoteConnection}'s current audio mode is VOIP. 5505d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 551100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public boolean isVoipAudioMode() { 552100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee return mIsVoipAudioMode; 55333aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal } 55433aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal 5555d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 5565c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains status hints pertaining to this {@code RemoteConnection}. 5575c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 558b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * @return The current {@link StatusHints} of this {@code RemoteConnection}, 5595c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * or {@code null} if none have been set. 5605d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 561e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public StatusHints getStatusHints() { 562e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return mStatusHints; 563e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 564e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 5655d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 5665c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains the address of this {@code RemoteConnection}. 5675c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 5685c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * @return The address (e.g., phone number) to which the {@code RemoteConnection} 5695c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * is currently connected. 5705d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 571100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public Uri getAddress() { 572100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee return mAddress; 573612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 574612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 5755d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 5765c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains the presentation requirements for the address of this {@code RemoteConnection}. 5775c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 5785c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * @return The presentation requirements for the address. See 5795c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * {@link TelecomManager} for valid values. 5805d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 581100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public int getAddressPresentation() { 582100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee return mAddressPresentation; 583612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 584612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 5855d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 5865c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains the display name for this {@code RemoteConnection}'s caller. 5875c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 5885d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @return The display name for the caller. 5895d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 590100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public CharSequence getCallerDisplayName() { 591612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal return mCallerDisplayName; 592612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 593612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 5945d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 5955c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains the presentation requirements for this {@code RemoteConnection}'s 5965c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * caller's display name. 5975c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 5985d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @return The presentation requirements for the caller display name. See 5995c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * {@link TelecomManager} for valid values. 6005d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 601612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal public int getCallerDisplayNamePresentation() { 602612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal return mCallerDisplayNamePresentation; 603612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 604612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 6055d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 6065c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains the video state of this {@code RemoteConnection}. 6075c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 60887b73f370e2b8a76b0540580f43edba6ec21c6cfTyler Gunn * @return The video state of the {@code RemoteConnection}. See {@link VideoProfile}. 6095d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 610aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn public int getVideoState() { 611aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn return mVideoState; 612aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn } 613aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn 6145d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 61507366813cdf3768dcd69a1f744023747564d654aRekha Kumar * Obtains the video provider of this {@code RemoteConnection}. 616a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * @return The video provider associated with this {@code RemoteConnection}. 617a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad */ 618a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public final VideoProvider getVideoProvider() { 619a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad return mVideoProvider; 620a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 621a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 622a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad /** 6236b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon * Obtain the extras associated with this {@code RemoteConnection}. 6246b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon * 6256b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon * @return The extras for this connection. 6266b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon */ 6276b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon public final Bundle getExtras() { 6286b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon return mExtras; 6296b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon } 6306b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon 6316b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon /** 6325c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Determines whether this {@code RemoteConnection} is requesting ringback. 6335c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 6345d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @return Whether the {@code RemoteConnection} is requesting that the framework play a 6355c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * ringback tone on its behalf. 6365d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 637100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public boolean isRingbackRequested() { 63815d63c718f6e7bcec6c1fd47d2d06fd59b9c1aefSantos Cordon return mRingbackRequested; 6395d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad } 6405d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 6415d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 6425d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Instructs this {@code RemoteConnection} to abort. 6435d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 644091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal public void abort() { 645091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal try { 646091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal if (mConnected) { 6472a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal mConnectionService.abort(mConnectionId); 648091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } 649091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } catch (RemoteException ignored) { 650091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } 651091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } 652091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal 6535d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 654b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * Instructs this {@link Connection#STATE_RINGING} {@code RemoteConnection} to answer. 655be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn */ 656be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn public void answer() { 657be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn try { 658be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn if (mConnected) { 659be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn mConnectionService.answer(mConnectionId); 660be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn } 661be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn } catch (RemoteException ignored) { 662be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn } 663be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn } 664be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn 665be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn /** 666be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn * Instructs this {@link Connection#STATE_RINGING} {@code RemoteConnection} to answer. 6675d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param videoState The video state in which to answer the call. 668be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn * @hide 6695d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 6708da4c3c11faf066b2b04ba853f03be6f1c4af5d8Andrew Lee public void answer(int videoState) { 67152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 67252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 673be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn mConnectionService.answerVideo(mConnectionId, videoState); 67452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 67552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 67652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 67752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 67852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 6795d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 680b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * Instructs this {@link Connection#STATE_RINGING} {@code RemoteConnection} to reject. 6815d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 68252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon public void reject() { 68352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 68452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 6852a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal mConnectionService.reject(mConnectionId); 68652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 68752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 68852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 68952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 69052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 6915d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 6925d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Instructs this {@code RemoteConnection} to go on hold. 6935d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 69452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon public void hold() { 69552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 69652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 6972a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal mConnectionService.hold(mConnectionId); 69852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 69952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 70052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 70152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 70252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 7035d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 704b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * Instructs this {@link Connection#STATE_HOLDING} call to release from hold. 7055d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 70652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon public void unhold() { 70752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 70852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 7092a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal mConnectionService.unhold(mConnectionId); 71052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 71152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 71252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 71352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 71452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 7155d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 7165d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Instructs this {@code RemoteConnection} to disconnect. 7175d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 71852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon public void disconnect() { 71952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 72052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 7212a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal mConnectionService.disconnect(mConnectionId); 72252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 72352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 72452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 72552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 72652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 7275d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 7285d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Instructs this {@code RemoteConnection} to play a dual-tone multi-frequency signaling 7295d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * (DTMF) tone. 7305d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 7315d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Any other currently playing DTMF tone in the specified call is immediately stopped. 7325d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 7335d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param digit A character representing the DTMF digit for which to play the tone. This 7345d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * value must be one of {@code '0'} through {@code '9'}, {@code '*'} or {@code '#'}. 7355d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 7365d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad public void playDtmfTone(char digit) { 73752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 73852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 7392a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal mConnectionService.playDtmfTone(mConnectionId, digit); 74052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 74152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 74252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 74352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 74452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 7455d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 7465d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Instructs this {@code RemoteConnection} to stop any dual-tone multi-frequency signaling 7475d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * (DTMF) tone currently playing. 7485d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 7495d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * DTMF tones are played by calling {@link #playDtmfTone(char)}. If no DTMF tone is 7505d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * currently playing, this method will do nothing. 7515d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 7525d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad public void stopDtmfTone() { 75352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 75452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 7552a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal mConnectionService.stopDtmfTone(mConnectionId); 75652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 75752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 75852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 75952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 76052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 7615d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 7625d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Instructs this {@code RemoteConnection} to continue playing a post-dial DTMF string. 7635d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 7645d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * A post-dial DTMF string is a string of digits following the first instance of either 765ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn * {@link TelecomManager#DTMF_CHARACTER_WAIT} or {@link TelecomManager#DTMF_CHARACTER_PAUSE}. 7665d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * These digits are immediately sent as DTMF tones to the recipient as soon as the 7675d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * connection is made. 7685d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 769ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn * If the DTMF string contains a {@link TelecomManager#DTMF_CHARACTER_PAUSE} symbol, this 7705d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * {@code RemoteConnection} will temporarily pause playing the tones for a pre-defined period 7715d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * of time. 7725d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 773ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn * If the DTMF string contains a {@link TelecomManager#DTMF_CHARACTER_WAIT} symbol, this 77427d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen * {@code RemoteConnection} will pause playing the tones and notify callbacks via 775100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * {@link Callback#onPostDialWait(RemoteConnection, String)}. At this point, the in-call app 7765d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * should display to the user an indication of this state and an affordance to continue 7775d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * the postdial sequence. When the user decides to continue the postdial sequence, the in-call 7785d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * app should invoke the {@link #postDialContinue(boolean)} method. 7795d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 7805d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param proceed Whether or not to continue with the post-dial sequence. 7815d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 78252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon public void postDialContinue(boolean proceed) { 78352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 78452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 7852a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal mConnectionService.onPostDialContinue(mConnectionId, proceed); 78652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 78752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 78852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 78952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 79052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 7915d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 7925d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Set the audio state of this {@code RemoteConnection}. 7935d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 7945d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param state The audio state of this {@code RemoteConnection}. 7954af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee * @hide 7964af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee * @deprecated Use {@link #setCallAudioState(CallAudioState) instead. 7975d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 7984af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee @SystemApi 7994af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee @Deprecated 800b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad public void setAudioState(AudioState state) { 8014af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee setCallAudioState(new CallAudioState(state)); 8024af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee } 8034af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee 8044af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee /** 8054af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee * Set the audio state of this {@code RemoteConnection}. 8064af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee * 8074af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee * @param state The audio state of this {@code RemoteConnection}. 8084af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee */ 8094af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee public void setCallAudioState(CallAudioState state) { 810091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal try { 811091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal if (mConnected) { 8124af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee mConnectionService.onCallAudioStateChanged(mConnectionId, state); 813091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } 814091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } catch (RemoteException ignored) { 815091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } 816091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } 817091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal 81852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon /** 819b8e85c74e5910a461078704048d67f82b216508cIhab Awad * Obtain the {@code RemoteConnection}s with which this {@code RemoteConnection} may be 820b8e85c74e5910a461078704048d67f82b216508cIhab Awad * successfully asked to create a conference with. 821b8e85c74e5910a461078704048d67f82b216508cIhab Awad * 822b8e85c74e5910a461078704048d67f82b216508cIhab Awad * @return The {@code RemoteConnection}s with which this {@code RemoteConnection} may be 823b8e85c74e5910a461078704048d67f82b216508cIhab Awad * merged into a {@link RemoteConference}. 824b8e85c74e5910a461078704048d67f82b216508cIhab Awad */ 825b8e85c74e5910a461078704048d67f82b216508cIhab Awad public List<RemoteConnection> getConferenceableConnections() { 826b8e85c74e5910a461078704048d67f82b216508cIhab Awad return mUnmodifiableconferenceableConnections; 827b8e85c74e5910a461078704048d67f82b216508cIhab Awad } 828b8e85c74e5910a461078704048d67f82b216508cIhab Awad 829b8e85c74e5910a461078704048d67f82b216508cIhab Awad /** 830b8e85c74e5910a461078704048d67f82b216508cIhab Awad * Obtain the {@code RemoteConference} that this {@code RemoteConnection} may be a part 831b8e85c74e5910a461078704048d67f82b216508cIhab Awad * of, or {@code null} if there is no such {@code RemoteConference}. 832b8e85c74e5910a461078704048d67f82b216508cIhab Awad * 833b8e85c74e5910a461078704048d67f82b216508cIhab Awad * @return A {@code RemoteConference} or {@code null}; 834b8e85c74e5910a461078704048d67f82b216508cIhab Awad */ 835b8e85c74e5910a461078704048d67f82b216508cIhab Awad public RemoteConference getConference() { 836b8e85c74e5910a461078704048d67f82b216508cIhab Awad return mConference; 837b8e85c74e5910a461078704048d67f82b216508cIhab Awad } 838b8e85c74e5910a461078704048d67f82b216508cIhab Awad 839b8e85c74e5910a461078704048d67f82b216508cIhab Awad /** {@hide} */ 840b8e85c74e5910a461078704048d67f82b216508cIhab Awad String getId() { 841b8e85c74e5910a461078704048d67f82b216508cIhab Awad return mConnectionId; 842b8e85c74e5910a461078704048d67f82b216508cIhab Awad } 843b8e85c74e5910a461078704048d67f82b216508cIhab Awad 844b8e85c74e5910a461078704048d67f82b216508cIhab Awad /** {@hide} */ 845b8e85c74e5910a461078704048d67f82b216508cIhab Awad IConnectionService getConnectionService() { 846b8e85c74e5910a461078704048d67f82b216508cIhab Awad return mConnectionService; 847b8e85c74e5910a461078704048d67f82b216508cIhab Awad } 848b8e85c74e5910a461078704048d67f82b216508cIhab Awad 849b8e85c74e5910a461078704048d67f82b216508cIhab Awad /** 85052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * @hide 85152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 852011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setState(final int state) { 85352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mState != state) { 85452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon mState = state; 855011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record: mCallbackRecords) { 856011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 857011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 858011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 859011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 860011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 861011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onStateChanged(connection, state); 862011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 863011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 86452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 86552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 86652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 86752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 86852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon /** 86952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * @hide 87052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 871011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setDisconnected(final DisconnectCause disconnectCause) { 872b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad if (mState != Connection.STATE_DISCONNECTED) { 873b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad mState = Connection.STATE_DISCONNECTED; 8747f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee mDisconnectCause = disconnectCause; 87552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 876011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 877011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 878011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 879011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 880011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 881011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 882011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onDisconnected(connection, disconnectCause); 883011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 884011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 88552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 88652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 88752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 88852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 88952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon /** 89052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * @hide 89152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 892011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setRingbackRequested(final boolean ringback) { 893100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee if (mRingbackRequested != ringback) { 894100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee mRingbackRequested = ringback; 895011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 896011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 897011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 898011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 899011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 900011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 901011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onRingbackRequested(connection, ringback); 902011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 903011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 90452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 90552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 90652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 90752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 90852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon /** 90952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * @hide 91052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 911011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setConnectionCapabilities(final int connectionCapabilities) { 9125c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad mConnectionCapabilities = connectionCapabilities; 913011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 914011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 915011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 916011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 917011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 918011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 919011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onConnectionCapabilitiesChanged(connection, connectionCapabilities); 920011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 921011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 9221a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal } 9231a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal } 9241a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal 9251a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal /** 9261a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal * @hide 9271a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal */ 92852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon void setDestroyed() { 929011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee if (!mCallbackRecords.isEmpty()) { 930100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee // Make sure that the callbacks are notified that the call is destroyed first. 931b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad if (mState != Connection.STATE_DISCONNECTED) { 9327f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee setDisconnected( 9337f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee new DisconnectCause(DisconnectCause.ERROR, "Connection destroyed.")); 93452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 93552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 936011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 937011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 938011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 939011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 940011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 941011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 942011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onDestroyed(connection); 943011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 944011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 94552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 946011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee mCallbackRecords.clear(); 94752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 94852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon mConnected = false; 94952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 95052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 95152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 95252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon /** 95352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * @hide 95452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 955011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setPostDialWait(final String remainingDigits) { 956011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 957011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 958011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 959011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 960011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 961011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 962011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onPostDialWait(connection, remainingDigits); 963011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 964011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 96552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 966aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn } 967aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn 968aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn /** 969aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn * @hide 970aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn */ 971011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void onPostDialChar(final char nextChar) { 972011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 973011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 974011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 975011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 976011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 977011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 97840451b3977f51bd0726b645f73167869f71d4e4cSailesh Nepal callback.onPostDialChar(connection, nextChar); 979011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 980011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 98127d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen } 98227d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen } 98327d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen 98427d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen /** 98527d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen * @hide 98627d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen */ 987011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setVideoState(final int videoState) { 988aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn mVideoState = videoState; 989011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 990011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 991011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 992011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 993011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 994011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 995011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onVideoStateChanged(connection, videoState); 996011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 997011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 998aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn } 99952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 10002a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal 1001a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad /** 1002a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * @hide 1003a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad */ 1004011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setVideoProvider(final VideoProvider videoProvider) { 1005a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProvider = videoProvider; 1006011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1007011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1008011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1009011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1010011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1011011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1012011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onVideoProviderChanged(connection, videoProvider); 1013011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1014011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 1015a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 1016a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 1017a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 101833aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal /** @hide */ 1019011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setIsVoipAudioMode(final boolean isVoip) { 1020100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee mIsVoipAudioMode = isVoip; 1021011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1022011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1023011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1024011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1025011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1026011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1027011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onVoipAudioChanged(connection, isVoip); 1028011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1029011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 103033aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal } 103133aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal } 1032e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 1033e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal /** @hide */ 1034011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setStatusHints(final StatusHints statusHints) { 1035e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal mStatusHints = statusHints; 1036011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1037011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1038011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1039011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1040011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1041011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1042011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onStatusHintsChanged(connection, statusHints); 1043011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1044011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 1045612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 1046612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 1047612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 1048612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal /** @hide */ 1049011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setAddress(final Uri address, final int presentation) { 1050100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee mAddress = address; 1051100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee mAddressPresentation = presentation; 1052011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1053011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1054011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1055011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1056011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1057011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1058011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onAddressChanged(connection, address, presentation); 1059011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1060011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 1061612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 1062612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 1063612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 1064612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal /** @hide */ 1065011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setCallerDisplayName(final String callerDisplayName, final int presentation) { 1066612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal mCallerDisplayName = callerDisplayName; 1067612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal mCallerDisplayNamePresentation = presentation; 1068011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1069011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1070011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1071011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1072011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1073011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1074011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onCallerDisplayNameChanged( 1075011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee connection, callerDisplayName, presentation); 1076011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1077011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 1078e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 1079e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 10802ab88cc313fc4af7fb9436e236cd3a5d1ac58478Sailesh Nepal 10812ab88cc313fc4af7fb9436e236cd3a5d1ac58478Sailesh Nepal /** @hide */ 1082011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setConferenceableConnections(final List<RemoteConnection> conferenceableConnections) { 10837c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon mConferenceableConnections.clear(); 10847c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon mConferenceableConnections.addAll(conferenceableConnections); 1085011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1086011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1087011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1088011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1089011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1090011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1091011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onConferenceableConnectionsChanged( 1092011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee connection, mUnmodifiableconferenceableConnections); 1093011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1094011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 1095b8e85c74e5910a461078704048d67f82b216508cIhab Awad } 1096b8e85c74e5910a461078704048d67f82b216508cIhab Awad } 1097b8e85c74e5910a461078704048d67f82b216508cIhab Awad 1098b8e85c74e5910a461078704048d67f82b216508cIhab Awad /** @hide */ 1099011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setConference(final RemoteConference conference) { 1100b8e85c74e5910a461078704048d67f82b216508cIhab Awad if (mConference != conference) { 1101b8e85c74e5910a461078704048d67f82b216508cIhab Awad mConference = conference; 1102011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1103011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1104011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1105011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1106011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1107011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1108011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onConferenceChanged(connection, conference); 1109011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1110011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 1111b8e85c74e5910a461078704048d67f82b216508cIhab Awad } 11127c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon } 11137c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon } 11147c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon 11156b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon /** @hide */ 11166b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon void setExtras(final Bundle extras) { 11176b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon mExtras = extras; 11186b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon for (CallbackRecord record : mCallbackRecords) { 11196b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon final RemoteConnection connection = this; 11206b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon final Callback callback = record.getCallback(); 11216b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon record.getHandler().post(new Runnable() { 11226b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon @Override 11236b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon public void run() { 11246b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon callback.onExtrasChanged(connection, extras); 11256b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon } 11266b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon }); 11276b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon } 11286b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon } 11296b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon 1130bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton /** 11316107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad * Create a RemoteConnection represents a failure, and which will be in 11326107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad * {@link Connection#STATE_DISCONNECTED}. Attempting to use it for anything will almost 11336107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad * certainly result in bad things happening. Do not do this. 1134bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * 1135bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * @return a failed {@link RemoteConnection} 1136bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * 1137bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * @hide 1138bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton */ 11397f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee public static RemoteConnection failure(DisconnectCause disconnectCause) { 11407f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee return new RemoteConnection(disconnectCause); 1141bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton } 1142011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee 1143011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee private static final class CallbackRecord extends Callback { 1144011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee private final Callback mCallback; 1145011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee private final Handler mHandler; 1146011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee 1147011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public CallbackRecord(Callback callback, Handler handler) { 1148011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee mCallback = callback; 1149011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee mHandler = handler; 1150011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1151011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee 1152011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public Callback getCallback() { 1153011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee return mCallback; 1154011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1155011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee 1156011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public Handler getHandler() { 1157011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee return mHandler; 1158011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1159011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 116052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon} 1161