1ef36ef67e009449300b0150c60c9f637e205d79eWink Saville/* 2ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Copyright (c) 2013 The Android Open Source Project 3ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 4ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * you may not use this file except in compliance with the License. 6ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * You may obtain a copy of the License at 7ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 8ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * http://www.apache.org/licenses/LICENSE-2.0 9ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 10ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Unless required by applicable law or agreed to in writing, software 11ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * See the License for the specific language governing permissions and 14ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * limitations under the License. 15ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 16ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 17ef36ef67e009449300b0150c60c9f637e205d79eWink Savillepackage com.android.ims.internal; 18ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 19a4710d5d926d8112179acece620f49cb79257e98Andrew Leeimport android.os.Message; 20ef36ef67e009449300b0150c60c9f637e205d79eWink Savilleimport android.os.RemoteException; 21ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 22ef36ef67e009449300b0150c60c9f637e205d79eWink Savilleimport com.android.ims.ImsCallProfile; 23ef36ef67e009449300b0150c60c9f637e205d79eWink Savilleimport com.android.ims.ImsConferenceState; 24ef36ef67e009449300b0150c60c9f637e205d79eWink Savilleimport com.android.ims.ImsReasonInfo; 25ef36ef67e009449300b0150c60c9f637e205d79eWink Savilleimport com.android.ims.ImsStreamMediaProfile; 26ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 27ef36ef67e009449300b0150c60c9f637e205d79eWink Saville/** 28ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Provides the call initiation/termination, and media exchange between two IMS endpoints. 29ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * It directly communicates with IMS service which implements the IMS protocol behavior. 30ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 31ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @hide 32ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 33ef36ef67e009449300b0150c60c9f637e205d79eWink Savillepublic class ImsCallSession { 34ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private static final String TAG = "ImsCallSession"; 35ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 36ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 37ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Defines IMS call session state. 38ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 39ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static class State { 40ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final int IDLE = 0; 41ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final int INITIATED = 1; 42ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final int NEGOTIATING = 2; 43ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final int ESTABLISHING = 3; 44ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final int ESTABLISHED = 4; 45ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 46ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final int RENEGOTIATING = 5; 47ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final int REESTABLISHING = 6; 48ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 49ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final int TERMINATING = 7; 50ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final int TERMINATED = 8; 51ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 52ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static final int INVALID = (-1); 53ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 54ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 55ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Converts the state to string. 56ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 57ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static String toString(int state) { 58ef36ef67e009449300b0150c60c9f637e205d79eWink Saville switch (state) { 59ef36ef67e009449300b0150c60c9f637e205d79eWink Saville case IDLE: 60ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return "IDLE"; 61ef36ef67e009449300b0150c60c9f637e205d79eWink Saville case INITIATED: 62ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return "INITIATED"; 63ef36ef67e009449300b0150c60c9f637e205d79eWink Saville case NEGOTIATING: 64ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return "NEGOTIATING"; 65ef36ef67e009449300b0150c60c9f637e205d79eWink Saville case ESTABLISHING: 66ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return "ESTABLISHING"; 67ef36ef67e009449300b0150c60c9f637e205d79eWink Saville case ESTABLISHED: 68ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return "ESTABLISHED"; 69ef36ef67e009449300b0150c60c9f637e205d79eWink Saville case RENEGOTIATING: 70ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return "RENEGOTIATING"; 71ef36ef67e009449300b0150c60c9f637e205d79eWink Saville case REESTABLISHING: 72ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return "REESTABLISHING"; 73ef36ef67e009449300b0150c60c9f637e205d79eWink Saville case TERMINATING: 74ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return "TERMINATING"; 75ef36ef67e009449300b0150c60c9f637e205d79eWink Saville case TERMINATED: 76ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return "TERMINATED"; 77ef36ef67e009449300b0150c60c9f637e205d79eWink Saville default: 78ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return "UNKNOWN"; 79ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 80ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 81ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 82ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private State() { 83ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 84ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 85ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 86ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 87ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Listener for events relating to an IMS session, such as when a session is being 88ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * recieved ("on ringing") or a call is outgoing ("on calling"). 89ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * <p>Many of these events are also received by {@link ImsCall.Listener}.</p> 90ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 91ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public static class Listener { 92ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 93ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when a request is sent out to initiate a new session 94ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * and 1xx response is received from the network. 95ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 96ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 97ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 98ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionProgressing(ImsCallSession session, 99ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsStreamMediaProfile profile) { 100ef36ef67e009449300b0150c60c9f637e205d79eWink Saville // no-op 101ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 102ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 103ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 104ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the session is established. 105ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 106ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 107ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 108ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionStarted(ImsCallSession session, 109ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallProfile profile) { 110ef36ef67e009449300b0150c60c9f637e205d79eWink Saville // no-op 111ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 112ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 113ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 114ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the session establishment is failed. 115ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 116ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 117ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param reasonInfo detailed reason of the session establishment failure 118ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 119ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionStartFailed(ImsCallSession session, 120ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 121ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 122ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 123ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 124ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the session is terminated. 125ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 126ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 127ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param reasonInfo detailed reason of the session termination 128ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 129ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionTerminated(ImsCallSession session, 130ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 131ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 132ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 133ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 134ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the session is in hold. 135ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 136ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 137ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 138ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionHeld(ImsCallSession session, 139ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallProfile profile) { 140ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 141ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 142ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 143ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the session hold is failed. 144ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 145ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 146ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param reasonInfo detailed reason of the session hold failure 147ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 148ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionHoldFailed(ImsCallSession session, 149ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 150ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 151ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 152ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 153ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the session hold is received from the remote user. 154ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 155ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 156ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 157ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionHoldReceived(ImsCallSession session, 158ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallProfile profile) { 159ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 160ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 161ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 162ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the session resume is done. 163ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 164ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 165ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 166ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionResumed(ImsCallSession session, 167ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallProfile profile) { 168ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 169ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 170ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 171ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the session resume is failed. 172ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 173ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 174ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param reasonInfo detailed reason of the session resume failure 175ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 176ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionResumeFailed(ImsCallSession session, 177ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 178ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 179ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 180ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 181ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the session resume is received from the remote user. 182ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 183ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 184ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 185ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionResumeReceived(ImsCallSession session, 186ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallProfile profile) { 187ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 188ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 189ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 1903f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * Called when the session merge has been started. At this point, the {@code newSession} 1913f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * represents the session which has been initiated to the IMS conference server for the 1923f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * new merged conference. 193ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 194ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 195ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param newSession the session object that is merged with an active & hold session 196ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 1973f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn public void callSessionMergeStarted(ImsCallSession session, 198ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallSession newSession, ImsCallProfile profile) { 199ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 200ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 201ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 2023f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * Called when the session merge is successful and the merged session is active. 2033f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * 2043f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * @param session the session object that carries out the IMS session 2053f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn */ 2063f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn public void callSessionMergeComplete(ImsCallSession session) { 2073f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn } 2083f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn 2093f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn /** 2103f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * Called when the session merge has failed. 211ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 212ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 213ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param reasonInfo detailed reason of the call merge failure 214ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 215ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionMergeFailed(ImsCallSession session, 216ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 217ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 218ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 219ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 220ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the session is updated (except for hold/unhold). 221ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 222ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param call the call object that carries out the IMS call 223ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 224ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionUpdated(ImsCallSession session, 225ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallProfile profile) { 226ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 227ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 228ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 229ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the session update is failed. 230ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 231ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 232ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param reasonInfo detailed reason of the session update failure 233ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 234ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionUpdateFailed(ImsCallSession session, 235ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 236ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 237ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 238ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 239ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the session update is received from the remote user. 240ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 241ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 242ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 243ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionUpdateReceived(ImsCallSession session, 244ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallProfile profile) { 245ef36ef67e009449300b0150c60c9f637e205d79eWink Saville // no-op 246ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 247ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 248ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 249ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the session is extended to the conference session. 250ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 251ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 252ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param newSession the session object that is extended to the conference 253ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * from the active session 254ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 255ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionConferenceExtended(ImsCallSession session, 256ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallSession newSession, ImsCallProfile profile) { 257ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 258ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 259ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 260ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the conference extension is failed. 261ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 262ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 263ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param reasonInfo detailed reason of the conference extension failure 264ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 265ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionConferenceExtendFailed(ImsCallSession session, 266ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 267ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 268ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 269ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 270ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the conference extension is received from the remote user. 271ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 272ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 273ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 274ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionConferenceExtendReceived(ImsCallSession session, 275ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallSession newSession, ImsCallProfile profile) { 276ef36ef67e009449300b0150c60c9f637e205d79eWink Saville // no-op 277ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 278ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 279ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 280ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the invitation request of the participants is delivered to the conference 281ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * server. 282ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 283ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 284ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 285ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionInviteParticipantsRequestDelivered(ImsCallSession session) { 286ef36ef67e009449300b0150c60c9f637e205d79eWink Saville // no-op 287ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 288ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 289ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 290ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the invitation request of the participants is failed. 291ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 292ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 293ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param reasonInfo detailed reason of the conference invitation failure 294ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 295ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionInviteParticipantsRequestFailed(ImsCallSession session, 296ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 297ef36ef67e009449300b0150c60c9f637e205d79eWink Saville // no-op 298ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 299ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 300ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 301ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the removal request of the participants is delivered to the conference 302ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * server. 303ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 304ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 305ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 306ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionRemoveParticipantsRequestDelivered(ImsCallSession session) { 307ef36ef67e009449300b0150c60c9f637e205d79eWink Saville // no-op 308ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 309ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 310ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 311ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the removal request of the participants is failed. 312ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 313ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 314ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param reasonInfo detailed reason of the conference removal failure 315ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 316ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionRemoveParticipantsRequestFailed(ImsCallSession session, 317ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 318ef36ef67e009449300b0150c60c9f637e205d79eWink Saville // no-op 319ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 320ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 321ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 322ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the conference state is updated. 323ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 324ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param session the session object that carries out the IMS session 325ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 326ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionConferenceStateUpdated(ImsCallSession session, 327ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsConferenceState state) { 328ef36ef67e009449300b0150c60c9f637e205d79eWink Saville // no-op 329ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 330ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 331ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 332ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Called when the USSD message is received from the network. 333ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 334ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param mode mode of the USSD message (REQUEST / NOTIFY) 335ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param ussdMessage USSD message 336ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 337ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionUssdMessageReceived(ImsCallSession session, 338ef36ef67e009449300b0150c60c9f637e205d79eWink Saville int mode, String ussdMessage) { 339ef36ef67e009449300b0150c60c9f637e205d79eWink Saville // no-op 340ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 341f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen 342f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen /** 343f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen * Called when session access technology changes 344f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen * 345f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen * @param session IMS session object 346f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen * @param srcAccessTech original access technology 347f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen * @param targetAccessTech new access technology 348f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen * @param reasonInfo 349f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen */ 350f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen public void callSessionHandover(ImsCallSession session, 351f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen int srcAccessTech, int targetAccessTech, 352f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen ImsReasonInfo reasonInfo) { 353f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen // no-op 354f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen } 355f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen 356f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen /** 357f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen * Called when session access technology change fails 358f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen * 359f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen * @param session IMS session object 360f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen * @param srcAccessTech original access technology 361f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen * @param targetAccessTech new access technology 362f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen * @param reasonInfo handover failure reason 363f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen */ 364f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen public void callSessionHandoverFailed(ImsCallSession session, 365f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen int srcAccessTech, int targetAccessTech, 366f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen ImsReasonInfo reasonInfo) { 367f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen // no-op 368f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen } 369987bab859324396c0d1fc00c375f98f3f74c9067Pavel Zhamaitsiak 370987bab859324396c0d1fc00c375f98f3f74c9067Pavel Zhamaitsiak /** 371987bab859324396c0d1fc00c375f98f3f74c9067Pavel Zhamaitsiak * Called when TTY mode of remote party changed 372987bab859324396c0d1fc00c375f98f3f74c9067Pavel Zhamaitsiak * 373987bab859324396c0d1fc00c375f98f3f74c9067Pavel Zhamaitsiak * @param session IMS session object 374987bab859324396c0d1fc00c375f98f3f74c9067Pavel Zhamaitsiak * @param mode TTY mode of remote party 375987bab859324396c0d1fc00c375f98f3f74c9067Pavel Zhamaitsiak */ 376987bab859324396c0d1fc00c375f98f3f74c9067Pavel Zhamaitsiak public void callSessionTtyModeReceived(ImsCallSession session, 377987bab859324396c0d1fc00c375f98f3f74c9067Pavel Zhamaitsiak int mode) { 378987bab859324396c0d1fc00c375f98f3f74c9067Pavel Zhamaitsiak // no-op 379987bab859324396c0d1fc00c375f98f3f74c9067Pavel Zhamaitsiak } 380ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 381ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 382ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private final IImsCallSession miSession; 383ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private boolean mClosed = false; 384ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private Listener mListener; 385ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 386ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public ImsCallSession(IImsCallSession iSession) { 387ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession = iSession; 388ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 389ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (iSession != null) { 390ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 391ef36ef67e009449300b0150c60c9f637e205d79eWink Saville iSession.setListener(new IImsCallSessionListenerProxy()); 392ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 393ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 394ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } else { 395ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mClosed = true; 396ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 397ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 398ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 399ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public ImsCallSession(IImsCallSession iSession, Listener listener) { 400ef36ef67e009449300b0150c60c9f637e205d79eWink Saville this(iSession); 401ef36ef67e009449300b0150c60c9f637e205d79eWink Saville setListener(listener); 402ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 403ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 404ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 405ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Closes this object. This object is not usable after being closed. 406ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 407ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public synchronized void close() { 408ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 409ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 410ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 411ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 412ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 413ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession.close(); 414ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mClosed = true; 415ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 416ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 417ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 418ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 419ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 420ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Gets the call ID of the session. 421ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 422ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @return the call ID 423ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 424ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public String getCallId() { 425ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 426ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return null; 427ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 428ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 429ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 430ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return miSession.getCallId(); 431ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 432ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return null; 433ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 434ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 435ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 436ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 437ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Gets the call profile that this session is associated with 438ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 439ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @return the call profile that this session is associated with 440ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 441ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public ImsCallProfile getCallProfile() { 442ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 443ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return null; 444ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 445ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 446ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 447ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return miSession.getCallProfile(); 448ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 449ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return null; 450ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 451ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 452ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 453ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 454ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Gets the local call profile that this session is associated with 455ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 456ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @return the local call profile that this session is associated with 457ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 458ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public ImsCallProfile getLocalCallProfile() { 459ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 460ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return null; 461ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 462ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 463ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 464ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return miSession.getLocalCallProfile(); 465ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 466ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return null; 467ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 468ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 46901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee 47001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee /** 471e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh * Gets the remote call profile that this session is associated with 472e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh * 473e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh * @return the remote call profile that this session is associated with 474e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh */ 475e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh public ImsCallProfile getRemoteCallProfile() { 476e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh if (mClosed) { 477e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh return null; 478e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh } 479e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh 480e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh try { 481e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh return miSession.getRemoteCallProfile(); 482e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh } catch (RemoteException e) { 483e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh return null; 484e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh } 485e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh } 486e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh 487e871989b4d1c6590e7c280cbdd90c75ca82a877eShriram Ganesh /** 48801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * Gets the video call provider for the session. 48901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * 49001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * @return The video call provider. 49101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee */ 49201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee public IImsVideoCallProvider getVideoCallProvider() { 49301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee if (mClosed) { 49401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee return null; 49501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee } 49601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee 49701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee try { 49801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee return miSession.getVideoCallProvider(); 49901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee } catch (RemoteException e) { 50001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee return null; 50101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee } 50201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee } 503ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 504ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 505ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Gets the value associated with the specified property of this session. 506ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 507ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @return the string value associated with the specified property 508ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 509ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public String getProperty(String name) { 510ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 511ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return null; 512ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 513ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 514ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 515ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return miSession.getProperty(name); 516ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 517ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return null; 518ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 519ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 520ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 521ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 522ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Gets the session state. 523ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * The value returned must be one of the states in {@link State}. 524ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 525ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @return the session state 526ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 527ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public int getState() { 528ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 529ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return State.INVALID; 530ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 531ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 532ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 533ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return miSession.getState(); 534ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 535ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return State.INVALID; 536ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 537ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 538047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn 539047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn /** 540047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn * Determines if the {@link ImsCallSession} is currently alive (e.g. not in a terminated or 541047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn * closed state). 542047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn * 543047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn * @return {@code True} if the session is alive. 544047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn */ 545047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn public boolean isAlive() { 546047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn if (mClosed) { 547047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn return false; 548047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn } 549047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn 550047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn int state = getState(); 551047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn switch (state) { 552047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn case State.IDLE: 553047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn case State.INITIATED: 554047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn case State.NEGOTIATING: 555047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn case State.ESTABLISHING: 556047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn case State.ESTABLISHED: 557047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn case State.RENEGOTIATING: 558047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn case State.REESTABLISHING: 559047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn return true; 560047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn default: 561047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn return false; 562047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn } 563047d8101113030f34f89f7c9ba015d6c5c3abba6Tyler Gunn } 564ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 565ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 566ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Gets the native IMS call session. 567ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @hide 568ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 569ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public IImsCallSession getSession() { 570ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return miSession; 571ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 572ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 573ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 574ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Checks if the session is in call. 575ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 576ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @return true if the session is in call 577ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 578ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public boolean isInCall() { 579ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 580ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return false; 581ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 582ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 583ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 584ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return miSession.isInCall(); 585ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 586ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return false; 587ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 588ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 589ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 590ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 591ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Sets the listener to listen to the session events. A {@link ImsCallSession} 592ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * can only hold one listener at a time. Subsequent calls to this method 593ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * override the previous listener. 594ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 595ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param listener to listen to the session events of this object 596ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 597ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void setListener(Listener listener) { 598ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener = listener; 599ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 600ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 601ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 602ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Mutes or unmutes the mic for the active call. 603ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 604ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param muted true if the call is muted, false otherwise 605ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 606ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void setMute(boolean muted) { 607ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 608ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 609ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 610ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 611ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 612ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession.setMute(muted); 613ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 614ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 615ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 616ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 617ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 618ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Initiates an IMS call with the specified target and call profile. 619ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * The session listener is called back upon defined session events. 620ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * The method is only valid to call when the session state is in 621ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * {@link ImsCallSession#State#IDLE}. 622ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 623ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param callee dialed string to make the call to 624ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param profile call profile to make the call with the specified service type, 625ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * call type and media information 626ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @see Listener#callSessionStarted, Listener#callSessionStartFailed 627ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 628ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void start(String callee, ImsCallProfile profile) { 629ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 630ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 631ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 632ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 633ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 634ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession.start(callee, profile); 635ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 636ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 637ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 638ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 639ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 640ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Initiates an IMS conference call with the specified target and call profile. 641ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * The session listener is called back upon defined session events. 642ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * The method is only valid to call when the session state is in 643ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * {@link ImsCallSession#State#IDLE}. 644ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 645ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param participants participant list to initiate an IMS conference call 646ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param profile call profile to make the call with the specified service type, 647ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * call type and media information 648ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @see Listener#callSessionStarted, Listener#callSessionStartFailed 649ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 650ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void start(String[] participants, ImsCallProfile profile) { 651ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 652ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 653ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 654ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 655ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 656ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession.startConference(participants, profile); 657ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 658ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 659ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 660ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 661ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 662ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Accepts an incoming call or session update. 663ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 664ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param callType call type specified in {@link ImsCallProfile} to be answered 665ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param profile stream media profile {@link ImsStreamMediaProfile} to be answered 666ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @see Listener#callSessionStarted 667ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 668ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void accept(int callType, ImsStreamMediaProfile profile) { 669ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 670ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 671ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 672ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 673ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 674ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession.accept(callType, profile); 675ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 676ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 677ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 678ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 679ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 680ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Rejects an incoming call or session update. 681ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 682ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param reason reason code to reject an incoming call 683ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @see Listener#callSessionStartFailed 684ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 685ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void reject(int reason) { 686ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 687ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 688ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 689ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 690ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 691ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession.reject(reason); 692ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 693ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 694ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 695ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 696ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 697ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Terminates a call. 698ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 699ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @see Listener#callSessionTerminated 700ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 701ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void terminate(int reason) { 702ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 703ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 704ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 705ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 706ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 707ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession.terminate(reason); 708ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 709ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 710ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 711ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 712ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 713ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Puts a call on hold. When it succeeds, {@link Listener#callSessionHeld} is called. 714ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 715ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param profile stream media profile {@link ImsStreamMediaProfile} to hold the call 716ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @see Listener#callSessionHeld, Listener#callSessionHoldFailed 717ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 718ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void hold(ImsStreamMediaProfile profile) { 719ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 720ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 721ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 722ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 723ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 724ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession.hold(profile); 725ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 726ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 727ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 728ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 729ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 730ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Continues a call that's on hold. When it succeeds, 731ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * {@link Listener#callSessionResumed} is called. 732ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 733ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param profile stream media profile {@link ImsStreamMediaProfile} to resume the call 734ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @see Listener#callSessionResumed, Listener#callSessionResumeFailed 735ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 736ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void resume(ImsStreamMediaProfile profile) { 737ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 738ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 739ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 740ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 741ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 742ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession.resume(profile); 743ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 744ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 745ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 746ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 747ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 748ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Merges the active & hold call. When it succeeds, 7493f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * {@link Listener#callSessionMergeStarted} is called. 750ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 7513f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * @see Listener#callSessionMergeStarted , Listener#callSessionMergeFailed 752ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 753ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void merge() { 754ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 755ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 756ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 757ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 758ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 759ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession.merge(); 760ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 761ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 762ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 763ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 764ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 765ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Updates the current call's properties (ex. call mode change: video upgrade / downgrade). 766ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 767ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param callType call type specified in {@link ImsCallProfile} to be updated 768ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param profile stream media profile {@link ImsStreamMediaProfile} to be updated 769ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @see Listener#callSessionUpdated, Listener#callSessionUpdateFailed 770ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 771ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void update(int callType, ImsStreamMediaProfile profile) { 772ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 773ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 774ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 775ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 776ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 777ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession.update(callType, profile); 778ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 779ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 780ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 781ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 782ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 783ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Extends this call to the conference call with the specified recipients. 784ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 785ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @participants participant list to be invited to the conference call after extending the call 786ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @see Listener#sessionConferenceExtened, Listener#sessionConferenceExtendFailed 787ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 788ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void extendToConference(String[] participants) { 789ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 790ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 791ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 792ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 793ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 794ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession.extendToConference(participants); 795ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 796ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 797ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 798ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 799ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 800ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Requests the conference server to invite an additional participants to the conference. 801ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 802ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @participants participant list to be invited to the conference call 803ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @see Listener#sessionInviteParticipantsRequestDelivered, 804ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Listener#sessionInviteParticipantsRequestFailed 805ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 806ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void inviteParticipants(String[] participants) { 807ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 808ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 809ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 810ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 811ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 812ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession.inviteParticipants(participants); 813ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 814ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 815ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 816ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 817ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 818ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Requests the conference server to remove the specified participants from the conference. 819ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 820ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param participants participant list to be removed from the conference call 821ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @see Listener#sessionRemoveParticipantsRequestDelivered, 822ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Listener#sessionRemoveParticipantsRequestFailed 823ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 824ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void removeParticipants(String[] participants) { 825ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 826ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 827ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 828ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 829ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 830ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession.removeParticipants(participants); 831ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 832ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 833ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 834ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 835ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 836ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 837ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Sends a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2833</a>, 838ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * event 0 ~ 9 maps to decimal value 0 ~ 9, '*' to 10, '#' to 11, event 'A' ~ 'D' to 12 ~ 15, 839ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * and event flash to 16. Currently, event flash is not supported. 840ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 8412f92daf76a66d7d2fe6fb7b1a28fc1b5888a7b7cLibin.Tang@motorola.com * @param c the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs. 842ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 843a4710d5d926d8112179acece620f49cb79257e98Andrew Lee public void sendDtmf(char c, Message result) { 844ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 845ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 846ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 847ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 848ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 849a4710d5d926d8112179acece620f49cb79257e98Andrew Lee miSession.sendDtmf(c, result); 850ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 851ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 852ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 853ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 854ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 855a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam * Starts a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2833</a>, 856a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam * event 0 ~ 9 maps to decimal value 0 ~ 9, '*' to 10, '#' to 11, event 'A' ~ 'D' to 12 ~ 15, 857a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam * and event flash to 16. Currently, event flash is not supported. 858a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam * 859a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam * @param c the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs. 860a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam */ 861a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam public void startDtmf(char c) { 862a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam if (mClosed) { 863a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam return; 864a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam } 865a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam 866a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam try { 867a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam miSession.startDtmf(c); 868a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam } catch (RemoteException e) { 869a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam } 870a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam } 871a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam 872a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam /** 873a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam * Stops a DTMF code. 874a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam */ 875a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam public void stopDtmf() { 876a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam if (mClosed) { 877a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam return; 878a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam } 879a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam 880a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam try { 881a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam miSession.stopDtmf(); 882a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam } catch (RemoteException e) { 883a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam } 884a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam } 885a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam 886a6fbae9f8c793118e008a98d3576df316bf0364aUma Maheswari Ramalingam /** 887ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Sends an USSD message. 888ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * 889ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * @param ussdMessage USSD message to send 890ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 891ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void sendUssd(String ussdMessage) { 892ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mClosed) { 893ef36ef67e009449300b0150c60c9f637e205d79eWink Saville return; 894ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 895ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 896ef36ef67e009449300b0150c60c9f637e205d79eWink Saville try { 897ef36ef67e009449300b0150c60c9f637e205d79eWink Saville miSession.sendUssd(ussdMessage); 898ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } catch (RemoteException e) { 899ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 900ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 901ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 902ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 903725ad373383798c1516348475b1f6304484e031eTyler Gunn * Determines if the session is multiparty. 904725ad373383798c1516348475b1f6304484e031eTyler Gunn * 905725ad373383798c1516348475b1f6304484e031eTyler Gunn * @return {@code True} if the session is multiparty. 906725ad373383798c1516348475b1f6304484e031eTyler Gunn */ 907725ad373383798c1516348475b1f6304484e031eTyler Gunn public boolean isMultiparty() { 908725ad373383798c1516348475b1f6304484e031eTyler Gunn if (mClosed) { 909725ad373383798c1516348475b1f6304484e031eTyler Gunn return false; 910725ad373383798c1516348475b1f6304484e031eTyler Gunn } 911725ad373383798c1516348475b1f6304484e031eTyler Gunn 912725ad373383798c1516348475b1f6304484e031eTyler Gunn try { 913725ad373383798c1516348475b1f6304484e031eTyler Gunn return miSession.isMultiparty(); 914725ad373383798c1516348475b1f6304484e031eTyler Gunn } catch (RemoteException e) { 915725ad373383798c1516348475b1f6304484e031eTyler Gunn return false; 916725ad373383798c1516348475b1f6304484e031eTyler Gunn } 917725ad373383798c1516348475b1f6304484e031eTyler Gunn } 918725ad373383798c1516348475b1f6304484e031eTyler Gunn 919725ad373383798c1516348475b1f6304484e031eTyler Gunn /** 920ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * A listener type for receiving notification on IMS call session events. 921ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * When an event is generated for an {@link IImsCallSession}, 922ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * the application is notified by having one of the methods called on 923ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * the {@link IImsCallSessionListener}. 924ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 925ef36ef67e009449300b0150c60c9f637e205d79eWink Saville private class IImsCallSessionListenerProxy extends IImsCallSessionListener.Stub { 926ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 927ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Notifies the result of the basic session operation (setup / terminate). 928ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 929ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 930ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionProgressing(IImsCallSession session, 931ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsStreamMediaProfile profile) { 932ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 933ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionProgressing(ImsCallSession.this, profile); 934ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 935ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 936ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 937ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 938ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionStarted(IImsCallSession session, 939ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallProfile profile) { 940ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 941ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionStarted(ImsCallSession.this, profile); 942ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 943ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 944ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 945ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 946ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionStartFailed(IImsCallSession session, 947ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 948ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 949ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionStartFailed(ImsCallSession.this, reasonInfo); 950ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 951ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 952ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 953ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 954ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionTerminated(IImsCallSession session, 955ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 956ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 957ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionTerminated(ImsCallSession.this, reasonInfo); 958ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 959ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 960ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 961ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 962ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Notifies the result of the call hold/resume operation. 963ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 964ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 965ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionHeld(IImsCallSession session, 966ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallProfile profile) { 967ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 968ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionHeld(ImsCallSession.this, profile); 969ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 970ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 971ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 972ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 973ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionHoldFailed(IImsCallSession session, 974ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 975ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 976ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionHoldFailed(ImsCallSession.this, reasonInfo); 977ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 978ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 979ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 980ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 981ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionHoldReceived(IImsCallSession session, 982ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallProfile profile) { 983ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 984ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionHoldReceived(ImsCallSession.this, profile); 985ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 986ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 987ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 988ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 989ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionResumed(IImsCallSession session, 990ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallProfile profile) { 991ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 992ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionResumed(ImsCallSession.this, profile); 993ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 994ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 995ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 996ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 997ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionResumeFailed(IImsCallSession session, 998ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 999ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 1000ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionResumeFailed(ImsCallSession.this, reasonInfo); 1001ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1002ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1003ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 1004ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 1005ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionResumeReceived(IImsCallSession session, 1006ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallProfile profile) { 1007ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 1008ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionResumeReceived(ImsCallSession.this, profile); 1009ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1010ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1011ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 1012ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 10133f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * Notifies the start of a call merge operation. 10143f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * 10153f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * @param session The call session. 10163f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * @param newSession The merged call session. 10173f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * @param profile The call profile. 1018ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 1019ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 10203f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn public void callSessionMergeStarted(IImsCallSession session, 1021ef36ef67e009449300b0150c60c9f637e205d79eWink Saville IImsCallSession newSession, ImsCallProfile profile) { 1022ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 10233f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn mListener.callSessionMergeStarted(ImsCallSession.this, 1024ef36ef67e009449300b0150c60c9f637e205d79eWink Saville new ImsCallSession(newSession), profile); 1025ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1026ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1027ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 10283f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn /** 10293f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * Notifies the successful completion of a call merge operation. 10303f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * 10313f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * @param session The call session. 10323f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn */ 10333f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn @Override 10343f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn public void callSessionMergeComplete(IImsCallSession session) { 10353f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn if (mListener != null) { 10363f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn mListener.callSessionMergeComplete(ImsCallSession.this); 10373f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn } 10383f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn } 10393f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn 10403f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn /** 10413f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * Notifies of a failure to perform a call merge operation. 10423f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * 10433f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * @param session The call session. 10443f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn * @param reasonInfo The merge failure reason. 10453f2b0aaa277545886571cbf90fc90fd5d304e714Tyler Gunn */ 1046ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 1047ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionMergeFailed(IImsCallSession session, 1048ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 1049ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 1050ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionMergeFailed(ImsCallSession.this, reasonInfo); 1051ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1052ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1053ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 1054ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 1055ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Notifies the result of call upgrade / downgrade or any other call updates. 1056ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 1057ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 1058ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionUpdated(IImsCallSession session, 1059ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallProfile profile) { 1060ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 1061ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionUpdated(ImsCallSession.this, profile); 1062ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1063ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1064ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 1065ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 1066ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionUpdateFailed(IImsCallSession session, 1067ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 1068ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 1069ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionUpdateFailed(ImsCallSession.this, reasonInfo); 1070ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1071ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1072ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 1073ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 1074ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionUpdateReceived(IImsCallSession session, 1075ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsCallProfile profile) { 1076ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 1077ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionUpdateReceived(ImsCallSession.this, profile); 1078ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1079ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1080ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 1081ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 1082ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Notifies the result of conference extension. 1083ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 1084ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 1085ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionConferenceExtended(IImsCallSession session, 1086ef36ef67e009449300b0150c60c9f637e205d79eWink Saville IImsCallSession newSession, ImsCallProfile profile) { 1087ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 1088ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionConferenceExtended(ImsCallSession.this, 1089ef36ef67e009449300b0150c60c9f637e205d79eWink Saville new ImsCallSession(newSession), profile); 1090ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1091ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1092ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 1093ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 1094ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionConferenceExtendFailed(IImsCallSession session, 1095ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 1096ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 1097ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionConferenceExtendFailed(ImsCallSession.this, reasonInfo); 1098ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1099ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1100ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 1101ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 1102ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionConferenceExtendReceived(IImsCallSession session, 1103ef36ef67e009449300b0150c60c9f637e205d79eWink Saville IImsCallSession newSession, ImsCallProfile profile) { 1104ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 1105ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionConferenceExtendReceived(ImsCallSession.this, 1106ef36ef67e009449300b0150c60c9f637e205d79eWink Saville new ImsCallSession(newSession), profile); 1107ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1108ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1109ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 1110ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 1111ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Notifies the result of the participant invitation / removal to/from 1112ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * the conference session. 1113ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 1114ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 1115ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionInviteParticipantsRequestDelivered(IImsCallSession session) { 1116ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 1117ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionInviteParticipantsRequestDelivered(ImsCallSession.this); 1118ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1119ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1120ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 1121ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 1122ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionInviteParticipantsRequestFailed(IImsCallSession session, 1123ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 1124ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 1125ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionInviteParticipantsRequestFailed(ImsCallSession.this, 1126ef36ef67e009449300b0150c60c9f637e205d79eWink Saville reasonInfo); 1127ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1128ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1129ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 1130ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 1131ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionRemoveParticipantsRequestDelivered(IImsCallSession session) { 1132ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 1133ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionRemoveParticipantsRequestDelivered(ImsCallSession.this); 1134ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1135ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1136ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 1137ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 1138ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionRemoveParticipantsRequestFailed(IImsCallSession session, 1139ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsReasonInfo reasonInfo) { 1140ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 1141ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionRemoveParticipantsRequestFailed(ImsCallSession.this, 1142ef36ef67e009449300b0150c60c9f637e205d79eWink Saville reasonInfo); 1143ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1144ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1145ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 1146ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 1147ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Notifies the changes of the conference info. in the conference session. 1148ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 1149ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 1150ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionConferenceStateUpdated(IImsCallSession session, 1151ef36ef67e009449300b0150c60c9f637e205d79eWink Saville ImsConferenceState state) { 1152ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 1153ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionConferenceStateUpdated(ImsCallSession.this, state); 1154ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1155ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1156ef36ef67e009449300b0150c60c9f637e205d79eWink Saville 1157ef36ef67e009449300b0150c60c9f637e205d79eWink Saville /** 1158ef36ef67e009449300b0150c60c9f637e205d79eWink Saville * Notifies the incoming USSD message. 1159ef36ef67e009449300b0150c60c9f637e205d79eWink Saville */ 1160ef36ef67e009449300b0150c60c9f637e205d79eWink Saville @Override 1161ef36ef67e009449300b0150c60c9f637e205d79eWink Saville public void callSessionUssdMessageReceived(IImsCallSession session, 1162ef36ef67e009449300b0150c60c9f637e205d79eWink Saville int mode, String ussdMessage) { 1163ef36ef67e009449300b0150c60c9f637e205d79eWink Saville if (mListener != null) { 1164ef36ef67e009449300b0150c60c9f637e205d79eWink Saville mListener.callSessionUssdMessageReceived(ImsCallSession.this, mode, ussdMessage); 1165ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1166ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1167f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen 1168f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen /** 1169f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen * Notifies of handover information for this call 1170f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen */ 1171f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen @Override 1172f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen public void callSessionHandover(IImsCallSession session, 1173f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen int srcAccessTech, int targetAccessTech, 1174f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen ImsReasonInfo reasonInfo) { 1175f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen if (mListener != null) { 1176f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen mListener.callSessionHandover(ImsCallSession.this, srcAccessTech, 1177f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen targetAccessTech, reasonInfo); 1178f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen } 1179f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen } 1180f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen 1181f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen @Override 1182f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen public void callSessionHandoverFailed(IImsCallSession session, 1183f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen int srcAccessTech, int targetAccessTech, 1184f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen ImsReasonInfo reasonInfo) { 1185f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen if (mListener != null) { 1186f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen mListener.callSessionHandoverFailed(ImsCallSession.this, srcAccessTech, 1187f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen targetAccessTech, reasonInfo); 1188f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen } 1189f398093ec531d9cbb063a23ebfd1f16578157e51Etan Cohen } 119031f19e6271e53f7fb359866bd32a8b6a3d47d115Shriram Ganesh 119131f19e6271e53f7fb359866bd32a8b6a3d47d115Shriram Ganesh /** 119231f19e6271e53f7fb359866bd32a8b6a3d47d115Shriram Ganesh * Notifies the TTY mode received from remote party. 119331f19e6271e53f7fb359866bd32a8b6a3d47d115Shriram Ganesh */ 119431f19e6271e53f7fb359866bd32a8b6a3d47d115Shriram Ganesh @Override 119531f19e6271e53f7fb359866bd32a8b6a3d47d115Shriram Ganesh public void callSessionTtyModeReceived(IImsCallSession session, 119631f19e6271e53f7fb359866bd32a8b6a3d47d115Shriram Ganesh int mode) { 119731f19e6271e53f7fb359866bd32a8b6a3d47d115Shriram Ganesh if (mListener != null) { 1198987bab859324396c0d1fc00c375f98f3f74c9067Pavel Zhamaitsiak mListener.callSessionTtyModeReceived(ImsCallSession.this, mode); 119931f19e6271e53f7fb359866bd32a8b6a3d47d115Shriram Ganesh } 120031f19e6271e53f7fb359866bd32a8b6a3d47d115Shriram Ganesh } 1201ef36ef67e009449300b0150c60c9f637e205d79eWink Saville } 1202168c634eef29f21c73129164207d04b8cce23738Tyler Gunn 1203168c634eef29f21c73129164207d04b8cce23738Tyler Gunn /** 1204168c634eef29f21c73129164207d04b8cce23738Tyler Gunn * Provides a string representation of the {@link ImsCallSession}. Primarily intended for 1205168c634eef29f21c73129164207d04b8cce23738Tyler Gunn * use in log statements. 1206168c634eef29f21c73129164207d04b8cce23738Tyler Gunn * 1207168c634eef29f21c73129164207d04b8cce23738Tyler Gunn * @return String representation of session. 1208168c634eef29f21c73129164207d04b8cce23738Tyler Gunn */ 1209168c634eef29f21c73129164207d04b8cce23738Tyler Gunn @Override 1210168c634eef29f21c73129164207d04b8cce23738Tyler Gunn public String toString() { 1211168c634eef29f21c73129164207d04b8cce23738Tyler Gunn StringBuilder sb = new StringBuilder(); 1212168c634eef29f21c73129164207d04b8cce23738Tyler Gunn sb.append("[ImsCallSession objId:"); 1213168c634eef29f21c73129164207d04b8cce23738Tyler Gunn sb.append(System.identityHashCode(this)); 1214168c634eef29f21c73129164207d04b8cce23738Tyler Gunn sb.append(" state:"); 1215168c634eef29f21c73129164207d04b8cce23738Tyler Gunn sb.append(State.toString(getState())); 1216168c634eef29f21c73129164207d04b8cce23738Tyler Gunn sb.append(" callId:"); 1217168c634eef29f21c73129164207d04b8cce23738Tyler Gunn sb.append(getCallId()); 1218168c634eef29f21c73129164207d04b8cce23738Tyler Gunn sb.append("]"); 1219168c634eef29f21c73129164207d04b8cce23738Tyler Gunn return sb.toString(); 1220168c634eef29f21c73129164207d04b8cce23738Tyler Gunn } 1221ef36ef67e009449300b0150c60c9f637e205d79eWink Saville} 1222