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 2357006aa82a69740df73415a456d31993e2785e24Hall Liuimport android.annotation.NonNull; 246b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordonimport android.annotation.Nullable; 254af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Leeimport android.annotation.SystemApi; 26295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunnimport android.hardware.camera2.CameraManager; 2752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordonimport android.net.Uri; 286b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordonimport android.os.Bundle; 29011728fc3a4368b601844d225d1f37bf48ea5735Andrew Leeimport android.os.Handler; 30a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awadimport android.os.IBinder; 3152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordonimport android.os.RemoteException; 32a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awadimport android.view.Surface; 3352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 347c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordonimport java.util.ArrayList; 35f4669dffd5d604f227ceb74c6ea86ee78a882e73Sailesh Nepalimport java.util.Collections; 365d0410fa7c2dead7906780551ba4aa0305021cefIhab Awadimport java.util.List; 3752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordonimport java.util.Set; 38f4669dffd5d604f227ceb74c6ea86ee78a882e73Sailesh Nepalimport java.util.concurrent.ConcurrentHashMap; 3952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 4052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon/** 41b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * A connection provided to a {@link ConnectionService} by another {@code ConnectionService} 42b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * running in a different process. 43b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * 44b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * @see ConnectionService#createRemoteOutgoingConnection(PhoneAccountHandle, ConnectionRequest) 45b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * @see ConnectionService#createRemoteIncomingConnection(PhoneAccountHandle, ConnectionRequest) 4652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 4752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordonpublic final class RemoteConnection { 485d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 49895d4b8f63389b79974dfd3e36f1ab10b5ceb4dcSantos Cordon /** 50895d4b8f63389b79974dfd3e36f1ab10b5ceb4dcSantos Cordon * Callback base class for {@link RemoteConnection}. 51895d4b8f63389b79974dfd3e36f1ab10b5ceb4dcSantos Cordon */ 52100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public static abstract class Callback { 535d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 545d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Invoked when the state of this {@code RemoteConnection} has changed. See 555d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * {@link #getState()}. 565d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 575d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 585d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param state The new state of the {@code RemoteConnection}. 595d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 60bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton public void onStateChanged(RemoteConnection connection, int state) {} 615d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 625d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 635d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Invoked when this {@code RemoteConnection} is disconnected. 645d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 655d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 667f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * @param disconnectCause The ({@see DisconnectCause}) associated with this failed 677f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * connection. 685d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 695d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad public void onDisconnected( 705d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad RemoteConnection connection, 717f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee DisconnectCause disconnectCause) {} 725d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 735d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 745d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Invoked when this {@code RemoteConnection} is requesting ringback. See 75100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * {@link #isRingbackRequested()}. 765d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 775d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 785d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param ringback Whether the {@code RemoteConnection} is requesting ringback. 795d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 80100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public void onRingbackRequested(RemoteConnection connection, boolean ringback) {} 815d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 825d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 835d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Indicates that the call capabilities of this {@code RemoteConnection} have changed. 845c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * See {@link #getConnectionCapabilities()}. 855d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 865d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 875c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * @param connectionCapabilities The new capabilities of the {@code RemoteConnection}. 885d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 895c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad public void onConnectionCapabilitiesChanged( 905c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad RemoteConnection connection, 915c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad int connectionCapabilities) {} 925d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 935d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 94720c664401081ca00e56c7eef12641ae792da530Tyler Gunn * Indicates that the call properties of this {@code RemoteConnection} have changed. 95720c664401081ca00e56c7eef12641ae792da530Tyler Gunn * See {@link #getConnectionProperties()}. 96720c664401081ca00e56c7eef12641ae792da530Tyler Gunn * 97720c664401081ca00e56c7eef12641ae792da530Tyler Gunn * @param connection The {@code RemoteConnection} invoking this method. 98720c664401081ca00e56c7eef12641ae792da530Tyler Gunn * @param connectionProperties The new properties of the {@code RemoteConnection}. 99720c664401081ca00e56c7eef12641ae792da530Tyler Gunn */ 100720c664401081ca00e56c7eef12641ae792da530Tyler Gunn public void onConnectionPropertiesChanged( 101720c664401081ca00e56c7eef12641ae792da530Tyler Gunn RemoteConnection connection, 102720c664401081ca00e56c7eef12641ae792da530Tyler Gunn int connectionProperties) {} 103720c664401081ca00e56c7eef12641ae792da530Tyler Gunn 104720c664401081ca00e56c7eef12641ae792da530Tyler Gunn /** 1055d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Invoked when the post-dial sequence in the outgoing {@code Connection} has reached a 1065d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * pause character. This causes the post-dial signals to stop pending user confirmation. An 1075d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * implementation should present this choice to the user and invoke 108b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * {@link RemoteConnection#postDialContinue(boolean)} when the user makes the choice. 1095d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 1105d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 1115d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param remainingPostDialSequence The post-dial characters that remain to be sent. 1125d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 1135d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad public void onPostDialWait(RemoteConnection connection, String remainingPostDialSequence) {} 1145d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 1155d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 11627d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen * Invoked when the post-dial sequence in the outgoing {@code Connection} has processed 11727d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen * a character. 11827d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen * 11927d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen * @param connection The {@code RemoteConnection} invoking this method. 12027d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen * @param nextChar The character being processed. 12127d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen */ 12227d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen public void onPostDialChar(RemoteConnection connection, char nextChar) {} 12327d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen 12427d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen /** 1255d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Indicates that the VOIP audio status of this {@code RemoteConnection} has changed. 126100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * See {@link #isVoipAudioMode()}. 1275d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 1285d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 1295d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param isVoip Whether the new audio state of the {@code RemoteConnection} is VOIP. 1305d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 131100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public void onVoipAudioChanged(RemoteConnection connection, boolean isVoip) {} 1325d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 1335d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 1345d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Indicates that the status hints of this {@code RemoteConnection} have changed. See 1355d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * {@link #getStatusHints()} ()}. 1365d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 1375d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 1385d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param statusHints The new status hints of the {@code RemoteConnection}. 1395d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 140bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton public void onStatusHintsChanged(RemoteConnection connection, StatusHints statusHints) {} 1415d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 1425d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 143100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * Indicates that the address (e.g., phone number) of this {@code RemoteConnection} has 144100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * changed. See {@link #getAddress()} and {@link #getAddressPresentation()}. 1455d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 1465d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 147100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * @param address The new address of the {@code RemoteConnection}. 148100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * @param presentation The presentation requirements for the address. 149ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn * See {@link TelecomManager} for valid values. 1505d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 151100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public void onAddressChanged(RemoteConnection connection, Uri address, int presentation) {} 1525d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 1535d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 1545d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Indicates that the caller display name of this {@code RemoteConnection} has changed. 1555d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * See {@link #getCallerDisplayName()} and {@link #getCallerDisplayNamePresentation()}. 1565d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 1575d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 1585d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param callerDisplayName The new caller display name of the {@code RemoteConnection}. 1599d568c01db1f90fbe9cbff1d9385e7e7b809e066Nancy Chen * @param presentation The presentation requirements for the handle. 160ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn * See {@link TelecomManager} for valid values. 1615d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 162bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton public void onCallerDisplayNameChanged( 163bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton RemoteConnection connection, String callerDisplayName, int presentation) {} 1645d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 1655d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 1665d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Indicates that the video state of this {@code RemoteConnection} has changed. 1675d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * See {@link #getVideoState()}. 1685d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 1695d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 1705d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param videoState The new video state of the {@code RemoteConnection}. 1715d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 172bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton public void onVideoStateChanged(RemoteConnection connection, int videoState) {} 1735d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 1745d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 1755d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Indicates that this {@code RemoteConnection} has been destroyed. No further requests 1765d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * should be made to the {@code RemoteConnection}, and references to it should be cleared. 1775d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 1785d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 1795d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 180bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton public void onDestroyed(RemoteConnection connection) {} 181b8e85c74e5910a461078704048d67f82b216508cIhab Awad 182b8e85c74e5910a461078704048d67f82b216508cIhab Awad /** 183b8e85c74e5910a461078704048d67f82b216508cIhab Awad * Indicates that the {@code RemoteConnection}s with which this {@code RemoteConnection} 184b8e85c74e5910a461078704048d67f82b216508cIhab Awad * may be asked to create a conference has changed. 185b8e85c74e5910a461078704048d67f82b216508cIhab Awad * 186b8e85c74e5910a461078704048d67f82b216508cIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 187b8e85c74e5910a461078704048d67f82b216508cIhab Awad * @param conferenceableConnections The {@code RemoteConnection}s with which this 188b8e85c74e5910a461078704048d67f82b216508cIhab Awad * {@code RemoteConnection} may be asked to create a conference. 189b8e85c74e5910a461078704048d67f82b216508cIhab Awad */ 1907c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon public void onConferenceableConnectionsChanged( 191b8e85c74e5910a461078704048d67f82b216508cIhab Awad RemoteConnection connection, 192b8e85c74e5910a461078704048d67f82b216508cIhab Awad List<RemoteConnection> conferenceableConnections) {} 193b8e85c74e5910a461078704048d67f82b216508cIhab Awad 194b8e85c74e5910a461078704048d67f82b216508cIhab Awad /** 195a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * Indicates that the {@code VideoProvider} associated with this {@code RemoteConnection} 196a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * has changed. 197a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * 198a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 199a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * @param videoProvider The new {@code VideoProvider} associated with this 200a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * {@code RemoteConnection}. 201a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad */ 202a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void onVideoProviderChanged( 203a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad RemoteConnection connection, VideoProvider videoProvider) {} 204a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 205a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad /** 206b8e85c74e5910a461078704048d67f82b216508cIhab Awad * Indicates that the {@code RemoteConference} that this {@code RemoteConnection} is a part 207b8e85c74e5910a461078704048d67f82b216508cIhab Awad * of has changed. 208b8e85c74e5910a461078704048d67f82b216508cIhab Awad * 209b8e85c74e5910a461078704048d67f82b216508cIhab Awad * @param connection The {@code RemoteConnection} invoking this method. 210b8e85c74e5910a461078704048d67f82b216508cIhab Awad * @param conference The {@code RemoteConference} of which this {@code RemoteConnection} is 211b8e85c74e5910a461078704048d67f82b216508cIhab Awad * a part, which may be {@code null}. 212b8e85c74e5910a461078704048d67f82b216508cIhab Awad */ 213b8e85c74e5910a461078704048d67f82b216508cIhab Awad public void onConferenceChanged( 214b8e85c74e5910a461078704048d67f82b216508cIhab Awad RemoteConnection connection, 215b8e85c74e5910a461078704048d67f82b216508cIhab Awad RemoteConference conference) {} 2166b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon 2176b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon /** 218895d4b8f63389b79974dfd3e36f1ab10b5ceb4dcSantos Cordon * Handles changes to the {@code RemoteConnection} extras. 2196b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon * 2206b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon * @param connection The {@code RemoteConnection} invoking this method. 2216b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon * @param extras The extras containing other information associated with the connection. 2226b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon */ 2236b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon public void onExtrasChanged(RemoteConnection connection, @Nullable Bundle extras) {} 224bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn 225bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn /** 226bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn * Handles a connection event propagated to this {@link RemoteConnection}. 227876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn * <p> 228876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn * Connection events originate from {@link Connection#sendConnectionEvent(String, Bundle)}. 229bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn * 230bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn * @param connection The {@code RemoteConnection} invoking this method. 231bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn * @param event The connection event. 232876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn * @param extras Extras associated with the event. 233bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn */ 234876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn public void onConnectionEvent(RemoteConnection connection, String event, Bundle extras) {} 23557006aa82a69740df73415a456d31993e2785e24Hall Liu 23657006aa82a69740df73415a456d31993e2785e24Hall Liu /** 23757006aa82a69740df73415a456d31993e2785e24Hall Liu * Indicates that a RTT session was successfully established on this 23857006aa82a69740df73415a456d31993e2785e24Hall Liu * {@link RemoteConnection}. See {@link Connection#sendRttInitiationSuccess()}. 23957006aa82a69740df73415a456d31993e2785e24Hall Liu * @hide 24057006aa82a69740df73415a456d31993e2785e24Hall Liu * @param connection The {@code RemoteConnection} invoking this method. 24157006aa82a69740df73415a456d31993e2785e24Hall Liu */ 24257006aa82a69740df73415a456d31993e2785e24Hall Liu public void onRttInitiationSuccess(RemoteConnection connection) {} 24357006aa82a69740df73415a456d31993e2785e24Hall Liu 24457006aa82a69740df73415a456d31993e2785e24Hall Liu /** 24557006aa82a69740df73415a456d31993e2785e24Hall Liu * Indicates that a RTT session failed to be established on this 24657006aa82a69740df73415a456d31993e2785e24Hall Liu * {@link RemoteConnection}. See {@link Connection#sendRttInitiationFailure()}. 24757006aa82a69740df73415a456d31993e2785e24Hall Liu * @hide 24857006aa82a69740df73415a456d31993e2785e24Hall Liu * @param connection The {@code RemoteConnection} invoking this method. 24957006aa82a69740df73415a456d31993e2785e24Hall Liu * @param reason One of the reason codes defined in {@link Connection.RttModifyStatus}, 25057006aa82a69740df73415a456d31993e2785e24Hall Liu * with the exception of 25157006aa82a69740df73415a456d31993e2785e24Hall Liu * {@link Connection.RttModifyStatus#SESSION_MODIFY_REQUEST_SUCCESS}. 25257006aa82a69740df73415a456d31993e2785e24Hall Liu */ 25357006aa82a69740df73415a456d31993e2785e24Hall Liu public void onRttInitiationFailure(RemoteConnection connection, int reason) {} 25457006aa82a69740df73415a456d31993e2785e24Hall Liu 25557006aa82a69740df73415a456d31993e2785e24Hall Liu /** 25657006aa82a69740df73415a456d31993e2785e24Hall Liu * Indicates that an established RTT session was terminated remotely on this 25757006aa82a69740df73415a456d31993e2785e24Hall Liu * {@link RemoteConnection}. See {@link Connection#sendRttSessionRemotelyTerminated()} 25857006aa82a69740df73415a456d31993e2785e24Hall Liu * @hide 25957006aa82a69740df73415a456d31993e2785e24Hall Liu * @param connection The {@code RemoteConnection} invoking this method. 26057006aa82a69740df73415a456d31993e2785e24Hall Liu */ 26157006aa82a69740df73415a456d31993e2785e24Hall Liu public void onRttSessionRemotelyTerminated(RemoteConnection connection) {} 26257006aa82a69740df73415a456d31993e2785e24Hall Liu 26357006aa82a69740df73415a456d31993e2785e24Hall Liu /** 26457006aa82a69740df73415a456d31993e2785e24Hall Liu * Indicates that the remote user on this {@link RemoteConnection} has requested an upgrade 26557006aa82a69740df73415a456d31993e2785e24Hall Liu * to an RTT session. See {@link Connection#sendRemoteRttRequest()} 26657006aa82a69740df73415a456d31993e2785e24Hall Liu * @hide 26757006aa82a69740df73415a456d31993e2785e24Hall Liu * @param connection The {@code RemoteConnection} invoking this method. 26857006aa82a69740df73415a456d31993e2785e24Hall Liu */ 26957006aa82a69740df73415a456d31993e2785e24Hall Liu public void onRemoteRttRequest(RemoteConnection connection) {} 270bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton } 271bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton 272295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 273295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * {@link RemoteConnection.VideoProvider} associated with a {@link RemoteConnection}. Used to 274295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * receive video related events and control the video associated with a 275295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * {@link RemoteConnection}. 276295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 277295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider 278295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 279a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public static class VideoProvider { 280a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 281295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 282295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Callback class used by the {@link RemoteConnection.VideoProvider} to relay events from 283295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * the {@link Connection.VideoProvider}. 284295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 285a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn public abstract static class Callback { 286295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 287295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Reports a session modification request received from the 288295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * {@link Connection.VideoProvider} associated with a {@link RemoteConnection}. 289295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 290295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param videoProvider The {@link RemoteConnection.VideoProvider} invoking this method. 291295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param videoProfile The requested video call profile. 292295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see InCallService.VideoCall.Callback#onSessionModifyRequestReceived(VideoProfile) 293295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#receiveSessionModifyRequest(VideoProfile) 294295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 295a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn public void onSessionModifyRequestReceived( 296a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProvider videoProvider, 297a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProfile videoProfile) {} 298a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 299295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 300295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Reports a session modification response received from the 301295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * {@link Connection.VideoProvider} associated with a {@link RemoteConnection}. 302295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 303295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param videoProvider The {@link RemoteConnection.VideoProvider} invoking this method. 304295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param status Status of the session modify request. 305295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param requestedProfile The original request which was sent to the peer device. 306295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param responseProfile The actual profile changes made by the peer device. 307295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see InCallService.VideoCall.Callback#onSessionModifyResponseReceived(int, 308295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * VideoProfile, VideoProfile) 309295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#receiveSessionModifyResponse(int, VideoProfile, 310295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * VideoProfile) 311295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 312a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn public void onSessionModifyResponseReceived( 313a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProvider videoProvider, 314a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad int status, 315a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProfile requestedProfile, 316a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProfile responseProfile) {} 317a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 318295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 319295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Reports a call session event received from the {@link Connection.VideoProvider} 320295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * associated with a {@link RemoteConnection}. 321295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 322295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param videoProvider The {@link RemoteConnection.VideoProvider} invoking this method. 323295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param event The event. 324295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see InCallService.VideoCall.Callback#onCallSessionEvent(int) 325295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#handleCallSessionEvent(int) 326295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 327a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn public void onCallSessionEvent(VideoProvider videoProvider, int event) {} 328a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 329295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 330295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Reports a change in the peer video dimensions received from the 331295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * {@link Connection.VideoProvider} associated with a {@link RemoteConnection}. 332295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 333295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param videoProvider The {@link RemoteConnection.VideoProvider} invoking this method. 334295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param width The updated peer video width. 335295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param height The updated peer video height. 336295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see InCallService.VideoCall.Callback#onPeerDimensionsChanged(int, int) 337295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#changePeerDimensions(int, int) 338295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 339295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn public void onPeerDimensionsChanged(VideoProvider videoProvider, int width, 340295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn int height) {} 341295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn 342295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 343295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Reports a change in the data usage (in bytes) received from the 344295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * {@link Connection.VideoProvider} associated with a {@link RemoteConnection}. 345295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 346295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param videoProvider The {@link RemoteConnection.VideoProvider} invoking this method. 347295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param dataUsage The updated data usage (in bytes). 348295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see InCallService.VideoCall.Callback#onCallDataUsageChanged(long) 349295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#setCallDataUsage(long) 350295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 35107366813cdf3768dcd69a1f744023747564d654aRekha Kumar public void onCallDataUsageChanged(VideoProvider videoProvider, long dataUsage) {} 352a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 353295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 354295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Reports a change in the capabilities of the current camera, received from the 355295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * {@link Connection.VideoProvider} associated with a {@link RemoteConnection}. 356295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 357295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param videoProvider The {@link RemoteConnection.VideoProvider} invoking this method. 358295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param cameraCapabilities The changed camera capabilities. 359295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see InCallService.VideoCall.Callback#onCameraCapabilitiesChanged( 360295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * VideoProfile.CameraCapabilities) 361295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#changeCameraCapabilities( 362295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * VideoProfile.CameraCapabilities) 363295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 364a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void onCameraCapabilitiesChanged( 365a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProvider videoProvider, 366400470fab932fe3374149ab89386e460ea161002Yorke Lee VideoProfile.CameraCapabilities cameraCapabilities) {} 36707366813cdf3768dcd69a1f744023747564d654aRekha Kumar 368295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 369295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Reports a change in the video quality received from the 370295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * {@link Connection.VideoProvider} associated with a {@link RemoteConnection}. 371295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 372295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param videoProvider The {@link RemoteConnection.VideoProvider} invoking this method. 373295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param videoQuality The updated peer video quality. 374295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see InCallService.VideoCall.Callback#onVideoQualityChanged(int) 375295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#changeVideoQuality(int) 376295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 37707366813cdf3768dcd69a1f744023747564d654aRekha Kumar public void onVideoQualityChanged(VideoProvider videoProvider, int videoQuality) {} 378a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 379a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 380a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad private final IVideoCallback mVideoCallbackDelegate = new IVideoCallback() { 381a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad @Override 382a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void receiveSessionModifyRequest(VideoProfile videoProfile) { 383a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn for (Callback l : mCallbacks) { 384a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn l.onSessionModifyRequestReceived(VideoProvider.this, videoProfile); 385a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 386a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 387a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 388a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad @Override 389a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void receiveSessionModifyResponse(int status, VideoProfile requestedProfile, 390a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProfile responseProfile) { 391a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn for (Callback l : mCallbacks) { 392a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn l.onSessionModifyResponseReceived( 393a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad VideoProvider.this, 394a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad status, 395a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad requestedProfile, 396a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad responseProfile); 397a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 398a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 399a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 400a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad @Override 401a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void handleCallSessionEvent(int event) { 402a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn for (Callback l : mCallbacks) { 403a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn l.onCallSessionEvent(VideoProvider.this, event); 404a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 405a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 406a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 407a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad @Override 408a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void changePeerDimensions(int width, int height) { 409a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn for (Callback l : mCallbacks) { 410a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad l.onPeerDimensionsChanged(VideoProvider.this, width, height); 411a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 412a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 413a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 414a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad @Override 41507366813cdf3768dcd69a1f744023747564d654aRekha Kumar public void changeCallDataUsage(long dataUsage) { 416a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn for (Callback l : mCallbacks) { 417a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad l.onCallDataUsageChanged(VideoProvider.this, dataUsage); 418a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 419a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 420a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 421a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad @Override 422400470fab932fe3374149ab89386e460ea161002Yorke Lee public void changeCameraCapabilities( 423400470fab932fe3374149ab89386e460ea161002Yorke Lee VideoProfile.CameraCapabilities cameraCapabilities) { 424a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn for (Callback l : mCallbacks) { 425a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad l.onCameraCapabilitiesChanged(VideoProvider.this, cameraCapabilities); 426a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 427a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 428a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 429a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad @Override 43007366813cdf3768dcd69a1f744023747564d654aRekha Kumar public void changeVideoQuality(int videoQuality) { 431a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn for (Callback l : mCallbacks) { 43207366813cdf3768dcd69a1f744023747564d654aRekha Kumar l.onVideoQualityChanged(VideoProvider.this, videoQuality); 43307366813cdf3768dcd69a1f744023747564d654aRekha Kumar } 43407366813cdf3768dcd69a1f744023747564d654aRekha Kumar } 43507366813cdf3768dcd69a1f744023747564d654aRekha Kumar 43607366813cdf3768dcd69a1f744023747564d654aRekha Kumar @Override 437a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public IBinder asBinder() { 438a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad return null; 439a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 440a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad }; 441a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 442a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad private final VideoCallbackServant mVideoCallbackServant = 443a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad new VideoCallbackServant(mVideoCallbackDelegate); 444a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 445a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad private final IVideoProvider mVideoProviderBinder; 446a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 447b88b311463704af6254ac6a2b4f8c484eaaa7a77Tyler Gunn private final String mCallingPackage; 448b88b311463704af6254ac6a2b4f8c484eaaa7a77Tyler Gunn 449159f35c8e4a2d5902cbbeb8d3b9a80bddf247de3Tyler Gunn private final int mTargetSdkVersion; 450159f35c8e4a2d5902cbbeb8d3b9a80bddf247de3Tyler Gunn 451a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad /** 452a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * ConcurrentHashMap constructor params: 8 is initial table size, 0.9f is 453a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * load factor before resizing, 1 means we only expect a single thread to 454a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * access the map so make only a single shard 455a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad */ 456a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn private final Set<Callback> mCallbacks = Collections.newSetFromMap( 457a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn new ConcurrentHashMap<Callback, Boolean>(8, 0.9f, 1)); 458a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 459159f35c8e4a2d5902cbbeb8d3b9a80bddf247de3Tyler Gunn VideoProvider(IVideoProvider videoProviderBinder, String callingPackage, 460159f35c8e4a2d5902cbbeb8d3b9a80bddf247de3Tyler Gunn int targetSdkVersion) { 461159f35c8e4a2d5902cbbeb8d3b9a80bddf247de3Tyler Gunn 462a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder = videoProviderBinder; 463b88b311463704af6254ac6a2b4f8c484eaaa7a77Tyler Gunn mCallingPackage = callingPackage; 464159f35c8e4a2d5902cbbeb8d3b9a80bddf247de3Tyler Gunn mTargetSdkVersion = targetSdkVersion; 465a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 46675958420f2d294ceda517c2782b294002dc2969fTyler Gunn mVideoProviderBinder.addVideoCallback(mVideoCallbackServant.getStub().asBinder()); 467a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 468a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 469a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 470a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 471295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 472295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Registers a callback to receive commands and state changes for video calls. 473295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 474295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param l The video call callback. 475295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 476a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn public void registerCallback(Callback l) { 477a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn mCallbacks.add(l); 478a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 479a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 480295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 481295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Clears the video call callback set via {@link #registerCallback}. 482295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 483295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param l The video call callback to clear. 484295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 485a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn public void unregisterCallback(Callback l) { 486a2df92512b79e55a3b7c118eeb9ae60628f43c7aTyler Gunn mCallbacks.remove(l); 487a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 488a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 489295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 490295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Sets the camera to be used for the outgoing video for the 491295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * {@link RemoteConnection.VideoProvider}. 492295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 493295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param cameraId The id of the camera (use ids as reported by 494295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * {@link CameraManager#getCameraIdList()}). 495295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#onSetCamera(String) 496295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 497a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void setCamera(String cameraId) { 498a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 499159f35c8e4a2d5902cbbeb8d3b9a80bddf247de3Tyler Gunn mVideoProviderBinder.setCamera(cameraId, mCallingPackage, mTargetSdkVersion); 500a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 501a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 502a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 503a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 504295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 505295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Sets the surface to be used for displaying a preview of what the user's camera is 506295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * currently capturing for the {@link RemoteConnection.VideoProvider}. 507295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 508295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param surface The {@link Surface}. 509295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#onSetPreviewSurface(Surface) 510295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 511a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void setPreviewSurface(Surface surface) { 512a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 513a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.setPreviewSurface(surface); 514a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 515a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 516a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 517a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 518295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 519295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Sets the surface to be used for displaying the video received from the remote device for 520295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * the {@link RemoteConnection.VideoProvider}. 521295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 522295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param surface The {@link Surface}. 523295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#onSetDisplaySurface(Surface) 524295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 525a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void setDisplaySurface(Surface surface) { 526a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 527a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.setDisplaySurface(surface); 528a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 529a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 530a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 531a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 532295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 533295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Sets the device orientation, in degrees, for the {@link RemoteConnection.VideoProvider}. 534295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Assumes that a standard portrait orientation of the device is 0 degrees. 535295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 536295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param rotation The device orientation, in degrees. 537295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#onSetDeviceOrientation(int) 538295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 539a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void setDeviceOrientation(int rotation) { 540a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 541a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.setDeviceOrientation(rotation); 542a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 543a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 544a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 545a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 546295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 547295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Sets camera zoom ratio for the {@link RemoteConnection.VideoProvider}. 548295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 549295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param value The camera zoom ratio. 550295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#onSetZoom(float) 551295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 552a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void setZoom(float value) { 553a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 554a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.setZoom(value); 555a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 556a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 557a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 558a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 559295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 560295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Issues a request to modify the properties of the current video session for the 561295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * {@link RemoteConnection.VideoProvider}. 562295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 563295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param fromProfile The video profile prior to the request. 564295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param toProfile The video profile with the requested changes made. 565295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#onSendSessionModifyRequest(VideoProfile, VideoProfile) 566295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 5674538216a31d15b01e18c7b504e51031da0ce6e40Tyler Gunn public void sendSessionModifyRequest(VideoProfile fromProfile, VideoProfile toProfile) { 568a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 5694538216a31d15b01e18c7b504e51031da0ce6e40Tyler Gunn mVideoProviderBinder.sendSessionModifyRequest(fromProfile, toProfile); 570a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 571a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 572a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 573a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 574295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 575295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Provides a response to a request to change the current call video session 576295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * properties for the {@link RemoteConnection.VideoProvider}. 577295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 578295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @param responseProfile The response call video properties. 579295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#onSendSessionModifyResponse(VideoProfile) 580295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 581a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void sendSessionModifyResponse(VideoProfile responseProfile) { 582a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 583a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.sendSessionModifyResponse(responseProfile); 584a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 585a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 586a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 587a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 588295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 589295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Issues a request to retrieve the capabilities of the current camera for the 590295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * {@link RemoteConnection.VideoProvider}. 591295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 592295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#onRequestCameraCapabilities() 593295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 594a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void requestCameraCapabilities() { 595a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 596a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.requestCameraCapabilities(); 597a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 598a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 599a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 600a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 601295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 602295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Issues a request to retrieve the data usage (in bytes) of the video portion of the 603295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * {@link RemoteConnection} for the {@link RemoteConnection.VideoProvider}. 604295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 605295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#onRequestConnectionDataUsage() 606295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 607a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public void requestCallDataUsage() { 608a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 609a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.requestCallDataUsage(); 610a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 611a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 612a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 613a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 614295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn /** 615295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * Sets the {@link Uri} of an image to be displayed to the peer device when the video signal 616295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * is paused, for the {@link RemoteConnection.VideoProvider}. 617295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * 618295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn * @see Connection.VideoProvider#onSetPauseImage(Uri) 619295f5d7777ba63836bf75cb4de15bdaae06dfc1fTyler Gunn */ 62032f24731604fd81289a39619bbc925b65184b505Yorke Lee public void setPauseImage(Uri uri) { 621a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad try { 622a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProviderBinder.setPauseImage(uri); 623a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } catch (RemoteException e) { 624a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 625a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 626a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 627a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 628bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton private IConnectionService mConnectionService; 62952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon private final String mConnectionId; 630229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner /** 631229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner * ConcurrentHashMap constructor params: 8 is initial table size, 0.9f is 632229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner * load factor before resizing, 1 means we only expect a single thread to 633229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner * access the map so make only a single shard 634229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner */ 635011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee private final Set<CallbackRecord> mCallbackRecords = Collections.newSetFromMap( 636011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee new ConcurrentHashMap<CallbackRecord, Boolean>(8, 0.9f, 1)); 637b8e85c74e5910a461078704048d67f82b216508cIhab Awad private final List<RemoteConnection> mConferenceableConnections = new ArrayList<>(); 638b8e85c74e5910a461078704048d67f82b216508cIhab Awad private final List<RemoteConnection> mUnmodifiableconferenceableConnections = 639b8e85c74e5910a461078704048d67f82b216508cIhab Awad Collections.unmodifiableList(mConferenceableConnections); 64052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 641b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad private int mState = Connection.STATE_NEW; 6427f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee private DisconnectCause mDisconnectCause; 643100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee private boolean mRingbackRequested; 64452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon private boolean mConnected; 6455c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad private int mConnectionCapabilities; 646720c664401081ca00e56c7eef12641ae792da530Tyler Gunn private int mConnectionProperties; 647aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn private int mVideoState; 648a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad private VideoProvider mVideoProvider; 649100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee private boolean mIsVoipAudioMode; 650e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal private StatusHints mStatusHints; 651100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee private Uri mAddress; 652100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee private int mAddressPresentation; 653612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal private String mCallerDisplayName; 654612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal private int mCallerDisplayNamePresentation; 655b8e85c74e5910a461078704048d67f82b216508cIhab Awad private RemoteConference mConference; 6566b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon private Bundle mExtras; 65752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 65852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon /** 65952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * @hide 66052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 661b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad RemoteConnection( 662b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad String id, 663b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad IConnectionService connectionService, 664b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad ConnectionRequest request) { 665b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad mConnectionId = id; 6662a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal mConnectionService = connectionService; 66752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon mConnected = true; 668b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad mState = Connection.STATE_INITIALIZING; 669bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton } 670bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton 671bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton /** 6724a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn * @hide 6734a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn */ 6744a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn RemoteConnection(String callId, IConnectionService connectionService, 675159f35c8e4a2d5902cbbeb8d3b9a80bddf247de3Tyler Gunn ParcelableConnection connection, String callingPackage, int targetSdkVersion) { 6764a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mConnectionId = callId; 6774a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mConnectionService = connectionService; 6784a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mConnected = true; 6794a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mState = connection.getState(); 6804a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mDisconnectCause = connection.getDisconnectCause(); 6814a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mRingbackRequested = connection.isRingbackRequested(); 6825c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad mConnectionCapabilities = connection.getConnectionCapabilities(); 683720c664401081ca00e56c7eef12641ae792da530Tyler Gunn mConnectionProperties = connection.getConnectionProperties(); 6844a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mVideoState = connection.getVideoState(); 6859c2c583ad7c01d756462e437e5c33b3b75f90e96Tyler Gunn IVideoProvider videoProvider = connection.getVideoProvider(); 6869c2c583ad7c01d756462e437e5c33b3b75f90e96Tyler Gunn if (videoProvider != null) { 687159f35c8e4a2d5902cbbeb8d3b9a80bddf247de3Tyler Gunn mVideoProvider = new RemoteConnection.VideoProvider(videoProvider, callingPackage, 688159f35c8e4a2d5902cbbeb8d3b9a80bddf247de3Tyler Gunn targetSdkVersion); 6899c2c583ad7c01d756462e437e5c33b3b75f90e96Tyler Gunn } else { 6909c2c583ad7c01d756462e437e5c33b3b75f90e96Tyler Gunn mVideoProvider = null; 6919c2c583ad7c01d756462e437e5c33b3b75f90e96Tyler Gunn } 6924a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mIsVoipAudioMode = connection.getIsVoipAudioMode(); 6934a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mStatusHints = connection.getStatusHints(); 6944a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mAddress = connection.getHandle(); 6954a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mAddressPresentation = connection.getHandlePresentation(); 6964a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mCallerDisplayName = connection.getCallerDisplayName(); 6974a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mCallerDisplayNamePresentation = connection.getCallerDisplayNamePresentation(); 6984a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mConference = null; 6992282bb97e78ea87ff322ecf12563ab0120af2b28Tyler Gunn putExtras(connection.getExtras()); 7002282bb97e78ea87ff322ecf12563ab0120af2b28Tyler Gunn 7012282bb97e78ea87ff322ecf12563ab0120af2b28Tyler Gunn // Stash the original connection ID as it exists in the source ConnectionService. 7022282bb97e78ea87ff322ecf12563ab0120af2b28Tyler Gunn // Telecom will use this to avoid adding duplicates later. 7032282bb97e78ea87ff322ecf12563ab0120af2b28Tyler Gunn // See comments on Connection.EXTRA_ORIGINAL_CONNECTION_ID for more information. 7042282bb97e78ea87ff322ecf12563ab0120af2b28Tyler Gunn Bundle newExtras = new Bundle(); 7052282bb97e78ea87ff322ecf12563ab0120af2b28Tyler Gunn newExtras.putString(Connection.EXTRA_ORIGINAL_CONNECTION_ID, callId); 7062282bb97e78ea87ff322ecf12563ab0120af2b28Tyler Gunn putExtras(newExtras); 7074a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn } 7084a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn 7094a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn /** 710bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * Create a RemoteConnection which is used for failed connections. Note that using it for any 711bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * "real" purpose will almost certainly fail. Callers should note the failure and act 712bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * accordingly (moving on to another RemoteConnection, for example) 713bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * 7147f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * @param disconnectCause The reason for the failed connection. 7157f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * @hide 716bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton */ 7177f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee RemoteConnection(DisconnectCause disconnectCause) { 7184a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn mConnectionId = "NULL"; 719bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton mConnected = false; 7206107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad mState = Connection.STATE_DISCONNECTED; 7217f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee mDisconnectCause = disconnectCause; 72252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 72352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 7245d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 725100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * Adds a callback to this {@code RemoteConnection}. 7265d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 727100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * @param callback A {@code Callback}. 7285d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 729100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public void registerCallback(Callback callback) { 730011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee registerCallback(callback, new Handler()); 731011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 732011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee 733011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee /** 734011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee * Adds a callback to this {@code RemoteConnection}. 735011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee * 736011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee * @param callback A {@code Callback}. 737011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee * @param handler A {@code Handler} which command and status changes will be delivered to. 738011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee */ 739011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void registerCallback(Callback callback, Handler handler) { 740011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee unregisterCallback(callback); 741011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee if (callback != null && handler != null) { 742011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee mCallbackRecords.add(new CallbackRecord(callback, handler)); 743011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 74452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 74552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 7465d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 747100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * Removes a callback from this {@code RemoteConnection}. 7485d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 749100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * @param callback A {@code Callback}. 7505d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 751100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public void unregisterCallback(Callback callback) { 752100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee if (callback != null) { 753011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 754011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee if (record.getCallback() == callback) { 755011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee mCallbackRecords.remove(record); 756011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee break; 757011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 758011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 759229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner } 76052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 76152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 7625d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 7635d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Obtains the state of this {@code RemoteConnection}. 7645d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 7655d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @return A state value, chosen from the {@code STATE_*} constants. 7665d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 767ade3f25a488fc3c1243db8c88554771e571beeb1Sailesh Nepal public int getState() { 768ade3f25a488fc3c1243db8c88554771e571beeb1Sailesh Nepal return mState; 769ade3f25a488fc3c1243db8c88554771e571beeb1Sailesh Nepal } 770ade3f25a488fc3c1243db8c88554771e571beeb1Sailesh Nepal 7715d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 7725c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains the reason why this {@code RemoteConnection} may have been disconnected. 7735c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 774b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * @return For a {@link Connection#STATE_DISCONNECTED} {@code RemoteConnection}, the 7755c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * disconnect cause expressed as a code chosen from among those declared in 7765c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * {@link DisconnectCause}. 7775d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 7787f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee public DisconnectCause getDisconnectCause() { 7797f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee return mDisconnectCause; 78052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 78152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 7825d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 7835c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains the capabilities of this {@code RemoteConnection}. 7845c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 7855d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @return A bitmask of the capabilities of the {@code RemoteConnection}, as defined in 7865c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * the {@code CAPABILITY_*} constants in class {@link Connection}. 7875d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 7885c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad public int getConnectionCapabilities() { 7895c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad return mConnectionCapabilities; 7901a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal } 7911a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal 7925d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 793720c664401081ca00e56c7eef12641ae792da530Tyler Gunn * Obtains the properties of this {@code RemoteConnection}. 794720c664401081ca00e56c7eef12641ae792da530Tyler Gunn * 795720c664401081ca00e56c7eef12641ae792da530Tyler Gunn * @return A bitmask of the properties of the {@code RemoteConnection}, as defined in the 796720c664401081ca00e56c7eef12641ae792da530Tyler Gunn * {@code PROPERTY_*} constants in class {@link Connection}. 797720c664401081ca00e56c7eef12641ae792da530Tyler Gunn */ 798720c664401081ca00e56c7eef12641ae792da530Tyler Gunn public int getConnectionProperties() { 799720c664401081ca00e56c7eef12641ae792da530Tyler Gunn return mConnectionProperties; 800720c664401081ca00e56c7eef12641ae792da530Tyler Gunn } 801720c664401081ca00e56c7eef12641ae792da530Tyler Gunn 802720c664401081ca00e56c7eef12641ae792da530Tyler Gunn /** 8035c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Determines if the audio mode of this {@code RemoteConnection} is VOIP. 8045c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 8055d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @return {@code true} if the {@code RemoteConnection}'s current audio mode is VOIP. 8065d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 807100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public boolean isVoipAudioMode() { 808100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee return mIsVoipAudioMode; 80933aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal } 81033aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal 8115d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 8125c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains status hints pertaining to this {@code RemoteConnection}. 8135c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 814b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * @return The current {@link StatusHints} of this {@code RemoteConnection}, 8155c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * or {@code null} if none have been set. 8165d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 817e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public StatusHints getStatusHints() { 818e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return mStatusHints; 819e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 820e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 8215d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 8225c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains the address of this {@code RemoteConnection}. 8235c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 8245c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * @return The address (e.g., phone number) to which the {@code RemoteConnection} 8255c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * is currently connected. 8265d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 827100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public Uri getAddress() { 828100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee return mAddress; 829612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 830612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 8315d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 8325c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains the presentation requirements for the address of this {@code RemoteConnection}. 8335c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 8345c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * @return The presentation requirements for the address. See 8355c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * {@link TelecomManager} for valid values. 8365d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 837100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public int getAddressPresentation() { 838100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee return mAddressPresentation; 839612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 840612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 8415d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 8425c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains the display name for this {@code RemoteConnection}'s caller. 8435c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 8445d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @return The display name for the caller. 8455d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 846100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public CharSequence getCallerDisplayName() { 847612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal return mCallerDisplayName; 848612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 849612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 8505d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 8515c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains the presentation requirements for this {@code RemoteConnection}'s 8525c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * caller's display name. 8535c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 8545d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @return The presentation requirements for the caller display name. See 8555c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * {@link TelecomManager} for valid values. 8565d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 857612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal public int getCallerDisplayNamePresentation() { 858612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal return mCallerDisplayNamePresentation; 859612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 860612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 8615d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 8625c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Obtains the video state of this {@code RemoteConnection}. 8635c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 86487b73f370e2b8a76b0540580f43edba6ec21c6cfTyler Gunn * @return The video state of the {@code RemoteConnection}. See {@link VideoProfile}. 8655d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 866aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn public int getVideoState() { 867aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn return mVideoState; 868aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn } 869aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn 8705d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 87107366813cdf3768dcd69a1f744023747564d654aRekha Kumar * Obtains the video provider of this {@code RemoteConnection}. 872a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * @return The video provider associated with this {@code RemoteConnection}. 873a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad */ 874a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad public final VideoProvider getVideoProvider() { 875a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad return mVideoProvider; 876a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 877a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 878a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad /** 8796b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon * Obtain the extras associated with this {@code RemoteConnection}. 8806b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon * 8816b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon * @return The extras for this connection. 8826b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon */ 8836b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon public final Bundle getExtras() { 8846b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon return mExtras; 8856b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon } 8866b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon 8876b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon /** 8885c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * Determines whether this {@code RemoteConnection} is requesting ringback. 8895c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * 8905d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @return Whether the {@code RemoteConnection} is requesting that the framework play a 8915c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad * ringback tone on its behalf. 8925d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 893100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee public boolean isRingbackRequested() { 89415d63c718f6e7bcec6c1fd47d2d06fd59b9c1aefSantos Cordon return mRingbackRequested; 8955d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad } 8965d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad 8975d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 8985d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Instructs this {@code RemoteConnection} to abort. 8995d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 900091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal public void abort() { 901091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal try { 902091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal if (mConnected) { 903b32d4f8b5cd5b9c2415e291896b83267e1b4d5feBrad Ebinger mConnectionService.abort(mConnectionId, null /*Session.Info*/); 904091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } 905091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } catch (RemoteException ignored) { 906091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } 907091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } 908091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal 9095d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 910b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * Instructs this {@link Connection#STATE_RINGING} {@code RemoteConnection} to answer. 911be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn */ 912be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn public void answer() { 913be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn try { 914be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn if (mConnected) { 915b32d4f8b5cd5b9c2415e291896b83267e1b4d5feBrad Ebinger mConnectionService.answer(mConnectionId, null /*Session.Info*/); 916be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn } 917be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn } catch (RemoteException ignored) { 918be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn } 919be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn } 920be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn 921be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn /** 922be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn * Instructs this {@link Connection#STATE_RINGING} {@code RemoteConnection} to answer. 9235d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param videoState The video state in which to answer the call. 924be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn * @hide 9255d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 9268da4c3c11faf066b2b04ba853f03be6f1c4af5d8Andrew Lee public void answer(int videoState) { 92752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 92852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 929b32d4f8b5cd5b9c2415e291896b83267e1b4d5feBrad Ebinger mConnectionService.answerVideo(mConnectionId, videoState, null /*Session.Info*/); 93052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 93152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 93252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 93352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 93452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 9355d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 936b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * Instructs this {@link Connection#STATE_RINGING} {@code RemoteConnection} to reject. 9375d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 93852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon public void reject() { 93952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 94052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 941b32d4f8b5cd5b9c2415e291896b83267e1b4d5feBrad Ebinger mConnectionService.reject(mConnectionId, null /*Session.Info*/); 94252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 94352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 94452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 94552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 94652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 9475d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 9485d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Instructs this {@code RemoteConnection} to go on hold. 9495d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 95052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon public void hold() { 95152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 95252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 953b32d4f8b5cd5b9c2415e291896b83267e1b4d5feBrad Ebinger mConnectionService.hold(mConnectionId, null /*Session.Info*/); 95452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 95552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 95652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 95752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 95852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 9595d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 960b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * Instructs this {@link Connection#STATE_HOLDING} call to release from hold. 9615d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 96252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon public void unhold() { 96352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 96452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 965b32d4f8b5cd5b9c2415e291896b83267e1b4d5feBrad Ebinger mConnectionService.unhold(mConnectionId, null /*Session.Info*/); 96652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 96752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 96852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 96952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 97052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 9715d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 9725d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Instructs this {@code RemoteConnection} to disconnect. 9735d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 97452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon public void disconnect() { 97552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 97652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 977b32d4f8b5cd5b9c2415e291896b83267e1b4d5feBrad Ebinger mConnectionService.disconnect(mConnectionId, null /*Session.Info*/); 97852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 97952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 98052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 98152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 98252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 9835d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 9845d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Instructs this {@code RemoteConnection} to play a dual-tone multi-frequency signaling 9855d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * (DTMF) tone. 9865d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 9875d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Any other currently playing DTMF tone in the specified call is immediately stopped. 9885d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 9895d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param digit A character representing the DTMF digit for which to play the tone. This 9905d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * value must be one of {@code '0'} through {@code '9'}, {@code '*'} or {@code '#'}. 9915d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 9925d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad public void playDtmfTone(char digit) { 99352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 99452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 995b32d4f8b5cd5b9c2415e291896b83267e1b4d5feBrad Ebinger mConnectionService.playDtmfTone(mConnectionId, digit, null /*Session.Info*/); 99652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 99752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 99852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 99952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 100052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 10015d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 10025d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Instructs this {@code RemoteConnection} to stop any dual-tone multi-frequency signaling 10035d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * (DTMF) tone currently playing. 10045d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 10055d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * DTMF tones are played by calling {@link #playDtmfTone(char)}. If no DTMF tone is 10065d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * currently playing, this method will do nothing. 10075d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 10085d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad public void stopDtmfTone() { 100952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 101052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 1011b32d4f8b5cd5b9c2415e291896b83267e1b4d5feBrad Ebinger mConnectionService.stopDtmfTone(mConnectionId, null /*Session.Info*/); 101252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 101352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 101452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 101552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 101652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 10175d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 10185d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Instructs this {@code RemoteConnection} to continue playing a post-dial DTMF string. 10195d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 10205d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * A post-dial DTMF string is a string of digits following the first instance of either 1021ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn * {@link TelecomManager#DTMF_CHARACTER_WAIT} or {@link TelecomManager#DTMF_CHARACTER_PAUSE}. 10225d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * These digits are immediately sent as DTMF tones to the recipient as soon as the 10235d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * connection is made. 10245d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 1025ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn * If the DTMF string contains a {@link TelecomManager#DTMF_CHARACTER_PAUSE} symbol, this 10265d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * {@code RemoteConnection} will temporarily pause playing the tones for a pre-defined period 10275d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * of time. 10285d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 1029ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn * If the DTMF string contains a {@link TelecomManager#DTMF_CHARACTER_WAIT} symbol, this 103027d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen * {@code RemoteConnection} will pause playing the tones and notify callbacks via 1031100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee * {@link Callback#onPostDialWait(RemoteConnection, String)}. At this point, the in-call app 10325d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * should display to the user an indication of this state and an affordance to continue 10335d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * the postdial sequence. When the user decides to continue the postdial sequence, the in-call 10345d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * app should invoke the {@link #postDialContinue(boolean)} method. 10355d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 10365d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param proceed Whether or not to continue with the post-dial sequence. 10375d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 103852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon public void postDialContinue(boolean proceed) { 103952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 104052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mConnected) { 1041b32d4f8b5cd5b9c2415e291896b83267e1b4d5feBrad Ebinger mConnectionService.onPostDialContinue(mConnectionId, proceed, 1042b32d4f8b5cd5b9c2415e291896b83267e1b4d5feBrad Ebinger null /*Session.Info*/); 104352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 104452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 104552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 104652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 104752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 10485d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad /** 1049876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn * Instructs this {@link RemoteConnection} to pull itself to the local device. 1050876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn * <p> 1051876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn * See {@link Call#pullExternalCall()} for more information. 1052876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn */ 1053876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn public void pullExternalCall() { 1054876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn try { 1055876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn if (mConnected) { 1056b32d4f8b5cd5b9c2415e291896b83267e1b4d5feBrad Ebinger mConnectionService.pullExternalCall(mConnectionId, null /*Session.Info*/); 1057876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn } 1058876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn } catch (RemoteException ignored) { 1059876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn } 1060876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn } 1061876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn 1062876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn /** 10635d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * Set the audio state of this {@code RemoteConnection}. 10645d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * 10655d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad * @param state The audio state of this {@code RemoteConnection}. 10664af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee * @hide 10674af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee * @deprecated Use {@link #setCallAudioState(CallAudioState) instead. 10685d0410fa7c2dead7906780551ba4aa0305021cefIhab Awad */ 10694af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee @SystemApi 10704af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee @Deprecated 1071b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad public void setAudioState(AudioState state) { 10724af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee setCallAudioState(new CallAudioState(state)); 10734af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee } 10744af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee 10754af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee /** 10764af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee * Set the audio state of this {@code RemoteConnection}. 10774af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee * 10784af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee * @param state The audio state of this {@code RemoteConnection}. 10794af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee */ 10804af5935c71f1e31ef1aec27661c4ef60545a0924Yorke Lee public void setCallAudioState(CallAudioState state) { 1081091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal try { 1082091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal if (mConnected) { 1083b32d4f8b5cd5b9c2415e291896b83267e1b4d5feBrad Ebinger mConnectionService.onCallAudioStateChanged(mConnectionId, state, 1084b32d4f8b5cd5b9c2415e291896b83267e1b4d5feBrad Ebinger null /*Session.Info*/); 1085091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } 1086091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } catch (RemoteException ignored) { 1087091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } 1088091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal } 1089091768c3021d740b7d66846d36405c4d4c76cc56Sailesh Nepal 109052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon /** 109157006aa82a69740df73415a456d31993e2785e24Hall Liu * Notifies this {@link RemoteConnection} that the user has requested an RTT session. 109257006aa82a69740df73415a456d31993e2785e24Hall Liu * @param rttTextStream The object that should be used to send text to or receive text from 109357006aa82a69740df73415a456d31993e2785e24Hall Liu * the in-call app. 109457006aa82a69740df73415a456d31993e2785e24Hall Liu * @hide 109557006aa82a69740df73415a456d31993e2785e24Hall Liu */ 109657006aa82a69740df73415a456d31993e2785e24Hall Liu public void startRtt(@NonNull Connection.RttTextStream rttTextStream) { 109757006aa82a69740df73415a456d31993e2785e24Hall Liu try { 109857006aa82a69740df73415a456d31993e2785e24Hall Liu if (mConnected) { 109957006aa82a69740df73415a456d31993e2785e24Hall Liu mConnectionService.startRtt(mConnectionId, rttTextStream.getFdFromInCall(), 110057006aa82a69740df73415a456d31993e2785e24Hall Liu rttTextStream.getFdToInCall(), null /*Session.Info*/); 110157006aa82a69740df73415a456d31993e2785e24Hall Liu } 110257006aa82a69740df73415a456d31993e2785e24Hall Liu } catch (RemoteException ignored) { 110357006aa82a69740df73415a456d31993e2785e24Hall Liu } 110457006aa82a69740df73415a456d31993e2785e24Hall Liu } 110557006aa82a69740df73415a456d31993e2785e24Hall Liu 110657006aa82a69740df73415a456d31993e2785e24Hall Liu /** 110757006aa82a69740df73415a456d31993e2785e24Hall Liu * Notifies this {@link RemoteConnection} that it should terminate any existing RTT 110857006aa82a69740df73415a456d31993e2785e24Hall Liu * session. No response to Telecom is needed for this method. 110957006aa82a69740df73415a456d31993e2785e24Hall Liu * @hide 111057006aa82a69740df73415a456d31993e2785e24Hall Liu */ 111157006aa82a69740df73415a456d31993e2785e24Hall Liu public void stopRtt() { 111257006aa82a69740df73415a456d31993e2785e24Hall Liu try { 111357006aa82a69740df73415a456d31993e2785e24Hall Liu if (mConnected) { 111457006aa82a69740df73415a456d31993e2785e24Hall Liu mConnectionService.stopRtt(mConnectionId, null /*Session.Info*/); 111557006aa82a69740df73415a456d31993e2785e24Hall Liu } 111657006aa82a69740df73415a456d31993e2785e24Hall Liu } catch (RemoteException ignored) { 111757006aa82a69740df73415a456d31993e2785e24Hall Liu } 111857006aa82a69740df73415a456d31993e2785e24Hall Liu } 111957006aa82a69740df73415a456d31993e2785e24Hall Liu 112057006aa82a69740df73415a456d31993e2785e24Hall Liu /** 112157006aa82a69740df73415a456d31993e2785e24Hall Liu * Notifies this {@link RemoteConnection} of a response to a previous remotely-initiated RTT 112257006aa82a69740df73415a456d31993e2785e24Hall Liu * upgrade request sent via {@link Connection#sendRemoteRttRequest}. 112357006aa82a69740df73415a456d31993e2785e24Hall Liu * Acceptance of the request is indicated by the supplied {@link RttTextStream} being non-null, 112457006aa82a69740df73415a456d31993e2785e24Hall Liu * and rejection is indicated by {@code rttTextStream} being {@code null} 112557006aa82a69740df73415a456d31993e2785e24Hall Liu * @hide 112657006aa82a69740df73415a456d31993e2785e24Hall Liu * @param rttTextStream The object that should be used to send text to or receive text from 112757006aa82a69740df73415a456d31993e2785e24Hall Liu * the in-call app. 112857006aa82a69740df73415a456d31993e2785e24Hall Liu */ 112957006aa82a69740df73415a456d31993e2785e24Hall Liu public void sendRttUpgradeResponse(@Nullable Connection.RttTextStream rttTextStream) { 113057006aa82a69740df73415a456d31993e2785e24Hall Liu try { 113157006aa82a69740df73415a456d31993e2785e24Hall Liu if (mConnected) { 113257006aa82a69740df73415a456d31993e2785e24Hall Liu if (rttTextStream == null) { 113357006aa82a69740df73415a456d31993e2785e24Hall Liu mConnectionService.respondToRttUpgradeRequest(mConnectionId, 113457006aa82a69740df73415a456d31993e2785e24Hall Liu null, null, null /*Session.Info*/); 113557006aa82a69740df73415a456d31993e2785e24Hall Liu } else { 113657006aa82a69740df73415a456d31993e2785e24Hall Liu mConnectionService.respondToRttUpgradeRequest(mConnectionId, 113757006aa82a69740df73415a456d31993e2785e24Hall Liu rttTextStream.getFdFromInCall(), rttTextStream.getFdToInCall(), 113857006aa82a69740df73415a456d31993e2785e24Hall Liu null /*Session.Info*/); 113957006aa82a69740df73415a456d31993e2785e24Hall Liu } 114057006aa82a69740df73415a456d31993e2785e24Hall Liu } 114157006aa82a69740df73415a456d31993e2785e24Hall Liu } catch (RemoteException ignored) { 114257006aa82a69740df73415a456d31993e2785e24Hall Liu } 114357006aa82a69740df73415a456d31993e2785e24Hall Liu } 114457006aa82a69740df73415a456d31993e2785e24Hall Liu 114557006aa82a69740df73415a456d31993e2785e24Hall Liu /** 1146b8e85c74e5910a461078704048d67f82b216508cIhab Awad * Obtain the {@code RemoteConnection}s with which this {@code RemoteConnection} may be 1147b8e85c74e5910a461078704048d67f82b216508cIhab Awad * successfully asked to create a conference with. 1148b8e85c74e5910a461078704048d67f82b216508cIhab Awad * 1149b8e85c74e5910a461078704048d67f82b216508cIhab Awad * @return The {@code RemoteConnection}s with which this {@code RemoteConnection} may be 1150b8e85c74e5910a461078704048d67f82b216508cIhab Awad * merged into a {@link RemoteConference}. 1151b8e85c74e5910a461078704048d67f82b216508cIhab Awad */ 1152b8e85c74e5910a461078704048d67f82b216508cIhab Awad public List<RemoteConnection> getConferenceableConnections() { 1153b8e85c74e5910a461078704048d67f82b216508cIhab Awad return mUnmodifiableconferenceableConnections; 1154b8e85c74e5910a461078704048d67f82b216508cIhab Awad } 1155b8e85c74e5910a461078704048d67f82b216508cIhab Awad 1156b8e85c74e5910a461078704048d67f82b216508cIhab Awad /** 1157b8e85c74e5910a461078704048d67f82b216508cIhab Awad * Obtain the {@code RemoteConference} that this {@code RemoteConnection} may be a part 1158b8e85c74e5910a461078704048d67f82b216508cIhab Awad * of, or {@code null} if there is no such {@code RemoteConference}. 1159b8e85c74e5910a461078704048d67f82b216508cIhab Awad * 1160b8e85c74e5910a461078704048d67f82b216508cIhab Awad * @return A {@code RemoteConference} or {@code null}; 1161b8e85c74e5910a461078704048d67f82b216508cIhab Awad */ 1162b8e85c74e5910a461078704048d67f82b216508cIhab Awad public RemoteConference getConference() { 1163b8e85c74e5910a461078704048d67f82b216508cIhab Awad return mConference; 1164b8e85c74e5910a461078704048d67f82b216508cIhab Awad } 1165b8e85c74e5910a461078704048d67f82b216508cIhab Awad 1166b8e85c74e5910a461078704048d67f82b216508cIhab Awad /** {@hide} */ 1167b8e85c74e5910a461078704048d67f82b216508cIhab Awad String getId() { 1168b8e85c74e5910a461078704048d67f82b216508cIhab Awad return mConnectionId; 1169b8e85c74e5910a461078704048d67f82b216508cIhab Awad } 1170b8e85c74e5910a461078704048d67f82b216508cIhab Awad 1171b8e85c74e5910a461078704048d67f82b216508cIhab Awad /** {@hide} */ 1172b8e85c74e5910a461078704048d67f82b216508cIhab Awad IConnectionService getConnectionService() { 1173b8e85c74e5910a461078704048d67f82b216508cIhab Awad return mConnectionService; 1174b8e85c74e5910a461078704048d67f82b216508cIhab Awad } 1175b8e85c74e5910a461078704048d67f82b216508cIhab Awad 1176b8e85c74e5910a461078704048d67f82b216508cIhab Awad /** 117752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * @hide 117852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 1179011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setState(final int state) { 118052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mState != state) { 118152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon mState = state; 1182011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record: mCallbackRecords) { 1183011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1184011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1185011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1186011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1187011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1188011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onStateChanged(connection, state); 1189011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1190011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 119152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 119252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 119352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 119452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 119552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon /** 119652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * @hide 119752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 1198011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setDisconnected(final DisconnectCause disconnectCause) { 1199b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad if (mState != Connection.STATE_DISCONNECTED) { 1200b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad mState = Connection.STATE_DISCONNECTED; 12017f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee mDisconnectCause = disconnectCause; 120252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 1203011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1204011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1205011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1206011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1207011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1208011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1209011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onDisconnected(connection, disconnectCause); 1210011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1211011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 121252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 121352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 121452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 121552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 121652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon /** 121752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * @hide 121852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 1219011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setRingbackRequested(final boolean ringback) { 1220100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee if (mRingbackRequested != ringback) { 1221100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee mRingbackRequested = ringback; 1222011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1223011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1224011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1225011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1226011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1227011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1228011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onRingbackRequested(connection, ringback); 1229011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1230011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 123152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 123252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 123352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 123452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 123552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon /** 123652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * @hide 123752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 1238011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setConnectionCapabilities(final int connectionCapabilities) { 12395c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad mConnectionCapabilities = connectionCapabilities; 1240011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1241011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1242011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1243011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1244011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1245011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1246011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onConnectionCapabilitiesChanged(connection, connectionCapabilities); 1247011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1248011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 12491a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal } 12501a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal } 12511a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal 12521a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal /** 12531a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal * @hide 12541a7061ba950538c93d92c0448752a212039cc06aSailesh Nepal */ 1255720c664401081ca00e56c7eef12641ae792da530Tyler Gunn void setConnectionProperties(final int connectionProperties) { 1256720c664401081ca00e56c7eef12641ae792da530Tyler Gunn mConnectionProperties = connectionProperties; 1257720c664401081ca00e56c7eef12641ae792da530Tyler Gunn for (CallbackRecord record : mCallbackRecords) { 1258720c664401081ca00e56c7eef12641ae792da530Tyler Gunn final RemoteConnection connection = this; 1259720c664401081ca00e56c7eef12641ae792da530Tyler Gunn final Callback callback = record.getCallback(); 1260720c664401081ca00e56c7eef12641ae792da530Tyler Gunn record.getHandler().post(new Runnable() { 1261720c664401081ca00e56c7eef12641ae792da530Tyler Gunn @Override 1262720c664401081ca00e56c7eef12641ae792da530Tyler Gunn public void run() { 1263720c664401081ca00e56c7eef12641ae792da530Tyler Gunn callback.onConnectionPropertiesChanged(connection, connectionProperties); 1264720c664401081ca00e56c7eef12641ae792da530Tyler Gunn } 1265720c664401081ca00e56c7eef12641ae792da530Tyler Gunn }); 1266720c664401081ca00e56c7eef12641ae792da530Tyler Gunn } 1267720c664401081ca00e56c7eef12641ae792da530Tyler Gunn } 1268720c664401081ca00e56c7eef12641ae792da530Tyler Gunn 1269720c664401081ca00e56c7eef12641ae792da530Tyler Gunn /** 1270720c664401081ca00e56c7eef12641ae792da530Tyler Gunn * @hide 1271720c664401081ca00e56c7eef12641ae792da530Tyler Gunn */ 127252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon void setDestroyed() { 1273011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee if (!mCallbackRecords.isEmpty()) { 1274100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee // Make sure that the callbacks are notified that the call is destroyed first. 1275b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad if (mState != Connection.STATE_DISCONNECTED) { 12767f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee setDisconnected( 12777f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee new DisconnectCause(DisconnectCause.ERROR, "Connection destroyed.")); 127852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 127952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 1280011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1281011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1282011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1283011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1284011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1285011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1286011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onDestroyed(connection); 1287011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1288011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 128952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 1290011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee mCallbackRecords.clear(); 129152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 129252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon mConnected = false; 129352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 129452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 129552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 129652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon /** 129752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * @hide 129852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 1299011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setPostDialWait(final String remainingDigits) { 1300011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1301011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1302011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1303011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1304011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1305011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1306011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onPostDialWait(connection, remainingDigits); 1307011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1308011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 130952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 1310aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn } 1311aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn 1312aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn /** 1313aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn * @hide 1314aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn */ 1315011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void onPostDialChar(final char nextChar) { 1316011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1317011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1318011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1319011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1320011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1321011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 132240451b3977f51bd0726b645f73167869f71d4e4cSailesh Nepal callback.onPostDialChar(connection, nextChar); 1323011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1324011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 132527d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen } 132627d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen } 132727d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen 132827d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen /** 132927d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen * @hide 133027d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen */ 1331011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setVideoState(final int videoState) { 1332aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn mVideoState = videoState; 1333011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1334011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1335011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1336011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1337011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1338011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1339011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onVideoStateChanged(connection, videoState); 1340011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1341011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 1342aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn } 134352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 13442a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal 1345a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad /** 1346a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad * @hide 1347a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad */ 1348011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setVideoProvider(final VideoProvider videoProvider) { 1349a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad mVideoProvider = videoProvider; 1350011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1351011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1352011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1353011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1354011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1355011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1356011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onVideoProviderChanged(connection, videoProvider); 1357011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1358011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 1359a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 1360a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad } 1361a64627c2d3330f6bee8055b2e51ffaf8a122ef2bIhab Awad 136233aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal /** @hide */ 1363011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setIsVoipAudioMode(final boolean isVoip) { 1364100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee mIsVoipAudioMode = isVoip; 1365011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1366011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1367011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1368011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1369011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1370011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1371011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onVoipAudioChanged(connection, isVoip); 1372011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1373011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 137433aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal } 137533aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal } 1376e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 1377e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal /** @hide */ 1378011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setStatusHints(final StatusHints statusHints) { 1379e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal mStatusHints = statusHints; 1380011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1381011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1382011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1383011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1384011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1385011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1386011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onStatusHintsChanged(connection, statusHints); 1387011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1388011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 1389612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 1390612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 1391612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 1392612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal /** @hide */ 1393011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setAddress(final Uri address, final int presentation) { 1394100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee mAddress = address; 1395100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee mAddressPresentation = presentation; 1396011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1397011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1398011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1399011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1400011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1401011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1402011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onAddressChanged(connection, address, presentation); 1403011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1404011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 1405612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 1406612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 1407612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 1408612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal /** @hide */ 1409011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setCallerDisplayName(final String callerDisplayName, final int presentation) { 1410612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal mCallerDisplayName = callerDisplayName; 1411612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal mCallerDisplayNamePresentation = presentation; 1412011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1413011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1414011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1415011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1416011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1417011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1418011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onCallerDisplayNameChanged( 1419011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee connection, callerDisplayName, presentation); 1420011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1421011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 1422e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 1423e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 14242ab88cc313fc4af7fb9436e236cd3a5d1ac58478Sailesh Nepal 14252ab88cc313fc4af7fb9436e236cd3a5d1ac58478Sailesh Nepal /** @hide */ 1426011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setConferenceableConnections(final List<RemoteConnection> conferenceableConnections) { 14277c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon mConferenceableConnections.clear(); 14287c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon mConferenceableConnections.addAll(conferenceableConnections); 1429011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1430011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1431011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1432011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1433011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1434011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1435011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onConferenceableConnectionsChanged( 1436011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee connection, mUnmodifiableconferenceableConnections); 1437011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1438011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 1439b8e85c74e5910a461078704048d67f82b216508cIhab Awad } 1440b8e85c74e5910a461078704048d67f82b216508cIhab Awad } 1441b8e85c74e5910a461078704048d67f82b216508cIhab Awad 1442b8e85c74e5910a461078704048d67f82b216508cIhab Awad /** @hide */ 1443011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee void setConference(final RemoteConference conference) { 1444b8e85c74e5910a461078704048d67f82b216508cIhab Awad if (mConference != conference) { 1445b8e85c74e5910a461078704048d67f82b216508cIhab Awad mConference = conference; 1446011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee for (CallbackRecord record : mCallbackRecords) { 1447011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final RemoteConnection connection = this; 1448011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee final Callback callback = record.getCallback(); 1449011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee record.getHandler().post(new Runnable() { 1450011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee @Override 1451011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public void run() { 1452011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee callback.onConferenceChanged(connection, conference); 1453011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1454011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee }); 1455b8e85c74e5910a461078704048d67f82b216508cIhab Awad } 14567c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon } 14577c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon } 14587c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon 14596b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon /** @hide */ 1460dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn void putExtras(final Bundle extras) { 14612282bb97e78ea87ff322ecf12563ab0120af2b28Tyler Gunn if (extras == null) { 14622282bb97e78ea87ff322ecf12563ab0120af2b28Tyler Gunn return; 14632282bb97e78ea87ff322ecf12563ab0120af2b28Tyler Gunn } 1464dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn if (mExtras == null) { 1465dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn mExtras = new Bundle(); 1466dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 1467dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn mExtras.putAll(extras); 1468dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn 1469dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn notifyExtrasChanged(); 1470dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 1471dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn 1472dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn /** @hide */ 1473dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn void removeExtras(List<String> keys) { 1474dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn if (mExtras == null || keys == null || keys.isEmpty()) { 1475dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn return; 1476dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 1477dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn for (String key : keys) { 1478dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn mExtras.remove(key); 1479dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 1480dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn 1481dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn notifyExtrasChanged(); 1482dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 1483dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn 1484dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn private void notifyExtrasChanged() { 14856b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon for (CallbackRecord record : mCallbackRecords) { 14866b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon final RemoteConnection connection = this; 14876b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon final Callback callback = record.getCallback(); 14886b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon record.getHandler().post(new Runnable() { 14896b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon @Override 14906b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon public void run() { 1491dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn callback.onExtrasChanged(connection, mExtras); 14926b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon } 14936b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon }); 14946b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon } 14956b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon } 14966b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon 1497bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn /** @hide */ 1498876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn void onConnectionEvent(final String event, final Bundle extras) { 1499bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn for (CallbackRecord record : mCallbackRecords) { 1500bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn final RemoteConnection connection = this; 1501bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn final Callback callback = record.getCallback(); 1502bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn record.getHandler().post(new Runnable() { 1503bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn @Override 1504bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn public void run() { 1505876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn callback.onConnectionEvent(connection, event, extras); 1506bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn } 1507bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn }); 1508bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn } 1509bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn } 1510bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn 151157006aa82a69740df73415a456d31993e2785e24Hall Liu /** @hide */ 151257006aa82a69740df73415a456d31993e2785e24Hall Liu void onRttInitiationSuccess() { 151357006aa82a69740df73415a456d31993e2785e24Hall Liu for (CallbackRecord record : mCallbackRecords) { 151457006aa82a69740df73415a456d31993e2785e24Hall Liu final RemoteConnection connection = this; 151557006aa82a69740df73415a456d31993e2785e24Hall Liu final Callback callback = record.getCallback(); 151657006aa82a69740df73415a456d31993e2785e24Hall Liu record.getHandler().post( 151757006aa82a69740df73415a456d31993e2785e24Hall Liu () -> callback.onRttInitiationSuccess(connection)); 151857006aa82a69740df73415a456d31993e2785e24Hall Liu } 151957006aa82a69740df73415a456d31993e2785e24Hall Liu } 152057006aa82a69740df73415a456d31993e2785e24Hall Liu 152157006aa82a69740df73415a456d31993e2785e24Hall Liu /** @hide */ 152257006aa82a69740df73415a456d31993e2785e24Hall Liu void onRttInitiationFailure(int reason) { 152357006aa82a69740df73415a456d31993e2785e24Hall Liu for (CallbackRecord record : mCallbackRecords) { 152457006aa82a69740df73415a456d31993e2785e24Hall Liu final RemoteConnection connection = this; 152557006aa82a69740df73415a456d31993e2785e24Hall Liu final Callback callback = record.getCallback(); 152657006aa82a69740df73415a456d31993e2785e24Hall Liu record.getHandler().post( 152757006aa82a69740df73415a456d31993e2785e24Hall Liu () -> callback.onRttInitiationFailure(connection, reason)); 152857006aa82a69740df73415a456d31993e2785e24Hall Liu } 152957006aa82a69740df73415a456d31993e2785e24Hall Liu } 153057006aa82a69740df73415a456d31993e2785e24Hall Liu 153157006aa82a69740df73415a456d31993e2785e24Hall Liu /** @hide */ 153257006aa82a69740df73415a456d31993e2785e24Hall Liu void onRttSessionRemotelyTerminated() { 153357006aa82a69740df73415a456d31993e2785e24Hall Liu for (CallbackRecord record : mCallbackRecords) { 153457006aa82a69740df73415a456d31993e2785e24Hall Liu final RemoteConnection connection = this; 153557006aa82a69740df73415a456d31993e2785e24Hall Liu final Callback callback = record.getCallback(); 153657006aa82a69740df73415a456d31993e2785e24Hall Liu record.getHandler().post( 153757006aa82a69740df73415a456d31993e2785e24Hall Liu () -> callback.onRttSessionRemotelyTerminated(connection)); 153857006aa82a69740df73415a456d31993e2785e24Hall Liu } 153957006aa82a69740df73415a456d31993e2785e24Hall Liu } 154057006aa82a69740df73415a456d31993e2785e24Hall Liu 154157006aa82a69740df73415a456d31993e2785e24Hall Liu /** @hide */ 154257006aa82a69740df73415a456d31993e2785e24Hall Liu void onRemoteRttRequest() { 154357006aa82a69740df73415a456d31993e2785e24Hall Liu for (CallbackRecord record : mCallbackRecords) { 154457006aa82a69740df73415a456d31993e2785e24Hall Liu final RemoteConnection connection = this; 154557006aa82a69740df73415a456d31993e2785e24Hall Liu final Callback callback = record.getCallback(); 154657006aa82a69740df73415a456d31993e2785e24Hall Liu record.getHandler().post( 154757006aa82a69740df73415a456d31993e2785e24Hall Liu () -> callback.onRemoteRttRequest(connection)); 154857006aa82a69740df73415a456d31993e2785e24Hall Liu } 154957006aa82a69740df73415a456d31993e2785e24Hall Liu } 155057006aa82a69740df73415a456d31993e2785e24Hall Liu 155157006aa82a69740df73415a456d31993e2785e24Hall Liu /** 1552bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton /** 15536107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad * Create a RemoteConnection represents a failure, and which will be in 15546107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad * {@link Connection#STATE_DISCONNECTED}. Attempting to use it for anything will almost 15556107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad * certainly result in bad things happening. Do not do this. 1556bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * 1557bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * @return a failed {@link RemoteConnection} 1558bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * 1559bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton * @hide 1560bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton */ 15617f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee public static RemoteConnection failure(DisconnectCause disconnectCause) { 15627f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee return new RemoteConnection(disconnectCause); 1563bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton } 1564011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee 1565011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee private static final class CallbackRecord extends Callback { 1566011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee private final Callback mCallback; 1567011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee private final Handler mHandler; 1568011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee 1569011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public CallbackRecord(Callback callback, Handler handler) { 1570011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee mCallback = callback; 1571011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee mHandler = handler; 1572011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1573011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee 1574011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public Callback getCallback() { 1575011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee return mCallback; 1576011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1577011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee 1578011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee public Handler getHandler() { 1579011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee return mHandler; 1580011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 1581011728fc3a4368b601844d225d1f37bf48ea5735Andrew Lee } 158252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon} 1583