blob: 38566fe6d811fa765245fe8e24bcbc131a0edc8c [file] [log] [blame]
/*
* Copyright (C) 2018 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.telephony.ims.compat.stub;
import android.os.Message;
import android.os.RemoteException;
import android.telephony.CallQuality;
import android.telephony.ims.ImsCallProfile;
import android.telephony.ims.ImsCallSession;
import android.telephony.ims.ImsConferenceState;
import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.ImsStreamMediaProfile;
import android.telephony.ims.ImsSuppServiceNotification;
import android.telephony.ims.aidl.IImsCallSessionListener;
import com.android.ims.internal.IImsCallSession;
import com.android.ims.internal.IImsVideoCallProvider;
/**
* Compat implementation of ImsCallSessionImplBase for older implementations.
*
* DO NOT remove or change the existing APIs, only add new ones to this Base implementation or you
* will break other implementations of ImsCallSession maintained by other ImsServices.
*
* @hide
*/
public class ImsCallSessionImplBase extends IImsCallSession.Stub {
@Override
// convert to old implementation of listener
public final void setListener(IImsCallSessionListener listener)
throws RemoteException {
setListener(new ImsCallSessionListenerConverter(listener));
}
/**
* Sets the listener to listen to the session events. An {@link ImsCallSession}
* can only hold one listener at a time. Subsequent calls to this method
* override the previous listener.
*
* @param listener to listen to the session events of this object
*/
public void setListener(com.android.ims.internal.IImsCallSessionListener listener) {
}
/**
* Closes the object. This {@link ImsCallSessionImplBase} is not usable after being closed.
*/
@Override
public void close() {
}
/**
* @return A String containing the unique call ID of this {@link ImsCallSessionImplBase}.
*/
@Override
public String getCallId() {
return null;
}
/**
* @return The {@link ImsCallProfile} that this {@link ImsCallSessionImplBase} is associated
* with.
*/
@Override
public ImsCallProfile getCallProfile() {
return null;
}
/**
* @return The local {@link ImsCallProfile} that this {@link ImsCallSessionImplBase} is
* associated with.
*/
@Override
public ImsCallProfile getLocalCallProfile() {
return null;
}
/**
* @return The remote {@link ImsCallProfile} that this {@link ImsCallSessionImplBase} is
* associated with.
*/
@Override
public ImsCallProfile getRemoteCallProfile() {
return null;
}
/**
* @param name The String extra key.
* @return The string extra value associated with the specified property.
*/
@Override
public String getProperty(String name) {
return null;
}
/**
* @return The {@link ImsCallSessionImplBase} state.
*/
@Override
public int getState() {
return -1;
}
/**
* @return true if the {@link ImsCallSessionImplBase} is in a call, false otherwise.
*/
@Override
public boolean isInCall() {
return false;
}
/**
* Mutes or unmutes the mic for the active call.
*
* @param muted true if the call should be muted, false otherwise.
*/
@Override
public void setMute(boolean muted) {
}
/**
* Initiates an IMS call with the specified number and call profile.
* The session listener set in {@link #setListener(IImsCallSessionListener)} is called back upon
* defined session events.
* Only valid to call when the session state is in
* {@link ImsCallSession.State#IDLE}.
*
* @param callee dialed string to make the call to
* @param profile call profile to make the call with the specified service type,
* call type and media information
* @see {@link ImsCallSession.Listener#callSessionStarted},
* {@link ImsCallSession.Listener#callSessionStartFailed}
*/
@Override
public void start(String callee, ImsCallProfile profile) {
}
/**
* Initiates an IMS call with the specified participants and call profile.
* The session listener set in {@link #setListener(IImsCallSessionListener)} is called back upon
* defined session events.
* The method is only valid to call when the session state is in
* {@link ImsCallSession.State#IDLE}.
*
* @param participants participant list to initiate an IMS conference call
* @param profile call profile to make the call with the specified service type,
* call type and media information
* @see {@link ImsCallSession.Listener#callSessionStarted},
* {@link ImsCallSession.Listener#callSessionStartFailed}
*/
@Override
public void startConference(String[] participants, ImsCallProfile profile) {
}
/**
* Accepts an incoming call or session update.
*
* @param callType call type specified in {@link ImsCallProfile} to be answered
* @param profile stream media profile {@link ImsStreamMediaProfile} to be answered
* @see {@link ImsCallSession.Listener#callSessionStarted}
*/
@Override
public void accept(int callType, ImsStreamMediaProfile profile) {
}
/**
* Deflects an incoming call.
*
* @param deflectNumber number to deflect the call
*/
@Override
public void deflect(String deflectNumber) {
}
/**
* Rejects an incoming call or session update.
*
* @param reason reason code to reject an incoming call, defined in {@link ImsReasonInfo}.
* {@link ImsCallSession.Listener#callSessionStartFailed}
*/
@Override
public void reject(int reason) {
}
/**
* Terminates a call.
*
* @param reason reason code to terminate a call, defined in {@link ImsReasonInfo}.
*
* @see {@link ImsCallSession.Listener#callSessionTerminated}
*/
@Override
public void terminate(int reason) {
}
/**
* Puts a call on hold. When it succeeds, {@link ImsCallSession.Listener#callSessionHeld} is
* called.
*
* @param profile stream media profile {@link ImsStreamMediaProfile} to hold the call
* @see {@link ImsCallSession.Listener#callSessionHeld},
* {@link ImsCallSession.Listener#callSessionHoldFailed}
*/
@Override
public void hold(ImsStreamMediaProfile profile) {
}
/**
* Continues a call that's on hold. When it succeeds,
* {@link ImsCallSession.Listener#callSessionResumed} is called.
*
* @param profile stream media profile with {@link ImsStreamMediaProfile} to resume the call
* @see {@link ImsCallSession.Listener#callSessionResumed},
* {@link ImsCallSession.Listener#callSessionResumeFailed}
*/
@Override
public void resume(ImsStreamMediaProfile profile) {
}
/**
* Merges the active and held call. When the merge starts,
* {@link ImsCallSession.Listener#callSessionMergeStarted} is called.
* {@link ImsCallSession.Listener#callSessionMergeComplete} is called if the merge is
* successful, and {@link ImsCallSession.Listener#callSessionMergeFailed} is called if the merge
* fails.
*
* @see {@link ImsCallSession.Listener#callSessionMergeStarted},
* {@link ImsCallSession.Listener#callSessionMergeComplete},
* {@link ImsCallSession.Listener#callSessionMergeFailed}
*/
@Override
public void merge() {
}
/**
* Updates the current call's properties (ex. call mode change: video upgrade / downgrade).
*
* @param callType call type specified in {@link ImsCallProfile} to be updated
* @param profile stream media profile {@link ImsStreamMediaProfile} to be updated
* @see {@link ImsCallSession.Listener#callSessionUpdated},
* {@link ImsCallSession.Listener#callSessionUpdateFailed}
*/
@Override
public void update(int callType, ImsStreamMediaProfile profile) {
}
/**
* Extends this call to the conference call with the specified recipients.
*
* @param participants participant list to be invited to the conference call after extending the
* call
* @see {@link ImsCallSession.Listener#callSessionConferenceExtended},
* {@link ImsCallSession.Listener#callSessionConferenceExtendFailed}
*/
@Override
public void extendToConference(String[] participants) {
}
/**
* Requests the conference server to invite an additional participants to the conference.
*
* @param participants participant list to be invited to the conference call
* @see {@link ImsCallSession.Listener#callSessionInviteParticipantsRequestDelivered},
* {@link ImsCallSession.Listener#callSessionInviteParticipantsRequestFailed}
*/
@Override
public void inviteParticipants(String[] participants) {
}
/**
* Requests the conference server to remove the specified participants from the conference.
*
* @param participants participant list to be removed from the conference call
* @see {@link ImsCallSession.Listener#callSessionRemoveParticipantsRequestDelivered},
* {@link ImsCallSession.Listener#callSessionRemoveParticipantsRequestFailed}
*/
@Override
public void removeParticipants(String[] participants) {
}
/**
* Sends a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2833</a>,
* event 0 ~ 9 maps to decimal value 0 ~ 9, '*' to 10, '#' to 11, event 'A' ~ 'D' to 12 ~ 15,
* and event flash to 16. Currently, event flash is not supported.
*
* @param c the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs.
*/
@Override
public void sendDtmf(char c, Message result) {
}
/**
* Start a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2833</a>,
* event 0 ~ 9 maps to decimal value 0 ~ 9, '*' to 10, '#' to 11, event 'A' ~ 'D' to 12 ~ 15,
* and event flash to 16. Currently, event flash is not supported.
*
* @param c the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs.
*/
@Override
public void startDtmf(char c) {
}
/**
* Stop a DTMF code.
*/
@Override
public void stopDtmf() {
}
/**
* Sends an USSD message.
*
* @param ussdMessage USSD message to send
*/
@Override
public void sendUssd(String ussdMessage) {
}
@Override
public IImsVideoCallProvider getVideoCallProvider() {
return null;
}
/**
* Determines if the current session is multiparty.
* @return {@code True} if the session is multiparty.
*/
@Override
public boolean isMultiparty() {
return false;
}
/**
* Device issues RTT modify request
* @param toProfile The profile with requested changes made
*/
@Override
public void sendRttModifyRequest(ImsCallProfile toProfile) {
}
/**
* Device responds to Remote RTT modify request
* @param status true if the the request was accepted or false of the request is defined.
*/
@Override
public void sendRttModifyResponse(boolean status) {
}
/**
* Device sends RTT message
* @param rttMessage RTT message to be sent
*/
@Override
public void sendRttMessage(String rttMessage) {
}
/**
* There are two different ImsCallSessionListeners that need to reconciled here, we need to
* convert the "old" version of the com.android.ims.internal.IImsCallSessionListener to the
* "new" version of the Listener android.telephony.ims.ImsCallSessionListener when calling
* back to the framework.
*/
private class ImsCallSessionListenerConverter
extends com.android.ims.internal.IImsCallSessionListener.Stub {
private final IImsCallSessionListener mNewListener;
public ImsCallSessionListenerConverter(IImsCallSessionListener listener) {
mNewListener = listener;
}
@Override
public void callSessionProgressing(IImsCallSession i,
ImsStreamMediaProfile imsStreamMediaProfile) throws RemoteException {
mNewListener.callSessionProgressing(imsStreamMediaProfile);
}
@Override
public void callSessionStarted(IImsCallSession i, ImsCallProfile imsCallProfile)
throws RemoteException {
mNewListener.callSessionInitiated(imsCallProfile);
}
@Override
public void callSessionStartFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo)
throws RemoteException {
mNewListener.callSessionInitiatedFailed(imsReasonInfo);
}
@Override
public void callSessionTerminated(IImsCallSession i, ImsReasonInfo imsReasonInfo)
throws RemoteException {
mNewListener.callSessionTerminated(imsReasonInfo);
}
@Override
public void callSessionHeld(IImsCallSession i, ImsCallProfile imsCallProfile)
throws RemoteException {
mNewListener.callSessionHeld(imsCallProfile);
}
@Override
public void callSessionHoldFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo)
throws RemoteException {
mNewListener.callSessionHoldFailed(imsReasonInfo);
}
@Override
public void callSessionHoldReceived(IImsCallSession i, ImsCallProfile imsCallProfile)
throws RemoteException {
mNewListener.callSessionHoldReceived(imsCallProfile);
}
@Override
public void callSessionResumed(IImsCallSession i, ImsCallProfile imsCallProfile)
throws RemoteException {
mNewListener.callSessionResumed(imsCallProfile);
}
@Override
public void callSessionResumeFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo)
throws RemoteException {
mNewListener.callSessionResumeFailed(imsReasonInfo);
}
@Override
public void callSessionResumeReceived(IImsCallSession i, ImsCallProfile imsCallProfile)
throws RemoteException {
mNewListener.callSessionResumeReceived(imsCallProfile);
}
@Override
public void callSessionMergeStarted(IImsCallSession i, IImsCallSession newSession,
ImsCallProfile profile)
throws RemoteException {
mNewListener.callSessionMergeStarted(newSession, profile);
}
@Override
public void callSessionMergeComplete(IImsCallSession iImsCallSession)
throws RemoteException {
mNewListener.callSessionMergeComplete(iImsCallSession);
}
@Override
public void callSessionMergeFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo)
throws RemoteException {
mNewListener.callSessionMergeFailed(imsReasonInfo);
}
@Override
public void callSessionUpdated(IImsCallSession i, ImsCallProfile imsCallProfile)
throws RemoteException {
mNewListener.callSessionUpdated(imsCallProfile);
}
@Override
public void callSessionUpdateFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo)
throws RemoteException {
mNewListener.callSessionUpdateFailed(imsReasonInfo);
}
@Override
public void callSessionUpdateReceived(IImsCallSession i, ImsCallProfile imsCallProfile)
throws RemoteException {
mNewListener.callSessionUpdateReceived(imsCallProfile);
}
@Override
public void callSessionConferenceExtended(IImsCallSession i, IImsCallSession newSession,
ImsCallProfile imsCallProfile) throws RemoteException {
mNewListener.callSessionConferenceExtended(newSession, imsCallProfile);
}
@Override
public void callSessionConferenceExtendFailed(IImsCallSession i,
ImsReasonInfo imsReasonInfo) throws RemoteException {
mNewListener.callSessionConferenceExtendFailed(imsReasonInfo);
}
@Override
public void callSessionConferenceExtendReceived(IImsCallSession i,
IImsCallSession newSession, ImsCallProfile imsCallProfile)
throws RemoteException {
mNewListener.callSessionConferenceExtendReceived(newSession, imsCallProfile);
}
@Override
public void callSessionInviteParticipantsRequestDelivered(IImsCallSession i)
throws RemoteException {
mNewListener.callSessionInviteParticipantsRequestDelivered();
}
@Override
public void callSessionInviteParticipantsRequestFailed(IImsCallSession i,
ImsReasonInfo imsReasonInfo) throws RemoteException {
mNewListener.callSessionInviteParticipantsRequestFailed(imsReasonInfo);
}
@Override
public void callSessionRemoveParticipantsRequestDelivered(IImsCallSession i)
throws RemoteException {
mNewListener.callSessionRemoveParticipantsRequestDelivered();
}
@Override
public void callSessionRemoveParticipantsRequestFailed(IImsCallSession i,
ImsReasonInfo imsReasonInfo) throws RemoteException {
mNewListener.callSessionRemoveParticipantsRequestFailed(imsReasonInfo);
}
@Override
public void callSessionConferenceStateUpdated(IImsCallSession i,
ImsConferenceState imsConferenceState) throws RemoteException {
mNewListener.callSessionConferenceStateUpdated(imsConferenceState);
}
@Override
public void callSessionUssdMessageReceived(IImsCallSession i, int mode, String message)
throws RemoteException {
mNewListener.callSessionUssdMessageReceived(mode, message);
}
@Override
public void callSessionHandover(IImsCallSession i, int srcAccessTech, int targetAccessTech,
ImsReasonInfo reasonInfo) throws RemoteException {
mNewListener.callSessionHandover(srcAccessTech, targetAccessTech, reasonInfo);
}
@Override
public void callSessionHandoverFailed(IImsCallSession i, int srcAccessTech,
int targetAccessTech, ImsReasonInfo reasonInfo) throws RemoteException {
mNewListener.callSessionHandoverFailed(srcAccessTech, targetAccessTech, reasonInfo);
}
@Override
public void callSessionMayHandover(IImsCallSession i, int srcAccessTech, int targetAccessTech)
throws RemoteException {
mNewListener.callSessionMayHandover(srcAccessTech, targetAccessTech);
}
@Override
public void callSessionTtyModeReceived(IImsCallSession iImsCallSession, int mode)
throws RemoteException {
mNewListener.callSessionTtyModeReceived(mode);
}
@Override
public void callSessionMultipartyStateChanged(IImsCallSession i, boolean isMultiparty)
throws RemoteException {
mNewListener.callSessionMultipartyStateChanged(isMultiparty);
}
@Override
public void callSessionSuppServiceReceived(IImsCallSession i,
ImsSuppServiceNotification imsSuppServiceNotification) throws RemoteException {
mNewListener.callSessionSuppServiceReceived(imsSuppServiceNotification);
}
@Override
public void callSessionRttModifyRequestReceived(IImsCallSession i,
ImsCallProfile imsCallProfile) throws RemoteException {
mNewListener.callSessionRttModifyRequestReceived(imsCallProfile);
}
@Override
public void callSessionRttModifyResponseReceived(int status) throws RemoteException {
mNewListener.callSessionRttModifyResponseReceived(status);
}
@Override
public void callSessionRttMessageReceived(String rttMessage) throws RemoteException {
mNewListener.callSessionRttMessageReceived(rttMessage);
}
@Override
public void callSessionRttAudioIndicatorChanged(ImsStreamMediaProfile profile)
throws RemoteException {
mNewListener.callSessionRttAudioIndicatorChanged(profile);
}
@Override
public void callQualityChanged(CallQuality callQuality) throws RemoteException {
mNewListener.callQualityChanged(callQuality);
}
}
}