blob: b1f2d3287dbe91b669f9475f454be1041c234c05 [file] [log] [blame]
Wink Savillef8458ff2014-06-25 16:08:02 -07001/*
2 * Copyright (c) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.ims.internal;
18
Libin.Tang@motorola.comc47b18f2014-08-23 18:12:51 -050019import android.os.Message;
Wink Savillef8458ff2014-06-25 16:08:02 -070020import com.android.ims.ImsCallProfile;
21import com.android.ims.ImsStreamMediaProfile;
22import com.android.ims.internal.IImsCallSessionListener;
Andrew Lee752217b2014-08-08 01:40:14 -070023import com.android.ims.internal.IImsVideoCallProvider;
Wink Savillef8458ff2014-06-25 16:08:02 -070024
25/**
26 * An IMS session that is associated with a SIP dialog which is established from/to
27 * INVITE request or a mid-call transaction to control the session.
28 * {@hide}
29 */
30interface IImsCallSession {
31 /**
32 * Closes the object. This object is not usable after being closed.
33 */
34 void close();
35
36 /**
37 * Gets the call ID of the session.
38 *
39 * @return the call ID
40 */
41 String getCallId();
42
43 /**
44 * Gets the call profile that this session is associated with
45 *
46 * @return the call profile that this session is associated with
47 */
48 ImsCallProfile getCallProfile();
49
50 /**
51 * Gets the local call profile that this session is associated with
52 *
53 * @return the local call profile that this session is associated with
54 */
55 ImsCallProfile getLocalCallProfile();
56
57 /**
Shriram Ganesh482e6da2014-10-13 11:31:50 -070058 * Gets the remote call profile that this session is associated with
59 *
60 * @return the remote call profile that this session is associated with
61 */
62 ImsCallProfile getRemoteCallProfile();
63
64 /**
Wink Savillef8458ff2014-06-25 16:08:02 -070065 * Gets the value associated with the specified property of this session.
66 *
67 * @return the string value associated with the specified property
68 */
69 String getProperty(String name);
70
71 /**
72 * Gets the session state. The value returned must be one of the states in
73 * {@link ImsCallSession#State}.
74 *
75 * @return the session state
76 */
77 int getState();
78
79 /**
80 * Checks if the session is in a call.
81 *
82 * @return true if the session is in a call
83 */
84 boolean isInCall();
85
86 /**
87 * Sets the listener to listen to the session events. A {@link IImsCallSession}
88 * can only hold one listener at a time. Subsequent calls to this method
89 * override the previous listener.
90 *
91 * @param listener to listen to the session events of this object
92 */
93 void setListener(in IImsCallSessionListener listener);
94
95 /**
96 * Mutes or unmutes the mic for the active call.
97 *
98 * @param muted true if the call is muted, false otherwise
99 */
100 void setMute(boolean muted);
101
102 /**
103 * Initiates an IMS call with the specified target and call profile.
104 * The session listener is called back upon defined session events.
105 * The method is only valid to call when the session state is in
106 * {@link ImsCallSession#State#IDLE}.
107 *
108 * @param callee dialed string to make the call to
109 * @param profile call profile to make the call with the specified service type,
110 * call type and media information
111 * @see Listener#callSessionStarted, Listener#callSessionStartFailed
112 */
113 void start(String callee, in ImsCallProfile profile);
114
115 /**
116 * Initiates an IMS call with the specified participants and call profile.
117 * The session listener is called back upon defined session events.
118 * The method is only valid to call when the session state is in
119 * {@link ImsCallSession#State#IDLE}.
120 *
121 * @param participants participant list to initiate an IMS conference call
122 * @param profile call profile to make the call with the specified service type,
123 * call type and media information
124 * @see Listener#callSessionStarted, Listener#callSessionStartFailed
125 */
126 void startConference(in String[] participants, in ImsCallProfile profile);
127
128 /**
129 * Accepts an incoming call or session update.
130 *
131 * @param callType call type specified in {@link ImsCallProfile} to be answered
132 * @param profile stream media profile {@link ImsStreamMediaProfile} to be answered
133 * @see Listener#callSessionStarted
134 */
135 void accept(int callType, in ImsStreamMediaProfile profile);
136
137 /**
138 * Rejects an incoming call or session update.
139 *
140 * @param reason reason code to reject an incoming call
141 * @see Listener#callSessionStartFailed
142 */
143 void reject(int reason);
144
145 /**
146 * Terminates a call.
147 *
148 * @see Listener#callSessionTerminated
149 */
150 void terminate(int reason);
151
152 /**
153 * Puts a call on hold. When it succeeds, {@link Listener#callSessionHeld} is called.
154 *
155 * @param profile stream media profile {@link ImsStreamMediaProfile} to hold the call
156 * @see Listener#callSessionHeld, Listener#callSessionHoldFailed
157 */
158 void hold(in ImsStreamMediaProfile profile);
159
160 /**
161 * Continues a call that's on hold. When it succeeds, {@link Listener#callSessionResumed}
162 * is called.
163 *
164 * @param profile stream media profile {@link ImsStreamMediaProfile} to resume the call
165 * @see Listener#callSessionResumed, Listener#callSessionResumeFailed
166 */
167 void resume(in ImsStreamMediaProfile profile);
168
169 /**
Tyler Gunnf764e802014-10-24 14:06:40 -0700170 * Merges the active & hold call. When the merge starts,
171 * {@link Listener#callSessionMergeStarted} is called.
172 * {@link Listener#callSessionMergeComplete} is called if the merge is successful, and
173 * {@link Listener#callSessionMergeFailed} is called if the merge fails.
Wink Savillef8458ff2014-06-25 16:08:02 -0700174 *
Tyler Gunnf764e802014-10-24 14:06:40 -0700175 * @see Listener#callSessionMergeStarted, Listener#callSessionMergeComplete,
176 * Listener#callSessionMergeFailed
Wink Savillef8458ff2014-06-25 16:08:02 -0700177 */
178 void merge();
179
180 /**
181 * Updates the current call's properties (ex. call mode change: video upgrade / downgrade).
182 *
183 * @param callType call type specified in {@link ImsCallProfile} to be updated
184 * @param profile stream media profile {@link ImsStreamMediaProfile} to be updated
185 * @see Listener#callSessionUpdated, Listener#callSessionUpdateFailed
186 */
187 void update(int callType, in ImsStreamMediaProfile profile);
188
189 /**
190 * Extends this call to the conference call with the specified recipients.
191 *
Wink Saville0a493e82014-06-26 04:50:00 -0700192 * @param participants participant list to be invited to the conference call after extending the call
Wink Savillef8458ff2014-06-25 16:08:02 -0700193 * @see Listener#sessionConferenceExtened, Listener#sessionConferenceExtendFailed
194 */
195 void extendToConference(in String[] participants);
196
197 /**
198 * Requests the conference server to invite an additional participants to the conference.
199 *
Wink Saville0a493e82014-06-26 04:50:00 -0700200 * @param participants participant list to be invited to the conference call
Wink Savillef8458ff2014-06-25 16:08:02 -0700201 * @see Listener#sessionInviteParticipantsRequestDelivered,
202 * Listener#sessionInviteParticipantsRequestFailed
203 */
204 void inviteParticipants(in String[] participants);
205
206 /**
207 * Requests the conference server to remove the specified participants from the conference.
208 *
209 * @param participants participant list to be removed from the conference call
210 * @see Listener#sessionRemoveParticipantsRequestDelivered,
211 * Listener#sessionRemoveParticipantsRequestFailed
212 */
213 void removeParticipants(in String[] participants);
214
215 /**
216 * Sends a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2833</a>,
217 * event 0 ~ 9 maps to decimal value 0 ~ 9, '*' to 10, '#' to 11, event 'A' ~ 'D' to 12 ~ 15,
218 * and event flash to 16. Currently, event flash is not supported.
219 *
Libin.Tang@motorola.comc47b18f2014-08-23 18:12:51 -0500220 * @param c the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs.
221 * @param result.
Wink Savillef8458ff2014-06-25 16:08:02 -0700222 */
Libin.Tang@motorola.comc47b18f2014-08-23 18:12:51 -0500223 void sendDtmf(char c, in Message result);
Wink Savillef8458ff2014-06-25 16:08:02 -0700224
225 /**
Uma Maheswari Ramalingama8af6bb2014-12-05 16:39:57 -0800226 * Start a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2833</a>,
227 * event 0 ~ 9 maps to decimal value 0 ~ 9, '*' to 10, '#' to 11, event 'A' ~ 'D' to 12 ~ 15,
228 * and event flash to 16. Currently, event flash is not supported.
229 *
230 * @param c the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs.
231 */
232 void startDtmf(char c);
233
234 /**
235 * Stop a DTMF code.
236 */
237 void stopDtmf();
238
239 /**
Wink Savillef8458ff2014-06-25 16:08:02 -0700240 * Sends an USSD message.
241 *
242 * @param ussdMessage USSD message to send
243 */
244 void sendUssd(String ussdMessage);
Andrew Lee752217b2014-08-08 01:40:14 -0700245
246 /**
247 * Returns a binder for the video call provider implementation contained within the IMS service
248 * process. This binder is used by the VideoCallProvider subclass in Telephony which
249 * intermediates between the propriety implementation and Telecomm/InCall.
250 */
251 IImsVideoCallProvider getVideoCallProvider();
Tyler Gunn6a7ed1e2014-10-22 11:26:40 -0700252
253 /**
254 * Determines if the current session is multiparty.
255 * @return {@code True} if the session is multiparty.
256 */
257 boolean isMultiparty();
Wink Savillef8458ff2014-06-25 16:08:02 -0700258}