1 /* 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 17 package com.android.ims.internal; 18 19 import android.os.Message; 20 import android.telephony.ims.aidl.IImsCallSessionListener; 21 22 import android.telephony.ims.ImsCallProfile; 23 import android.telephony.ims.ImsStreamMediaProfile; 24 import com.android.ims.internal.IImsVideoCallProvider; 25 26 /** 27 * An IMS session that is associated with a SIP dialog which is established from/to 28 * INVITE request or a mid-call transaction to control the session. 29 * {@hide} 30 */ 31 interface IImsCallSession { 32 /** 33 * Closes the object. This object is not usable after being closed. 34 */ close()35 void close(); 36 37 /** 38 * Gets the call ID of the session. 39 * 40 * @return the call ID 41 */ getCallId()42 String getCallId(); 43 44 /** 45 * Gets the call profile that this session is associated with 46 * 47 * @return the call profile that this session is associated with 48 */ getCallProfile()49 ImsCallProfile getCallProfile(); 50 51 /** 52 * Gets the local call profile that this session is associated with 53 * 54 * @return the local call profile that this session is associated with 55 */ getLocalCallProfile()56 ImsCallProfile getLocalCallProfile(); 57 58 /** 59 * Gets the remote call profile that this session is associated with 60 * 61 * @return the remote call profile that this session is associated with 62 */ getRemoteCallProfile()63 ImsCallProfile getRemoteCallProfile(); 64 65 /** 66 * Gets the value associated with the specified property of this session. 67 * 68 * @return the string value associated with the specified property 69 */ getProperty(String name)70 String getProperty(String name); 71 72 /** 73 * Gets the session state. The value returned must be one of the states in 74 * {@link ImsCallSession#State}. 75 * 76 * @return the session state 77 */ getState()78 int getState(); 79 80 /** 81 * Checks if the session is in a call. 82 * 83 * @return true if the session is in a call 84 */ isInCall()85 boolean isInCall(); 86 87 /** 88 * Sets the listener to listen to the session events. A {@link IImsCallSession} 89 * can only hold one listener at a time. Subsequent calls to this method 90 * override the previous listener. 91 * 92 * @param listener to listen to the session events of this object 93 */ setListener(in IImsCallSessionListener listener)94 void setListener(in IImsCallSessionListener listener); 95 96 /** 97 * Mutes or unmutes the mic for the active call. 98 * 99 * @param muted true if the call is muted, false otherwise 100 */ setMute(boolean muted)101 void setMute(boolean muted); 102 103 /** 104 * Initiates an IMS call with the specified target and call profile. 105 * The session listener is called back upon defined session events. 106 * The method is only valid to call when the session state is in 107 * {@link ImsCallSession#State#IDLE}. 108 * 109 * @param callee dialed string to make the call to 110 * @param profile call profile to make the call with the specified service type, 111 * call type and media information 112 * @see Listener#callSessionStarted, Listener#callSessionStartFailed 113 */ start(String callee, in ImsCallProfile profile)114 void start(String callee, in ImsCallProfile profile); 115 116 /** 117 * Initiates an IMS call with the specified participants and call profile. 118 * The session listener is called back upon defined session events. 119 * The method is only valid to call when the session state is in 120 * {@link ImsCallSession#State#IDLE}. 121 * 122 * @param participants participant list to initiate an IMS conference call 123 * @param profile call profile to make the call with the specified service type, 124 * call type and media information 125 * @see Listener#callSessionStarted, Listener#callSessionStartFailed 126 */ startConference(in String[] participants, in ImsCallProfile profile)127 void startConference(in String[] participants, in ImsCallProfile profile); 128 129 /** 130 * Accepts an incoming call or session update. 131 * 132 * @param callType call type specified in {@link ImsCallProfile} to be answered 133 * @param profile stream media profile {@link ImsStreamMediaProfile} to be answered 134 * @see Listener#callSessionStarted 135 */ accept(int callType, in ImsStreamMediaProfile profile)136 void accept(int callType, in ImsStreamMediaProfile profile); 137 138 /** 139 * Deflects an incoming call. 140 * 141 * @param deflectNumber number to deflect the call 142 */ deflect(String deflectNumber)143 void deflect(String deflectNumber); 144 145 /** 146 * Rejects an incoming call or session update. 147 * 148 * @param reason reason code to reject an incoming call 149 * @see Listener#callSessionStartFailed 150 */ reject(int reason)151 void reject(int reason); 152 153 /** 154 * Terminates a call. 155 * 156 * @see Listener#callSessionTerminated 157 */ terminate(int reason)158 void terminate(int reason); 159 160 /** 161 * Puts a call on hold. When it succeeds, {@link Listener#callSessionHeld} is called. 162 * 163 * @param profile stream media profile {@link ImsStreamMediaProfile} to hold the call 164 * @see Listener#callSessionHeld, Listener#callSessionHoldFailed 165 */ hold(in ImsStreamMediaProfile profile)166 void hold(in ImsStreamMediaProfile profile); 167 168 /** 169 * Continues a call that's on hold. When it succeeds, {@link Listener#callSessionResumed} 170 * is called. 171 * 172 * @param profile stream media profile {@link ImsStreamMediaProfile} to resume the call 173 * @see Listener#callSessionResumed, Listener#callSessionResumeFailed 174 */ resume(in ImsStreamMediaProfile profile)175 void resume(in ImsStreamMediaProfile profile); 176 177 /** 178 * Merges the active & hold call. When the merge starts, 179 * {@link Listener#callSessionMergeStarted} is called. 180 * {@link Listener#callSessionMergeComplete} is called if the merge is successful, and 181 * {@link Listener#callSessionMergeFailed} is called if the merge fails. 182 * 183 * @see Listener#callSessionMergeStarted, Listener#callSessionMergeComplete, 184 * Listener#callSessionMergeFailed 185 */ merge()186 void merge(); 187 188 /** 189 * Updates the current call's properties (ex. call mode change: video upgrade / downgrade). 190 * 191 * @param callType call type specified in {@link ImsCallProfile} to be updated 192 * @param profile stream media profile {@link ImsStreamMediaProfile} to be updated 193 * @see Listener#callSessionUpdated, Listener#callSessionUpdateFailed 194 */ update(int callType, in ImsStreamMediaProfile profile)195 void update(int callType, in ImsStreamMediaProfile profile); 196 197 /** 198 * Extends this call to the conference call with the specified recipients. 199 * 200 * @param participants participant list to be invited to the conference call after extending the call 201 * @see Listener#sessionConferenceExtened, Listener#sessionConferenceExtendFailed 202 */ extendToConference(in String[] participants)203 void extendToConference(in String[] participants); 204 205 /** 206 * Requests the conference server to invite an additional participants to the conference. 207 * 208 * @param participants participant list to be invited to the conference call 209 * @see Listener#sessionInviteParticipantsRequestDelivered, 210 * Listener#sessionInviteParticipantsRequestFailed 211 */ inviteParticipants(in String[] participants)212 void inviteParticipants(in String[] participants); 213 214 /** 215 * Requests the conference server to remove the specified participants from the conference. 216 * 217 * @param participants participant list to be removed from the conference call 218 * @see Listener#sessionRemoveParticipantsRequestDelivered, 219 * Listener#sessionRemoveParticipantsRequestFailed 220 */ removeParticipants(in String[] participants)221 void removeParticipants(in String[] participants); 222 223 /** 224 * Sends a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2833</a>, 225 * event 0 ~ 9 maps to decimal value 0 ~ 9, '*' to 10, '#' to 11, event 'A' ~ 'D' to 12 ~ 15, 226 * and event flash to 16. Currently, event flash is not supported. 227 * 228 * @param c the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs. 229 * @param result. 230 */ sendDtmf(char c, in Message result)231 void sendDtmf(char c, in Message result); 232 233 /** 234 * Start a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2833</a>, 235 * event 0 ~ 9 maps to decimal value 0 ~ 9, '*' to 10, '#' to 11, event 'A' ~ 'D' to 12 ~ 15, 236 * and event flash to 16. Currently, event flash is not supported. 237 * 238 * @param c the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs. 239 */ startDtmf(char c)240 void startDtmf(char c); 241 242 /** 243 * Stop a DTMF code. 244 */ stopDtmf()245 void stopDtmf(); 246 247 /** 248 * Sends an USSD message. 249 * 250 * @param ussdMessage USSD message to send 251 */ sendUssd(String ussdMessage)252 void sendUssd(String ussdMessage); 253 254 /** 255 * Returns a binder for the video call provider implementation contained within the IMS service 256 * process. This binder is used by the VideoCallProvider subclass in Telephony which 257 * intermediates between the propriety implementation and Telecomm/InCall. 258 */ getVideoCallProvider()259 IImsVideoCallProvider getVideoCallProvider(); 260 261 /** 262 * Determines if the current session is multiparty. 263 * @return {@code True} if the session is multiparty. 264 */ isMultiparty()265 boolean isMultiparty(); 266 267 /** 268 * Device issues RTT modify request 269 * @param toProfile The profile with requested changes made 270 */ sendRttModifyRequest(in ImsCallProfile toProfile)271 void sendRttModifyRequest(in ImsCallProfile toProfile); 272 273 /* 274 * Device responds to Remote RTT modify request 275 * @param status true : Accepted the request 276 * false : Declined the request 277 */ sendRttModifyResponse(in boolean status)278 void sendRttModifyResponse(in boolean status); 279 280 /* 281 * Device sends RTT message 282 * @param rttMessage RTT message to be sent 283 */ sendRttMessage(in String rttMessage)284 void sendRttMessage(in String rttMessage); 285 } 286