121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger/* 221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Copyright (c) 2013 The Android Open Source Project 321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Licensed under the Apache License, Version 2.0 (the "License"); 521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * you may not use this file except in compliance with the License. 621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * You may obtain a copy of the License at 721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * http://www.apache.org/licenses/LICENSE-2.0 921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 1021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Unless required by applicable law or agreed to in writing, software 1121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * distributed under the License is distributed on an "AS IS" BASIS, 1221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * See the License for the specific language governing permissions and 1421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * limitations under the License. 1521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 1621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 1721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerpackage com.android.ims.internal; 1821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 1921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport android.os.Message; 2021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport android.os.RemoteException; 2121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 2221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport java.util.Objects; 2321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 2421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport android.telephony.ims.stub.ImsCallSessionListenerImplBase; 2521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport android.util.Log; 2621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport com.android.ims.ImsCallProfile; 2721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport com.android.ims.ImsConferenceState; 2821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport com.android.ims.ImsReasonInfo; 2921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport com.android.ims.ImsStreamMediaProfile; 3021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport com.android.ims.ImsSuppServiceNotification; 3121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 3221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger/** 3321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Provides the call initiation/termination, and media exchange between two IMS endpoints. 3421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * It directly communicates with IMS service which implements the IMS protocol behavior. 3521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 3621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @hide 3721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 3821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerpublic class ImsCallSession { 3921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private static final String TAG = "ImsCallSession"; 4021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 4121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 4221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Defines IMS call session state. 4321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 4421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public static class State { 4521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public static final int IDLE = 0; 4621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public static final int INITIATED = 1; 4721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public static final int NEGOTIATING = 2; 4821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public static final int ESTABLISHING = 3; 4921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public static final int ESTABLISHED = 4; 5021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 5121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public static final int RENEGOTIATING = 5; 5221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public static final int REESTABLISHING = 6; 5321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 5421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public static final int TERMINATING = 7; 5521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public static final int TERMINATED = 8; 5621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 5721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public static final int INVALID = (-1); 5821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 5921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 6021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Converts the state to string. 6121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 6221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public static String toString(int state) { 6321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger switch (state) { 6421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case IDLE: 6521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return "IDLE"; 6621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case INITIATED: 6721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return "INITIATED"; 6821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case NEGOTIATING: 6921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return "NEGOTIATING"; 7021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case ESTABLISHING: 7121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return "ESTABLISHING"; 7221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case ESTABLISHED: 7321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return "ESTABLISHED"; 7421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case RENEGOTIATING: 7521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return "RENEGOTIATING"; 7621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case REESTABLISHING: 7721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return "REESTABLISHING"; 7821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case TERMINATING: 7921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return "TERMINATING"; 8021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case TERMINATED: 8121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return "TERMINATED"; 8221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger default: 8321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return "UNKNOWN"; 8421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 8521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 8621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 8721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private State() { 8821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 8921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 9021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 9121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 9221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Listener for events relating to an IMS session, such as when a session is being 9321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * recieved ("on ringing") or a call is outgoing ("on calling"). 9421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * <p>Many of these events are also received by {@link ImsCall.Listener}.</p> 9521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 9621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public static class Listener { 9721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 9821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when a request is sent out to initiate a new session 9921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * and 1xx response is received from the network. 10021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 10121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 10221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 10321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionProgressing(ImsCallSession session, 10421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsStreamMediaProfile profile) { 10521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // no-op 10621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 10721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 10821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 10921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session is established. 11021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 11121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 11221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 11321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionStarted(ImsCallSession session, 11421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallProfile profile) { 11521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // no-op 11621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 11721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 11821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 11921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session establishment is failed. 12021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 12121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 12221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param reasonInfo detailed reason of the session establishment failure 12321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 12421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionStartFailed(ImsCallSession session, 12521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 12621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 12721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 12821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 12921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session is terminated. 13021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 13121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 13221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param reasonInfo detailed reason of the session termination 13321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 13421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionTerminated(ImsCallSession session, 13521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 13621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 13721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 13821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 13921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session is in hold. 14021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 14121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 14221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 14321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionHeld(ImsCallSession session, 14421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallProfile profile) { 14521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 14621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 14721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 14821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session hold is failed. 14921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 15021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 15121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param reasonInfo detailed reason of the session hold failure 15221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 15321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionHoldFailed(ImsCallSession session, 15421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 15521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 15621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 15721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 15821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session hold is received from the remote user. 15921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 16021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 16121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 16221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionHoldReceived(ImsCallSession session, 16321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallProfile profile) { 16421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 16521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 16621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 16721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session resume is done. 16821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 16921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 17021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 17121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionResumed(ImsCallSession session, 17221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallProfile profile) { 17321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 17421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 17521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 17621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session resume is failed. 17721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 17821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 17921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param reasonInfo detailed reason of the session resume failure 18021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 18121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionResumeFailed(ImsCallSession session, 18221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 18321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 18421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 18521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 18621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session resume is received from the remote user. 18721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 18821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 18921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 19021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionResumeReceived(ImsCallSession session, 19121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallProfile profile) { 19221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 19321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 19421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 19521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session merge has been started. At this point, the {@code newSession} 19621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * represents the session which has been initiated to the IMS conference server for the 19721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * new merged conference. 19821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 19921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 20021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param newSession the session object that is merged with an active & hold session 20121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 20221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionMergeStarted(ImsCallSession session, 20321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallSession newSession, ImsCallProfile profile) { 20421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 20521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 20621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 20721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session merge is successful and the merged session is active. 20821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 20921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 21021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 21121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionMergeComplete(ImsCallSession session) { 21221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 21321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 21421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 21521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session merge has failed. 21621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 21721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 21821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param reasonInfo detailed reason of the call merge failure 21921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 22021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionMergeFailed(ImsCallSession session, 22121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 22221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 22321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 22421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 22521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session is updated (except for hold/unhold). 22621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 22721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 22821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 22921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionUpdated(ImsCallSession session, 23021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallProfile profile) { 23121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 23221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 23321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 23421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session update is failed. 23521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 23621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 23721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param reasonInfo detailed reason of the session update failure 23821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 23921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionUpdateFailed(ImsCallSession session, 24021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 24121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 24221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 24321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 24421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session update is received from the remote user. 24521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 24621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 24721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 24821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionUpdateReceived(ImsCallSession session, 24921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallProfile profile) { 25021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // no-op 25121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 25221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 25321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 25421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session is extended to the conference session. 25521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 25621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 25721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param newSession the session object that is extended to the conference 25821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * from the active session 25921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 26021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionConferenceExtended(ImsCallSession session, 26121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallSession newSession, ImsCallProfile profile) { 26221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 26321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 26421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 26521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the conference extension is failed. 26621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 26721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 26821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param reasonInfo detailed reason of the conference extension failure 26921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 27021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionConferenceExtendFailed(ImsCallSession session, 27121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 27221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 27321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 27421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 27521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the conference extension is received from the remote user. 27621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 27721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 27821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 27921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionConferenceExtendReceived(ImsCallSession session, 28021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallSession newSession, ImsCallProfile profile) { 28121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // no-op 28221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 28321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 28421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 28521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the invitation request of the participants is delivered to the conference 28621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * server. 28721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 28821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 28921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 29021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionInviteParticipantsRequestDelivered(ImsCallSession session) { 29121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // no-op 29221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 29321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 29421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 29521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the invitation request of the participants is failed. 29621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 29721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 29821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param reasonInfo detailed reason of the conference invitation failure 29921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 30021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionInviteParticipantsRequestFailed(ImsCallSession session, 30121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 30221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // no-op 30321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 30421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 30521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 30621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the removal request of the participants is delivered to the conference 30721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * server. 30821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 30921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 31021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 31121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionRemoveParticipantsRequestDelivered(ImsCallSession session) { 31221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // no-op 31321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 31421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 31521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 31621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the removal request of the participants is failed. 31721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 31821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 31921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param reasonInfo detailed reason of the conference removal failure 32021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 32121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionRemoveParticipantsRequestFailed(ImsCallSession session, 32221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 32321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // no-op 32421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 32521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 32621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 32721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the conference state is updated. 32821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 32921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 33021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 33121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionConferenceStateUpdated(ImsCallSession session, 33221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsConferenceState state) { 33321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // no-op 33421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 33521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 33621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 33721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the USSD message is received from the network. 33821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 33921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param mode mode of the USSD message (REQUEST / NOTIFY) 34021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param ussdMessage USSD message 34121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 34221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionUssdMessageReceived(ImsCallSession session, 34321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger int mode, String ussdMessage) { 34421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // no-op 34521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 34621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 34721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 34821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when session access technology changes 34921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 35021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session IMS session object 35121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param srcAccessTech original access technology 35221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param targetAccessTech new access technology 35321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param reasonInfo 35421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 35521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionHandover(ImsCallSession session, 35621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger int srcAccessTech, int targetAccessTech, 35721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 35821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // no-op 35921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 36021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 36121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 36221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when session access technology change fails 36321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 36421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session IMS session object 36521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param srcAccessTech original access technology 36621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param targetAccessTech new access technology 36721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param reasonInfo handover failure reason 36821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 36921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionHandoverFailed(ImsCallSession session, 37021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger int srcAccessTech, int targetAccessTech, 37121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 37221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // no-op 37321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 37421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 37521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 37621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when TTY mode of remote party changed 37721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 37821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session IMS session object 37921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param mode TTY mode of remote party 38021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 38121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionTtyModeReceived(ImsCallSession session, 38221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger int mode) { 38321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // no-op 38421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 38521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 38621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 38721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Notifies of a change to the multiparty state for this {@code ImsCallSession}. 38821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 38921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session The call session. 39021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param isMultiParty {@code true} if the session became multiparty, {@code false} 39121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * otherwise. 39221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 39321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionMultipartyStateChanged(ImsCallSession session, 39421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger boolean isMultiParty) { 39521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // no-op 39621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 39721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 39821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 39921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Called when the session supplementary service is received 40021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 40121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session the session object that carries out the IMS session 40221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 40321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionSuppServiceReceived(ImsCallSession session, 40421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsSuppServiceNotification suppServiceInfo) { 40521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 40621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 40721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 40821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private final IImsCallSession miSession; 40921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private boolean mClosed = false; 41021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private Listener mListener; 41121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 41221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public ImsCallSession(IImsCallSession iSession) { 41321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession = iSession; 41421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 41521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (iSession != null) { 41621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 41721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger iSession.setListener(new IImsCallSessionListenerProxy()); 41821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 41921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 42021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } else { 42121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mClosed = true; 42221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 42321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 42421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 42521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public ImsCallSession(IImsCallSession iSession, Listener listener) { 42621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger this(iSession); 42721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger setListener(listener); 42821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 42921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 43021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 43121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Closes this object. This object is not usable after being closed. 43221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 43321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public synchronized void close() { 43421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 43521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 43621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 43721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 43821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 43921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.close(); 44021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mClosed = true; 44121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 44221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 44321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 44421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 44521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 44621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Gets the call ID of the session. 44721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 44821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @return the call ID 44921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 45021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public String getCallId() { 45121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 45221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return null; 45321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 45421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 45521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 45621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return miSession.getCallId(); 45721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 45821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return null; 45921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 46021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 46121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 46221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 46321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Gets the call profile that this session is associated with 46421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 46521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @return the call profile that this session is associated with 46621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 46721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public ImsCallProfile getCallProfile() { 46821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 46921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return null; 47021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 47121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 47221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 47321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return miSession.getCallProfile(); 47421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 47521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return null; 47621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 47721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 47821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 47921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 48021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Gets the local call profile that this session is associated with 48121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 48221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @return the local call profile that this session is associated with 48321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 48421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public ImsCallProfile getLocalCallProfile() { 48521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 48621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return null; 48721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 48821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 48921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 49021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return miSession.getLocalCallProfile(); 49121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 49221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return null; 49321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 49421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 49521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 49621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 49721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Gets the remote call profile that this session is associated with 49821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 49921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @return the remote call profile that this session is associated with 50021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 50121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public ImsCallProfile getRemoteCallProfile() { 50221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 50321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return null; 50421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 50521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 50621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 50721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return miSession.getRemoteCallProfile(); 50821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 50921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return null; 51021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 51121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 51221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 51321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 51421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Gets the video call provider for the session. 51521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 51621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @return The video call provider. 51721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 51821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public IImsVideoCallProvider getVideoCallProvider() { 51921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 52021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return null; 52121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 52221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 52321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 52421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return miSession.getVideoCallProvider(); 52521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 52621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return null; 52721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 52821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 52921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 53021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 53121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Gets the value associated with the specified property of this session. 53221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 53321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @return the string value associated with the specified property 53421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 53521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public String getProperty(String name) { 53621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 53721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return null; 53821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 53921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 54021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 54121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return miSession.getProperty(name); 54221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 54321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return null; 54421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 54521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 54621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 54721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 54821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Gets the session state. 54921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * The value returned must be one of the states in {@link State}. 55021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 55121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @return the session state 55221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 55321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public int getState() { 55421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 55521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return State.INVALID; 55621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 55721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 55821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 55921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return miSession.getState(); 56021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 56121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return State.INVALID; 56221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 56321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 56421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 56521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 56621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Determines if the {@link ImsCallSession} is currently alive (e.g. not in a terminated or 56721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * closed state). 56821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 56921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @return {@code True} if the session is alive. 57021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 57121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public boolean isAlive() { 57221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 57321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return false; 57421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 57521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 57621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger int state = getState(); 57721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger switch (state) { 57821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case State.IDLE: 57921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case State.INITIATED: 58021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case State.NEGOTIATING: 58121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case State.ESTABLISHING: 58221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case State.ESTABLISHED: 58321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case State.RENEGOTIATING: 58421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case State.REESTABLISHING: 58521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return true; 58621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger default: 58721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return false; 58821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 58921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 59021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 59121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 59221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Gets the native IMS call session. 59321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @hide 59421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 59521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public IImsCallSession getSession() { 59621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return miSession; 59721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 59821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 59921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 60021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Checks if the session is in call. 60121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 60221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @return true if the session is in call 60321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 60421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public boolean isInCall() { 60521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 60621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return false; 60721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 60821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 60921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 61021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return miSession.isInCall(); 61121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 61221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return false; 61321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 61421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 61521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 61621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 61721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Sets the listener to listen to the session events. A {@link ImsCallSession} 61821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * can only hold one listener at a time. Subsequent calls to this method 61921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * override the previous listener. 62021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 62121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param listener to listen to the session events of this object 62221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 62321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void setListener(Listener listener) { 62421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener = listener; 62521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 62621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 62721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 62821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Mutes or unmutes the mic for the active call. 62921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 63021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param muted true if the call is muted, false otherwise 63121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 63221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void setMute(boolean muted) { 63321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 63421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 63521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 63621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 63721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 63821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.setMute(muted); 63921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 64021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 64121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 64221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 64321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 64421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Initiates an IMS call with the specified target and call profile. 64521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * The session listener is called back upon defined session events. 64621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * The method is only valid to call when the session state is in 64721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * {@link ImsCallSession.State#IDLE}. 64821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 64921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param callee dialed string to make the call to 65021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param profile call profile to make the call with the specified service type, 65121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * call type and media information 65221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Listener#callSessionStarted, Listener#callSessionStartFailed 65321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 65421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void start(String callee, ImsCallProfile profile) { 65521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 65621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 65721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 65821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 65921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 66021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.start(callee, profile); 66121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 66221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 66321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 66421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 66521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 66621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Initiates an IMS conference call with the specified target and call profile. 66721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * The session listener is called back upon defined session events. 66821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * The method is only valid to call when the session state is in 66921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * {@link ImsCallSession.State#IDLE}. 67021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 67121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param participants participant list to initiate an IMS conference call 67221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param profile call profile to make the call with the specified service type, 67321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * call type and media information 67421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Listener#callSessionStarted, Listener#callSessionStartFailed 67521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 67621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void start(String[] participants, ImsCallProfile profile) { 67721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 67821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 67921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 68021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 68121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 68221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.startConference(participants, profile); 68321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 68421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 68521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 68621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 68721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 68821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Accepts an incoming call or session update. 68921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 69021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param callType call type specified in {@link ImsCallProfile} to be answered 69121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param profile stream media profile {@link ImsStreamMediaProfile} to be answered 69221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Listener#callSessionStarted 69321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 69421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void accept(int callType, ImsStreamMediaProfile profile) { 69521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 69621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 69721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 69821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 69921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 70021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.accept(callType, profile); 70121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 70221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 70321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 70421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 70521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 70621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Rejects an incoming call or session update. 70721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 70821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param reason reason code to reject an incoming call 70921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Listener#callSessionStartFailed 71021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 71121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void reject(int reason) { 71221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 71321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 71421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 71521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 71621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 71721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.reject(reason); 71821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 71921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 72021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 72121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 72221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 72321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Terminates a call. 72421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 72521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Listener#callSessionTerminated 72621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 72721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void terminate(int reason) { 72821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 72921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 73021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 73121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 73221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 73321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.terminate(reason); 73421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 73521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 73621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 73721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 73821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 73921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Puts a call on hold. When it succeeds, {@link Listener#callSessionHeld} is called. 74021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 74121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param profile stream media profile {@link ImsStreamMediaProfile} to hold the call 74221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Listener#callSessionHeld, Listener#callSessionHoldFailed 74321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 74421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void hold(ImsStreamMediaProfile profile) { 74521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 74621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 74721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 74821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 74921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 75021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.hold(profile); 75121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 75221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 75321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 75421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 75521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 75621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Continues a call that's on hold. When it succeeds, 75721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * {@link Listener#callSessionResumed} is called. 75821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 75921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param profile stream media profile {@link ImsStreamMediaProfile} to resume the call 76021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Listener#callSessionResumed, Listener#callSessionResumeFailed 76121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 76221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void resume(ImsStreamMediaProfile profile) { 76321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 76421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 76521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 76621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 76721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 76821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.resume(profile); 76921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 77021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 77121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 77221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 77321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 77421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Merges the active & hold call. When it succeeds, 77521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * {@link Listener#callSessionMergeStarted} is called. 77621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 77721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Listener#callSessionMergeStarted , Listener#callSessionMergeFailed 77821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 77921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void merge() { 78021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 78121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 78221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 78321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 78421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 78521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.merge(); 78621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 78721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 78821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 78921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 79021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 79121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Updates the current call's properties (ex. call mode change: video upgrade / downgrade). 79221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 79321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param callType call type specified in {@link ImsCallProfile} to be updated 79421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param profile stream media profile {@link ImsStreamMediaProfile} to be updated 79521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Listener#callSessionUpdated, Listener#callSessionUpdateFailed 79621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 79721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void update(int callType, ImsStreamMediaProfile profile) { 79821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 79921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 80021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 80121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 80221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 80321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.update(callType, profile); 80421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 80521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 80621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 80721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 80821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 80921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Extends this call to the conference call with the specified recipients. 81021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 81121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param participants list to be invited to the conference call after extending the call 81221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Listener#callSessionConferenceExtended 81321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Listener#callSessionConferenceExtendFailed 81421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 81521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void extendToConference(String[] participants) { 81621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 81721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 81821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 81921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 82021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 82121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.extendToConference(participants); 82221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 82321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 82421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 82521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 82621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 82721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Requests the conference server to invite an additional participants to the conference. 82821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 82921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param participants list to be invited to the conference call 83021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Listener#callSessionInviteParticipantsRequestDelivered 83121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Listener#callSessionInviteParticipantsRequestFailed 83221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 83321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void inviteParticipants(String[] participants) { 83421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 83521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 83621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 83721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 83821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 83921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.inviteParticipants(participants); 84021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 84121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 84221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 84321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 84421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 84521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Requests the conference server to remove the specified participants from the conference. 84621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 84721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param participants participant list to be removed from the conference call 84821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Listener#callSessionRemoveParticipantsRequestDelivered 84921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Listener#callSessionRemoveParticipantsRequestFailed 85021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 85121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void removeParticipants(String[] participants) { 85221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 85321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 85421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 85521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 85621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 85721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.removeParticipants(participants); 85821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 85921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 86021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 86121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 86221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 86321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 86421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Sends a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2833</a>, 86521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * event 0 ~ 9 maps to decimal value 0 ~ 9, '*' to 10, '#' to 11, event 'A' ~ 'D' to 12 ~ 15, 86621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * and event flash to 16. Currently, event flash is not supported. 86721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 86821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param c the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs. 86921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 87021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void sendDtmf(char c, Message result) { 87121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 87221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 87321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 87421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 87521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 87621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.sendDtmf(c, result); 87721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 87821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 87921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 88021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 88121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 88221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Starts a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2833</a>, 88321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * event 0 ~ 9 maps to decimal value 0 ~ 9, '*' to 10, '#' to 11, event 'A' ~ 'D' to 12 ~ 15, 88421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * and event flash to 16. Currently, event flash is not supported. 88521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 88621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param c the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs. 88721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 88821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void startDtmf(char c) { 88921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 89021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 89121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 89221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 89321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 89421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.startDtmf(c); 89521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 89621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 89721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 89821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 89921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 90021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Stops a DTMF code. 90121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 90221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void stopDtmf() { 90321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 90421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 90521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 90621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 90721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 90821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.stopDtmf(); 90921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 91021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 91121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 91221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 91321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 91421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Sends an USSD message. 91521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 91621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param ussdMessage USSD message to send 91721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 91821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void sendUssd(String ussdMessage) { 91921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 92021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return; 92121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 92221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 92321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 92421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger miSession.sendUssd(ussdMessage); 92521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 92621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 92721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 92821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 92921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 93021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Determines if the session is multiparty. 93121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 93221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @return {@code True} if the session is multiparty. 93321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 93421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public boolean isMultiparty() { 93521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mClosed) { 93621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return false; 93721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 93821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 93921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 94021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return miSession.isMultiparty(); 94121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException e) { 94221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return false; 94321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 94421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 94521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 94621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 94721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * A listener type for receiving notification on IMS call session events. 94821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * When an event is generated for an {@link IImsCallSession}, 94921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * the application is notified by having one of the methods called on 95021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * the {@link IImsCallSessionListener}. 95121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 95221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private class IImsCallSessionListenerProxy extends ImsCallSessionListenerImplBase { 95321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 95421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Notifies the result of the basic session operation (setup / terminate). 95521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 95621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 95721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionProgressing(IImsCallSession session, 95821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsStreamMediaProfile profile) { 95921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 96021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionProgressing(ImsCallSession.this, profile); 96121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 96221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 96321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 96421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 96521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionStarted(IImsCallSession session, 96621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallProfile profile) { 96721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 96821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionStarted(ImsCallSession.this, profile); 96921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 97021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 97121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 97221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 97321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionStartFailed(IImsCallSession session, 97421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 97521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 97621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionStartFailed(ImsCallSession.this, reasonInfo); 97721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 97821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 97921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 98021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 98121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionTerminated(IImsCallSession session, 98221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 98321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 98421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionTerminated(ImsCallSession.this, reasonInfo); 98521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 98621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 98721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 98821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 98921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Notifies the result of the call hold/resume operation. 99021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 99121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 99221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionHeld(IImsCallSession session, 99321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallProfile profile) { 99421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 99521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionHeld(ImsCallSession.this, profile); 99621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 99721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 99821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 99921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 100021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionHoldFailed(IImsCallSession session, 100121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 100221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 100321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionHoldFailed(ImsCallSession.this, reasonInfo); 100421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 100521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 100621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 100721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 100821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionHoldReceived(IImsCallSession session, 100921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallProfile profile) { 101021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 101121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionHoldReceived(ImsCallSession.this, profile); 101221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 101321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 101421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 101521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 101621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionResumed(IImsCallSession session, 101721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallProfile profile) { 101821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 101921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionResumed(ImsCallSession.this, profile); 102021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 102121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 102221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 102321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 102421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionResumeFailed(IImsCallSession session, 102521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 102621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 102721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionResumeFailed(ImsCallSession.this, reasonInfo); 102821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 102921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 103021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 103121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 103221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionResumeReceived(IImsCallSession session, 103321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallProfile profile) { 103421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 103521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionResumeReceived(ImsCallSession.this, profile); 103621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 103721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 103821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 103921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 104021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Notifies the start of a call merge operation. 104121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 104221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session The call session. 104321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param newSession The merged call session. 104421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param profile The call profile. 104521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 104621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 104721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionMergeStarted(IImsCallSession session, 104821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger IImsCallSession newSession, ImsCallProfile profile) { 104921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // This callback can be used for future use to add additional 105021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // functionality that may be needed between conference start and complete 105121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger Log.d(TAG, "callSessionMergeStarted"); 105221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 105321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 105421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 105521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Notifies the successful completion of a call merge operation. 105621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 105721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param newSession The call session. 105821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 105921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 106021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionMergeComplete(IImsCallSession newSession) { 106121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 106221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (newSession != null) { 106321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // Check if the active session is the same session that was 106421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // active before the merge request was sent. 106521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallSession validActiveSession = ImsCallSession.this; 106621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 106721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (!Objects.equals(miSession.getCallId(), newSession.getCallId())) { 106821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // New session created after conference 106921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger validActiveSession = new ImsCallSession(newSession); 107021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 107121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException rex) { 107221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger Log.e(TAG, "callSessionMergeComplete: exception for getCallId!"); 107321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 107421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionMergeComplete(validActiveSession); 107521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } else { 107621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger // Session already exists. Hence no need to pass 107721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionMergeComplete(null); 107821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 107921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 108021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 108121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 108221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 108321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Notifies of a failure to perform a call merge operation. 108421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 108521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session The call session. 108621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param reasonInfo The merge failure reason. 108721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 108821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 108921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionMergeFailed(IImsCallSession session, 109021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 109121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 109221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionMergeFailed(ImsCallSession.this, reasonInfo); 109321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 109421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 109521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 109621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 109721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Notifies the result of call upgrade / downgrade or any other call updates. 109821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 109921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 110021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionUpdated(IImsCallSession session, 110121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallProfile profile) { 110221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 110321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionUpdated(ImsCallSession.this, profile); 110421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 110521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 110621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 110721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 110821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionUpdateFailed(IImsCallSession session, 110921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 111021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 111121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionUpdateFailed(ImsCallSession.this, reasonInfo); 111221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 111321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 111421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 111521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 111621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionUpdateReceived(IImsCallSession session, 111721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsCallProfile profile) { 111821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 111921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionUpdateReceived(ImsCallSession.this, profile); 112021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 112121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 112221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 112321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 112421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Notifies the result of conference extension. 112521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 112621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 112721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionConferenceExtended(IImsCallSession session, 112821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger IImsCallSession newSession, ImsCallProfile profile) { 112921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 113021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionConferenceExtended(ImsCallSession.this, 113121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger new ImsCallSession(newSession), profile); 113221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 113321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 113421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 113521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 113621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionConferenceExtendFailed(IImsCallSession session, 113721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 113821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 113921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionConferenceExtendFailed(ImsCallSession.this, reasonInfo); 114021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 114121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 114221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 114321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 114421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionConferenceExtendReceived(IImsCallSession session, 114521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger IImsCallSession newSession, ImsCallProfile profile) { 114621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 114721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionConferenceExtendReceived(ImsCallSession.this, 114821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger new ImsCallSession(newSession), profile); 114921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 115021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 115121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 115221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 115321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Notifies the result of the participant invitation / removal to/from 115421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * the conference session. 115521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 115621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 115721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionInviteParticipantsRequestDelivered(IImsCallSession session) { 115821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 115921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionInviteParticipantsRequestDelivered(ImsCallSession.this); 116021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 116121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 116221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 116321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 116421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionInviteParticipantsRequestFailed(IImsCallSession session, 116521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 116621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 116721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionInviteParticipantsRequestFailed(ImsCallSession.this, 116821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger reasonInfo); 116921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 117021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 117121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 117221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 117321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionRemoveParticipantsRequestDelivered(IImsCallSession session) { 117421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 117521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionRemoveParticipantsRequestDelivered(ImsCallSession.this); 117621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 117721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 117821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 117921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 118021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionRemoveParticipantsRequestFailed(IImsCallSession session, 118121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 118221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 118321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionRemoveParticipantsRequestFailed(ImsCallSession.this, 118421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger reasonInfo); 118521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 118621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 118721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 118821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 118921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Notifies the changes of the conference info. in the conference session. 119021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 119121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 119221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionConferenceStateUpdated(IImsCallSession session, 119321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsConferenceState state) { 119421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 119521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionConferenceStateUpdated(ImsCallSession.this, state); 119621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 119721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 119821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 119921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 120021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Notifies the incoming USSD message. 120121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 120221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 120321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionUssdMessageReceived(IImsCallSession session, 120421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger int mode, String ussdMessage) { 120521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 120621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionUssdMessageReceived(ImsCallSession.this, mode, ussdMessage); 120721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 120821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 120921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 121021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 121121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Notifies of handover information for this call 121221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 121321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 121421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionHandover(IImsCallSession session, 121521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger int srcAccessTech, int targetAccessTech, 121621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 121721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 121821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionHandover(ImsCallSession.this, srcAccessTech, 121921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger targetAccessTech, reasonInfo); 122021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 122121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 122221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 122321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 122421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Notifies of handover failure info for this call 122521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 122621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 122721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionHandoverFailed(IImsCallSession session, 122821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger int srcAccessTech, int targetAccessTech, 122921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsReasonInfo reasonInfo) { 123021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 123121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionHandoverFailed(ImsCallSession.this, srcAccessTech, 123221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger targetAccessTech, reasonInfo); 123321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 123421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 123521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 123621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 123721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Notifies the TTY mode received from remote party. 123821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 123921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 124021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionTtyModeReceived(IImsCallSession session, 124121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger int mode) { 124221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 124321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionTtyModeReceived(ImsCallSession.this, mode); 124421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 124521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 124621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 124721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 124821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Notifies of a change to the multiparty state for this {@code ImsCallSession}. 124921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 125021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param session The call session. 125121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param isMultiParty {@code true} if the session became multiparty, {@code false} 125221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * otherwise. 125321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 125421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionMultipartyStateChanged(IImsCallSession session, 125521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger boolean isMultiParty) { 125621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 125721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 125821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionMultipartyStateChanged(ImsCallSession.this, isMultiParty); 125921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 126021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 126121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 126221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 126321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void callSessionSuppServiceReceived(IImsCallSession session, 126421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger ImsSuppServiceNotification suppServiceInfo ) { 126521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mListener != null) { 126621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mListener.callSessionSuppServiceReceived(ImsCallSession.this, suppServiceInfo); 126721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 126821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 126921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 127021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 127121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 127221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 127321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Provides a string representation of the {@link ImsCallSession}. Primarily intended for 127421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * use in log statements. 127521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 127621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @return String representation of session. 127721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 127821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 127921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public String toString() { 128021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger StringBuilder sb = new StringBuilder(); 128121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger sb.append("[ImsCallSession objId:"); 128221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger sb.append(System.identityHashCode(this)); 128321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger sb.append(" state:"); 128421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger sb.append(State.toString(getState())); 128521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger sb.append(" callId:"); 128621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger sb.append(getCallId()); 128721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger sb.append("]"); 128821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return sb.toString(); 128921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 129021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger} 1291