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