| /* |
| * Copyright (C) 2010 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.net.sip; |
| |
| import android.net.rtp.AudioGroup; |
| import android.net.rtp.AudioStream; |
| import android.os.Message; |
| |
| import javax.sip.SipException; |
| |
| /** |
| * Interface for making audio calls over SIP. |
| * @hide |
| */ |
| public interface SipAudioCall { |
| /** Listener class for all event callbacks. */ |
| public interface Listener { |
| /** |
| * Called when the call object is ready to make another call. |
| * |
| * @param call the call object that is ready to make another call |
| */ |
| void onReadyToCall(SipAudioCall call); |
| |
| /** |
| * Called when a request is sent out to initiate a new call. |
| * |
| * @param call the call object that carries out the audio call |
| */ |
| void onCalling(SipAudioCall call); |
| |
| /** |
| * Called when a new call comes in. |
| * |
| * @param call the call object that carries out the audio call |
| * @param caller the SIP profile of the caller |
| */ |
| void onRinging(SipAudioCall call, SipProfile caller); |
| |
| /** |
| * Called when a RINGING response is received for the INVITE request sent |
| * |
| * @param call the call object that carries out the audio call |
| */ |
| void onRingingBack(SipAudioCall call); |
| |
| /** |
| * Called when the session is established. |
| * |
| * @param call the call object that carries out the audio call |
| */ |
| void onCallEstablished(SipAudioCall call); |
| |
| /** |
| * Called when the session is terminated. |
| * |
| * @param call the call object that carries out the audio call |
| */ |
| void onCallEnded(SipAudioCall call); |
| |
| /** |
| * Called when the peer is busy during session initialization. |
| * |
| * @param call the call object that carries out the audio call |
| */ |
| void onCallBusy(SipAudioCall call); |
| |
| /** |
| * Called when the call is on hold. |
| * |
| * @param call the call object that carries out the audio call |
| */ |
| void onCallHeld(SipAudioCall call); |
| |
| /** |
| * Called when an error occurs. |
| * |
| * @param call the call object that carries out the audio call |
| * @param errorMessage error message |
| */ |
| void onError(SipAudioCall call, String errorMessage); |
| } |
| |
| /** |
| * The adapter class for {@link SipAudioCall#Listener}. The default |
| * implementation of all callback methods is no-op. |
| */ |
| public class Adapter implements Listener { |
| protected void onChanged(SipAudioCall call) { |
| } |
| public void onReadyToCall(SipAudioCall call) { |
| onChanged(call); |
| } |
| public void onCalling(SipAudioCall call) { |
| onChanged(call); |
| } |
| public void onRinging(SipAudioCall call, SipProfile caller) { |
| onChanged(call); |
| } |
| public void onRingingBack(SipAudioCall call) { |
| onChanged(call); |
| } |
| public void onCallEstablished(SipAudioCall call) { |
| onChanged(call); |
| } |
| public void onCallEnded(SipAudioCall call) { |
| onChanged(call); |
| } |
| public void onCallBusy(SipAudioCall call) { |
| onChanged(call); |
| } |
| public void onCallHeld(SipAudioCall call) { |
| onChanged(call); |
| } |
| public void onError(SipAudioCall call, String errorMessage) { |
| onChanged(call); |
| } |
| } |
| |
| /** |
| * Sets the listener to listen to the audio call events. The method calls |
| * {@link #setListener(Listener, false)}. |
| * |
| * @param listener to listen to the audio call events of this object |
| * @see #setListener(Listener, boolean) |
| */ |
| void setListener(Listener listener); |
| |
| /** |
| * Sets the listener to listen to the audio call events. A |
| * {@link SipAudioCall} can only hold one listener at a time. Subsequent |
| * calls to this method override the previous listener. |
| * |
| * @param listener to listen to the audio call events of this object |
| * @param callbackImmediately set to true if the caller wants to be called |
| * back immediately on the current state |
| */ |
| void setListener(Listener listener, boolean callbackImmediately); |
| |
| /** |
| * Closes this object. The object is not usable after being closed. |
| */ |
| void close(); |
| |
| /** |
| * Initiates an audio call to the specified profile. |
| * |
| * @param callee the SIP profile to make the call to |
| * @param sipManager the {@link SipManager} object to help make call with |
| */ |
| void makeCall(SipProfile callee, SipManager sipManager) throws SipException; |
| |
| /** |
| * Attaches an incoming call to this call object. |
| * |
| * @param session the session that receives the incoming call |
| * @param sdp the session description of the incoming call |
| */ |
| void attachCall(ISipSession session, SdpSessionDescription sdp) |
| throws SipException; |
| |
| /** Ends a call. */ |
| void endCall() throws SipException; |
| |
| /** |
| * Puts a call on hold. When succeeds, |
| * {@link #Listener#onCallHeld(SipAudioCall)} is called. |
| */ |
| void holdCall() throws SipException; |
| |
| /** Answers a call. */ |
| void answerCall() throws SipException; |
| |
| /** |
| * Continues a call that's on hold. When succeeds, |
| * {@link #Listener#onCallEstablished(SipAudioCall)} is called. |
| */ |
| void continueCall() throws SipException; |
| |
| /** Puts the device to in-call mode. */ |
| void setInCallMode(); |
| |
| /** Puts the device to speaker mode. */ |
| void setSpeakerMode(); |
| |
| /** Toggles mute. */ |
| void toggleMute(); |
| |
| /** |
| * Checks if the call is on hold. |
| * |
| * @return true if the call is on hold |
| */ |
| boolean isOnHold(); |
| |
| /** |
| * Checks if the call is muted. |
| * |
| * @return true if the call is muted |
| */ |
| boolean isMuted(); |
| |
| /** |
| * Sends a DTMF code. |
| * |
| * @param code the DTMF code to send |
| */ |
| void sendDtmf(int code); |
| |
| /** |
| * Sends a DTMF code. |
| * |
| * @param code the DTMF code to send |
| * @param result the result message to send when done |
| */ |
| void sendDtmf(int code, Message result); |
| |
| /** |
| * Gets the {@link AudioStream} object used in this call. The object |
| * represents the RTP stream that carries the audio data to and from the |
| * peer. The object may not be created before the call is established. And |
| * it is undefined after the call ends or the {@link #close} method is |
| * called. |
| * |
| * @return the {@link AudioStream} object or null if the RTP stream has not |
| * yet been set up |
| */ |
| AudioStream getAudioStream(); |
| |
| /** |
| * Gets the {@link AudioGroup} object which the {@link AudioStream} object |
| * joins. The group object may not exist before the call is established. |
| * Also, the {@code AudioStream} may change its group during a call (e.g., |
| * after the call is held/un-held). Finally, the {@code AudioGroup} object |
| * returned by this method is undefined after the call ends or the |
| * {@link #close} method is called. |
| * |
| * @return the {@link AudioGroup} object or null if the RTP stream has not |
| * yet been set up |
| * @see #getAudioStream |
| */ |
| AudioGroup getAudioGroup(); |
| |
| /** |
| * Checks if the call is established. |
| * |
| * @return true if the call is established |
| */ |
| boolean isInCall(); |
| |
| /** |
| * Gets the local SIP profile. |
| * |
| * @return the local SIP profile |
| */ |
| SipProfile getLocalProfile(); |
| |
| /** |
| * Gets the peer's SIP profile. |
| * |
| * @return the peer's SIP profile |
| */ |
| SipProfile getPeerProfile(); |
| |
| /** |
| * Gets the state of the {@link ISipSession} that carries this call. |
| * |
| * @return the session state |
| */ |
| SipSessionState getState(); |
| |
| /** |
| * Gets the {@link ISipSession} that carries this call. |
| * |
| * @return the session object that carries this call |
| */ |
| ISipSession getSipSession(); |
| |
| /** |
| * Enables/disables the ring-back tone. |
| * |
| * @param enabled true to enable; false to disable |
| */ |
| void setRingbackToneEnabled(boolean enabled); |
| |
| /** |
| * Enables/disables the ring tone. |
| * |
| * @param enabled true to enable; false to disable |
| */ |
| void setRingtoneEnabled(boolean enabled); |
| } |