From ffc69362848f85ddebcbb3368af5c3fed0019a8b Mon Sep 17 00:00:00 2001 From: Brad Ebinger Date: Thu, 2 Feb 2017 14:07:07 -0800 Subject: Moving classes that must be used by an ImsService to base/ This change moves classes that need to be used by an unbundled ImsService to frameworks/base to facilitate its usage. Bug: 30290416 Test: Build and run device Change-Id: Id90f09ff445a6918996e35dc83e55ec98238de89 --- .../com/android/ims/internal/ImsCallSession.java | 1288 -------------------- .../android/ims/internal/ImsVideoCallProvider.java | 291 ----- 2 files changed, 1579 deletions(-) delete mode 100644 src/java/com/android/ims/internal/ImsCallSession.java delete mode 100644 src/java/com/android/ims/internal/ImsVideoCallProvider.java (limited to 'src/java/com/android/ims/internal') diff --git a/src/java/com/android/ims/internal/ImsCallSession.java b/src/java/com/android/ims/internal/ImsCallSession.java deleted file mode 100644 index d8614e3c..00000000 --- a/src/java/com/android/ims/internal/ImsCallSession.java +++ /dev/null @@ -1,1288 +0,0 @@ -/* - * Copyright (c) 2013 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 com.android.ims.internal; - -import android.os.Message; -import android.os.RemoteException; -import android.telecom.Connection; - -import java.util.Objects; -import android.util.Log; -import com.android.ims.ImsCallProfile; -import com.android.ims.ImsConferenceState; -import com.android.ims.ImsReasonInfo; -import com.android.ims.ImsStreamMediaProfile; -import com.android.ims.ImsSuppServiceNotification; - -/** - * Provides the call initiation/termination, and media exchange between two IMS endpoints. - * It directly communicates with IMS service which implements the IMS protocol behavior. - * - * @hide - */ -public class ImsCallSession { - private static final String TAG = "ImsCallSession"; - - /** - * Defines IMS call session state. - */ - public static class State { - public static final int IDLE = 0; - public static final int INITIATED = 1; - public static final int NEGOTIATING = 2; - public static final int ESTABLISHING = 3; - public static final int ESTABLISHED = 4; - - public static final int RENEGOTIATING = 5; - public static final int REESTABLISHING = 6; - - public static final int TERMINATING = 7; - public static final int TERMINATED = 8; - - public static final int INVALID = (-1); - - /** - * Converts the state to string. - */ - public static String toString(int state) { - switch (state) { - case IDLE: - return "IDLE"; - case INITIATED: - return "INITIATED"; - case NEGOTIATING: - return "NEGOTIATING"; - case ESTABLISHING: - return "ESTABLISHING"; - case ESTABLISHED: - return "ESTABLISHED"; - case RENEGOTIATING: - return "RENEGOTIATING"; - case REESTABLISHING: - return "REESTABLISHING"; - case TERMINATING: - return "TERMINATING"; - case TERMINATED: - return "TERMINATED"; - default: - return "UNKNOWN"; - } - } - - private State() { - } - } - - /** - * Listener for events relating to an IMS session, such as when a session is being - * recieved ("on ringing") or a call is outgoing ("on calling"). - *

Many of these events are also received by {@link ImsCall.Listener}.

- */ - public static class Listener { - /** - * Called when a request is sent out to initiate a new session - * and 1xx response is received from the network. - * - * @param session the session object that carries out the IMS session - */ - public void callSessionProgressing(ImsCallSession session, - ImsStreamMediaProfile profile) { - // no-op - } - - /** - * Called when the session is established. - * - * @param session the session object that carries out the IMS session - */ - public void callSessionStarted(ImsCallSession session, - ImsCallProfile profile) { - // no-op - } - - /** - * Called when the session establishment is failed. - * - * @param session the session object that carries out the IMS session - * @param reasonInfo detailed reason of the session establishment failure - */ - public void callSessionStartFailed(ImsCallSession session, - ImsReasonInfo reasonInfo) { - } - - /** - * Called when the session is terminated. - * - * @param session the session object that carries out the IMS session - * @param reasonInfo detailed reason of the session termination - */ - public void callSessionTerminated(ImsCallSession session, - ImsReasonInfo reasonInfo) { - } - - /** - * Called when the session is in hold. - * - * @param session the session object that carries out the IMS session - */ - public void callSessionHeld(ImsCallSession session, - ImsCallProfile profile) { - } - - /** - * Called when the session hold is failed. - * - * @param session the session object that carries out the IMS session - * @param reasonInfo detailed reason of the session hold failure - */ - public void callSessionHoldFailed(ImsCallSession session, - ImsReasonInfo reasonInfo) { - } - - /** - * Called when the session hold is received from the remote user. - * - * @param session the session object that carries out the IMS session - */ - public void callSessionHoldReceived(ImsCallSession session, - ImsCallProfile profile) { - } - - /** - * Called when the session resume is done. - * - * @param session the session object that carries out the IMS session - */ - public void callSessionResumed(ImsCallSession session, - ImsCallProfile profile) { - } - - /** - * Called when the session resume is failed. - * - * @param session the session object that carries out the IMS session - * @param reasonInfo detailed reason of the session resume failure - */ - public void callSessionResumeFailed(ImsCallSession session, - ImsReasonInfo reasonInfo) { - } - - /** - * Called when the session resume is received from the remote user. - * - * @param session the session object that carries out the IMS session - */ - public void callSessionResumeReceived(ImsCallSession session, - ImsCallProfile profile) { - } - - /** - * Called when the session merge has been started. At this point, the {@code newSession} - * represents the session which has been initiated to the IMS conference server for the - * new merged conference. - * - * @param session the session object that carries out the IMS session - * @param newSession the session object that is merged with an active & hold session - */ - public void callSessionMergeStarted(ImsCallSession session, - ImsCallSession newSession, ImsCallProfile profile) { - } - - /** - * Called when the session merge is successful and the merged session is active. - * - * @param session the session object that carries out the IMS session - */ - public void callSessionMergeComplete(ImsCallSession session) { - } - - /** - * Called when the session merge has failed. - * - * @param session the session object that carries out the IMS session - * @param reasonInfo detailed reason of the call merge failure - */ - public void callSessionMergeFailed(ImsCallSession session, - ImsReasonInfo reasonInfo) { - } - - /** - * Called when the session is updated (except for hold/unhold). - * - * @param call the call object that carries out the IMS call - */ - public void callSessionUpdated(ImsCallSession session, - ImsCallProfile profile) { - } - - /** - * Called when the session update is failed. - * - * @param session the session object that carries out the IMS session - * @param reasonInfo detailed reason of the session update failure - */ - public void callSessionUpdateFailed(ImsCallSession session, - ImsReasonInfo reasonInfo) { - } - - /** - * Called when the session update is received from the remote user. - * - * @param session the session object that carries out the IMS session - */ - public void callSessionUpdateReceived(ImsCallSession session, - ImsCallProfile profile) { - // no-op - } - - /** - * Called when the session is extended to the conference session. - * - * @param session the session object that carries out the IMS session - * @param newSession the session object that is extended to the conference - * from the active session - */ - public void callSessionConferenceExtended(ImsCallSession session, - ImsCallSession newSession, ImsCallProfile profile) { - } - - /** - * Called when the conference extension is failed. - * - * @param session the session object that carries out the IMS session - * @param reasonInfo detailed reason of the conference extension failure - */ - public void callSessionConferenceExtendFailed(ImsCallSession session, - ImsReasonInfo reasonInfo) { - } - - /** - * Called when the conference extension is received from the remote user. - * - * @param session the session object that carries out the IMS session - */ - public void callSessionConferenceExtendReceived(ImsCallSession session, - ImsCallSession newSession, ImsCallProfile profile) { - // no-op - } - - /** - * Called when the invitation request of the participants is delivered to the conference - * server. - * - * @param session the session object that carries out the IMS session - */ - public void callSessionInviteParticipantsRequestDelivered(ImsCallSession session) { - // no-op - } - - /** - * Called when the invitation request of the participants is failed. - * - * @param session the session object that carries out the IMS session - * @param reasonInfo detailed reason of the conference invitation failure - */ - public void callSessionInviteParticipantsRequestFailed(ImsCallSession session, - ImsReasonInfo reasonInfo) { - // no-op - } - - /** - * Called when the removal request of the participants is delivered to the conference - * server. - * - * @param session the session object that carries out the IMS session - */ - public void callSessionRemoveParticipantsRequestDelivered(ImsCallSession session) { - // no-op - } - - /** - * Called when the removal request of the participants is failed. - * - * @param session the session object that carries out the IMS session - * @param reasonInfo detailed reason of the conference removal failure - */ - public void callSessionRemoveParticipantsRequestFailed(ImsCallSession session, - ImsReasonInfo reasonInfo) { - // no-op - } - - /** - * Called when the conference state is updated. - * - * @param session the session object that carries out the IMS session - */ - public void callSessionConferenceStateUpdated(ImsCallSession session, - ImsConferenceState state) { - // no-op - } - - /** - * Called when the USSD message is received from the network. - * - * @param mode mode of the USSD message (REQUEST / NOTIFY) - * @param ussdMessage USSD message - */ - public void callSessionUssdMessageReceived(ImsCallSession session, - int mode, String ussdMessage) { - // no-op - } - - /** - * Called when session access technology changes - * - * @param session IMS session object - * @param srcAccessTech original access technology - * @param targetAccessTech new access technology - * @param reasonInfo - */ - public void callSessionHandover(ImsCallSession session, - int srcAccessTech, int targetAccessTech, - ImsReasonInfo reasonInfo) { - // no-op - } - - /** - * Called when session access technology change fails - * - * @param session IMS session object - * @param srcAccessTech original access technology - * @param targetAccessTech new access technology - * @param reasonInfo handover failure reason - */ - public void callSessionHandoverFailed(ImsCallSession session, - int srcAccessTech, int targetAccessTech, - ImsReasonInfo reasonInfo) { - // no-op - } - - /** - * Called when TTY mode of remote party changed - * - * @param session IMS session object - * @param mode TTY mode of remote party - */ - public void callSessionTtyModeReceived(ImsCallSession session, - int mode) { - // no-op - } - - /** - * Notifies of a change to the multiparty state for this {@code ImsCallSession}. - * - * @param session The call session. - * @param isMultiParty {@code true} if the session became multiparty, {@code false} - * otherwise. - */ - public void callSessionMultipartyStateChanged(ImsCallSession session, - boolean isMultiParty) { - // no-op - } - - /** - * Called when the session supplementary service is received - * - * @param session the session object that carries out the IMS session - */ - public void callSessionSuppServiceReceived(ImsCallSession session, - ImsSuppServiceNotification suppServiceInfo) { - } - } - - private final IImsCallSession miSession; - private boolean mClosed = false; - private Listener mListener; - - public ImsCallSession(IImsCallSession iSession) { - miSession = iSession; - - if (iSession != null) { - try { - iSession.setListener(new IImsCallSessionListenerProxy()); - } catch (RemoteException e) { - } - } else { - mClosed = true; - } - } - - public ImsCallSession(IImsCallSession iSession, Listener listener) { - this(iSession); - setListener(listener); - } - - /** - * Closes this object. This object is not usable after being closed. - */ - public synchronized void close() { - if (mClosed) { - return; - } - - try { - miSession.close(); - mClosed = true; - } catch (RemoteException e) { - } - } - - /** - * Gets the call ID of the session. - * - * @return the call ID - */ - public String getCallId() { - if (mClosed) { - return null; - } - - try { - return miSession.getCallId(); - } catch (RemoteException e) { - return null; - } - } - - /** - * Gets the call profile that this session is associated with - * - * @return the call profile that this session is associated with - */ - public ImsCallProfile getCallProfile() { - if (mClosed) { - return null; - } - - try { - return miSession.getCallProfile(); - } catch (RemoteException e) { - return null; - } - } - - /** - * Gets the local call profile that this session is associated with - * - * @return the local call profile that this session is associated with - */ - public ImsCallProfile getLocalCallProfile() { - if (mClosed) { - return null; - } - - try { - return miSession.getLocalCallProfile(); - } catch (RemoteException e) { - return null; - } - } - - /** - * Gets the remote call profile that this session is associated with - * - * @return the remote call profile that this session is associated with - */ - public ImsCallProfile getRemoteCallProfile() { - if (mClosed) { - return null; - } - - try { - return miSession.getRemoteCallProfile(); - } catch (RemoteException e) { - return null; - } - } - - /** - * Gets the video call provider for the session. - * - * @return The video call provider. - */ - public IImsVideoCallProvider getVideoCallProvider() { - if (mClosed) { - return null; - } - - try { - return miSession.getVideoCallProvider(); - } catch (RemoteException e) { - return null; - } - } - - /** - * Gets the value associated with the specified property of this session. - * - * @return the string value associated with the specified property - */ - public String getProperty(String name) { - if (mClosed) { - return null; - } - - try { - return miSession.getProperty(name); - } catch (RemoteException e) { - return null; - } - } - - /** - * Gets the session state. - * The value returned must be one of the states in {@link State}. - * - * @return the session state - */ - public int getState() { - if (mClosed) { - return State.INVALID; - } - - try { - return miSession.getState(); - } catch (RemoteException e) { - return State.INVALID; - } - } - - /** - * Determines if the {@link ImsCallSession} is currently alive (e.g. not in a terminated or - * closed state). - * - * @return {@code True} if the session is alive. - */ - public boolean isAlive() { - if (mClosed) { - return false; - } - - int state = getState(); - switch (state) { - case State.IDLE: - case State.INITIATED: - case State.NEGOTIATING: - case State.ESTABLISHING: - case State.ESTABLISHED: - case State.RENEGOTIATING: - case State.REESTABLISHING: - return true; - default: - return false; - } - } - - /** - * Gets the native IMS call session. - * @hide - */ - public IImsCallSession getSession() { - return miSession; - } - - /** - * Checks if the session is in call. - * - * @return true if the session is in call - */ - public boolean isInCall() { - if (mClosed) { - return false; - } - - try { - return miSession.isInCall(); - } catch (RemoteException e) { - return false; - } - } - - /** - * Sets the listener to listen to the session events. A {@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(Listener listener) { - mListener = listener; - } - - /** - * Mutes or unmutes the mic for the active call. - * - * @param muted true if the call is muted, false otherwise - */ - public void setMute(boolean muted) { - if (mClosed) { - return; - } - - try { - miSession.setMute(muted); - } catch (RemoteException e) { - } - } - - /** - * Initiates an IMS call with the specified target and call profile. - * The session listener 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 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 Listener#callSessionStarted, Listener#callSessionStartFailed - */ - public void start(String callee, ImsCallProfile profile) { - if (mClosed) { - return; - } - - try { - miSession.start(callee, profile); - } catch (RemoteException e) { - } - } - - /** - * Initiates an IMS conference call with the specified target and call profile. - * The session listener 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 Listener#callSessionStarted, Listener#callSessionStartFailed - */ - public void start(String[] participants, ImsCallProfile profile) { - if (mClosed) { - return; - } - - try { - miSession.startConference(participants, profile); - } catch (RemoteException e) { - } - } - - /** - * 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 Listener#callSessionStarted - */ - public void accept(int callType, ImsStreamMediaProfile profile) { - if (mClosed) { - return; - } - - try { - miSession.accept(callType, profile); - } catch (RemoteException e) { - } - } - - /** - * Rejects an incoming call or session update. - * - * @param reason reason code to reject an incoming call - * @see Listener#callSessionStartFailed - */ - public void reject(int reason) { - if (mClosed) { - return; - } - - try { - miSession.reject(reason); - } catch (RemoteException e) { - } - } - - /** - * Terminates a call. - * - * @see Listener#callSessionTerminated - */ - public void terminate(int reason) { - if (mClosed) { - return; - } - - try { - miSession.terminate(reason); - } catch (RemoteException e) { - } - } - - /** - * Puts a call on hold. When it succeeds, {@link Listener#callSessionHeld} is called. - * - * @param profile stream media profile {@link ImsStreamMediaProfile} to hold the call - * @see Listener#callSessionHeld, Listener#callSessionHoldFailed - */ - public void hold(ImsStreamMediaProfile profile) { - if (mClosed) { - return; - } - - try { - miSession.hold(profile); - } catch (RemoteException e) { - } - } - - /** - * Continues a call that's on hold. When it succeeds, - * {@link Listener#callSessionResumed} is called. - * - * @param profile stream media profile {@link ImsStreamMediaProfile} to resume the call - * @see Listener#callSessionResumed, Listener#callSessionResumeFailed - */ - public void resume(ImsStreamMediaProfile profile) { - if (mClosed) { - return; - } - - try { - miSession.resume(profile); - } catch (RemoteException e) { - } - } - - /** - * Merges the active & hold call. When it succeeds, - * {@link Listener#callSessionMergeStarted} is called. - * - * @see Listener#callSessionMergeStarted , Listener#callSessionMergeFailed - */ - public void merge() { - if (mClosed) { - return; - } - - try { - miSession.merge(); - } catch (RemoteException e) { - } - } - - /** - * 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 Listener#callSessionUpdated, Listener#callSessionUpdateFailed - */ - public void update(int callType, ImsStreamMediaProfile profile) { - if (mClosed) { - return; - } - - try { - miSession.update(callType, profile); - } catch (RemoteException e) { - } - } - - /** - * Extends this call to the conference call with the specified recipients. - * - * @participants participant list to be invited to the conference call after extending the call - * @see Listener#sessionConferenceExtened, Listener#sessionConferenceExtendFailed - */ - public void extendToConference(String[] participants) { - if (mClosed) { - return; - } - - try { - miSession.extendToConference(participants); - } catch (RemoteException e) { - } - } - - /** - * Requests the conference server to invite an additional participants to the conference. - * - * @participants participant list to be invited to the conference call - * @see Listener#sessionInviteParticipantsRequestDelivered, - * Listener#sessionInviteParticipantsRequestFailed - */ - public void inviteParticipants(String[] participants) { - if (mClosed) { - return; - } - - try { - miSession.inviteParticipants(participants); - } catch (RemoteException e) { - } - } - - /** - * Requests the conference server to remove the specified participants from the conference. - * - * @param participants participant list to be removed from the conference call - * @see Listener#sessionRemoveParticipantsRequestDelivered, - * Listener#sessionRemoveParticipantsRequestFailed - */ - public void removeParticipants(String[] participants) { - if (mClosed) { - return; - } - - try { - miSession.removeParticipants(participants); - } catch (RemoteException e) { - } - } - - - /** - * Sends a DTMF code. According to RFC 2833, - * 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. - */ - public void sendDtmf(char c, Message result) { - if (mClosed) { - return; - } - - try { - miSession.sendDtmf(c, result); - } catch (RemoteException e) { - } - } - - /** - * Starts a DTMF code. According to RFC 2833, - * 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. - */ - public void startDtmf(char c) { - if (mClosed) { - return; - } - - try { - miSession.startDtmf(c); - } catch (RemoteException e) { - } - } - - /** - * Stops a DTMF code. - */ - public void stopDtmf() { - if (mClosed) { - return; - } - - try { - miSession.stopDtmf(); - } catch (RemoteException e) { - } - } - - /** - * Sends an USSD message. - * - * @param ussdMessage USSD message to send - */ - public void sendUssd(String ussdMessage) { - if (mClosed) { - return; - } - - try { - miSession.sendUssd(ussdMessage); - } catch (RemoteException e) { - } - } - - /** - * Determines if the session is multiparty. - * - * @return {@code True} if the session is multiparty. - */ - public boolean isMultiparty() { - if (mClosed) { - return false; - } - - try { - return miSession.isMultiparty(); - } catch (RemoteException e) { - return false; - } - } - - /** - * A listener type for receiving notification on IMS call session events. - * When an event is generated for an {@link IImsCallSession}, - * the application is notified by having one of the methods called on - * the {@link IImsCallSessionListener}. - */ - private class IImsCallSessionListenerProxy extends IImsCallSessionListener.Stub { - /** - * Notifies the result of the basic session operation (setup / terminate). - */ - @Override - public void callSessionProgressing(IImsCallSession session, - ImsStreamMediaProfile profile) { - if (mListener != null) { - mListener.callSessionProgressing(ImsCallSession.this, profile); - } - } - - @Override - public void callSessionStarted(IImsCallSession session, - ImsCallProfile profile) { - if (mListener != null) { - mListener.callSessionStarted(ImsCallSession.this, profile); - } - } - - @Override - public void callSessionStartFailed(IImsCallSession session, - ImsReasonInfo reasonInfo) { - if (mListener != null) { - mListener.callSessionStartFailed(ImsCallSession.this, reasonInfo); - } - } - - @Override - public void callSessionTerminated(IImsCallSession session, - ImsReasonInfo reasonInfo) { - if (mListener != null) { - mListener.callSessionTerminated(ImsCallSession.this, reasonInfo); - } - } - - /** - * Notifies the result of the call hold/resume operation. - */ - @Override - public void callSessionHeld(IImsCallSession session, - ImsCallProfile profile) { - if (mListener != null) { - mListener.callSessionHeld(ImsCallSession.this, profile); - } - } - - @Override - public void callSessionHoldFailed(IImsCallSession session, - ImsReasonInfo reasonInfo) { - if (mListener != null) { - mListener.callSessionHoldFailed(ImsCallSession.this, reasonInfo); - } - } - - @Override - public void callSessionHoldReceived(IImsCallSession session, - ImsCallProfile profile) { - if (mListener != null) { - mListener.callSessionHoldReceived(ImsCallSession.this, profile); - } - } - - @Override - public void callSessionResumed(IImsCallSession session, - ImsCallProfile profile) { - if (mListener != null) { - mListener.callSessionResumed(ImsCallSession.this, profile); - } - } - - @Override - public void callSessionResumeFailed(IImsCallSession session, - ImsReasonInfo reasonInfo) { - if (mListener != null) { - mListener.callSessionResumeFailed(ImsCallSession.this, reasonInfo); - } - } - - @Override - public void callSessionResumeReceived(IImsCallSession session, - ImsCallProfile profile) { - if (mListener != null) { - mListener.callSessionResumeReceived(ImsCallSession.this, profile); - } - } - - /** - * Notifies the start of a call merge operation. - * - * @param session The call session. - * @param newSession The merged call session. - * @param profile The call profile. - */ - @Override - public void callSessionMergeStarted(IImsCallSession session, - IImsCallSession newSession, ImsCallProfile profile) { - // This callback can be used for future use to add additional - // functionality that may be needed between conference start and complete - Log.d(TAG, "callSessionMergeStarted"); - } - - /** - * Notifies the successful completion of a call merge operation. - * - * @param session The call session. - */ - @Override - public void callSessionMergeComplete(IImsCallSession newSession) { - if (mListener != null) { - if (newSession != null) { - // Check if the active session is the same session that was - // active before the merge request was sent. - ImsCallSession validActiveSession = ImsCallSession.this; - try { - if (!Objects.equals(miSession.getCallId(), newSession.getCallId())) { - // New session created after conference - validActiveSession = new ImsCallSession(newSession); - } - } catch (RemoteException rex) { - Log.e(TAG, "callSessionMergeComplete: exception for getCallId!"); - } - mListener.callSessionMergeComplete(validActiveSession); - } else { - // Session already exists. Hence no need to pass - mListener.callSessionMergeComplete(null); - } - } - } - - /** - * Notifies of a failure to perform a call merge operation. - * - * @param session The call session. - * @param reasonInfo The merge failure reason. - */ - @Override - public void callSessionMergeFailed(IImsCallSession session, - ImsReasonInfo reasonInfo) { - if (mListener != null) { - mListener.callSessionMergeFailed(ImsCallSession.this, reasonInfo); - } - } - - /** - * Notifies the result of call upgrade / downgrade or any other call updates. - */ - @Override - public void callSessionUpdated(IImsCallSession session, - ImsCallProfile profile) { - if (mListener != null) { - mListener.callSessionUpdated(ImsCallSession.this, profile); - } - } - - @Override - public void callSessionUpdateFailed(IImsCallSession session, - ImsReasonInfo reasonInfo) { - if (mListener != null) { - mListener.callSessionUpdateFailed(ImsCallSession.this, reasonInfo); - } - } - - @Override - public void callSessionUpdateReceived(IImsCallSession session, - ImsCallProfile profile) { - if (mListener != null) { - mListener.callSessionUpdateReceived(ImsCallSession.this, profile); - } - } - - /** - * Notifies the result of conference extension. - */ - @Override - public void callSessionConferenceExtended(IImsCallSession session, - IImsCallSession newSession, ImsCallProfile profile) { - if (mListener != null) { - mListener.callSessionConferenceExtended(ImsCallSession.this, - new ImsCallSession(newSession), profile); - } - } - - @Override - public void callSessionConferenceExtendFailed(IImsCallSession session, - ImsReasonInfo reasonInfo) { - if (mListener != null) { - mListener.callSessionConferenceExtendFailed(ImsCallSession.this, reasonInfo); - } - } - - @Override - public void callSessionConferenceExtendReceived(IImsCallSession session, - IImsCallSession newSession, ImsCallProfile profile) { - if (mListener != null) { - mListener.callSessionConferenceExtendReceived(ImsCallSession.this, - new ImsCallSession(newSession), profile); - } - } - - /** - * Notifies the result of the participant invitation / removal to/from - * the conference session. - */ - @Override - public void callSessionInviteParticipantsRequestDelivered(IImsCallSession session) { - if (mListener != null) { - mListener.callSessionInviteParticipantsRequestDelivered(ImsCallSession.this); - } - } - - @Override - public void callSessionInviteParticipantsRequestFailed(IImsCallSession session, - ImsReasonInfo reasonInfo) { - if (mListener != null) { - mListener.callSessionInviteParticipantsRequestFailed(ImsCallSession.this, - reasonInfo); - } - } - - @Override - public void callSessionRemoveParticipantsRequestDelivered(IImsCallSession session) { - if (mListener != null) { - mListener.callSessionRemoveParticipantsRequestDelivered(ImsCallSession.this); - } - } - - @Override - public void callSessionRemoveParticipantsRequestFailed(IImsCallSession session, - ImsReasonInfo reasonInfo) { - if (mListener != null) { - mListener.callSessionRemoveParticipantsRequestFailed(ImsCallSession.this, - reasonInfo); - } - } - - /** - * Notifies the changes of the conference info. in the conference session. - */ - @Override - public void callSessionConferenceStateUpdated(IImsCallSession session, - ImsConferenceState state) { - if (mListener != null) { - mListener.callSessionConferenceStateUpdated(ImsCallSession.this, state); - } - } - - /** - * Notifies the incoming USSD message. - */ - @Override - public void callSessionUssdMessageReceived(IImsCallSession session, - int mode, String ussdMessage) { - if (mListener != null) { - mListener.callSessionUssdMessageReceived(ImsCallSession.this, mode, ussdMessage); - } - } - - /** - * Notifies of handover information for this call - */ - @Override - public void callSessionHandover(IImsCallSession session, - int srcAccessTech, int targetAccessTech, - ImsReasonInfo reasonInfo) { - if (mListener != null) { - mListener.callSessionHandover(ImsCallSession.this, srcAccessTech, - targetAccessTech, reasonInfo); - } - } - - /** - * Notifies of handover failure info for this call - */ - @Override - public void callSessionHandoverFailed(IImsCallSession session, - int srcAccessTech, int targetAccessTech, - ImsReasonInfo reasonInfo) { - if (mListener != null) { - mListener.callSessionHandoverFailed(ImsCallSession.this, srcAccessTech, - targetAccessTech, reasonInfo); - } - } - - /** - * Notifies the TTY mode received from remote party. - */ - @Override - public void callSessionTtyModeReceived(IImsCallSession session, - int mode) { - if (mListener != null) { - mListener.callSessionTtyModeReceived(ImsCallSession.this, mode); - } - } - - /** - * Notifies of a change to the multiparty state for this {@code ImsCallSession}. - * - * @param session The call session. - * @param isMultiParty {@code true} if the session became multiparty, {@code false} - * otherwise. - */ - public void callSessionMultipartyStateChanged(IImsCallSession session, - boolean isMultiParty) { - - if (mListener != null) { - mListener.callSessionMultipartyStateChanged(ImsCallSession.this, isMultiParty); - } - } - - @Override - public void callSessionSuppServiceReceived(IImsCallSession session, - ImsSuppServiceNotification suppServiceInfo ) { - if (mListener != null) { - mListener.callSessionSuppServiceReceived(ImsCallSession.this, suppServiceInfo); - } - } - - } - - /** - * Provides a string representation of the {@link ImsCallSession}. Primarily intended for - * use in log statements. - * - * @return String representation of session. - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("[ImsCallSession objId:"); - sb.append(System.identityHashCode(this)); - sb.append(" state:"); - sb.append(State.toString(getState())); - sb.append(" callId:"); - sb.append(getCallId()); - sb.append("]"); - return sb.toString(); - } -} diff --git a/src/java/com/android/ims/internal/ImsVideoCallProvider.java b/src/java/com/android/ims/internal/ImsVideoCallProvider.java deleted file mode 100644 index 25aa6945..00000000 --- a/src/java/com/android/ims/internal/ImsVideoCallProvider.java +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Copyright (C) 2014 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 com.android.ims.internal; - -import com.android.internal.os.SomeArgs; - -import android.net.Uri; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; -import android.os.RemoteException; -import android.telecom.Connection; -import android.telecom.VideoProfile; -import android.telecom.VideoProfile.CameraCapabilities; -import android.view.Surface; - -public abstract class ImsVideoCallProvider { - private static final int MSG_SET_CALLBACK = 1; - private static final int MSG_SET_CAMERA = 2; - private static final int MSG_SET_PREVIEW_SURFACE = 3; - private static final int MSG_SET_DISPLAY_SURFACE = 4; - private static final int MSG_SET_DEVICE_ORIENTATION = 5; - private static final int MSG_SET_ZOOM = 6; - private static final int MSG_SEND_SESSION_MODIFY_REQUEST = 7; - private static final int MSG_SEND_SESSION_MODIFY_RESPONSE = 8; - private static final int MSG_REQUEST_CAMERA_CAPABILITIES = 9; - private static final int MSG_REQUEST_CALL_DATA_USAGE = 10; - private static final int MSG_SET_PAUSE_IMAGE = 11; - - private final ImsVideoCallProviderBinder mBinder; - - private IImsVideoCallCallback mCallback; - - /** - * Default handler used to consolidate binder method calls onto a single thread. - */ - private final Handler mProviderHandler = new Handler(Looper.getMainLooper()) { - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case MSG_SET_CALLBACK: - mCallback = (IImsVideoCallCallback) msg.obj; - break; - case MSG_SET_CAMERA: - { - SomeArgs args = (SomeArgs) msg.obj; - try { - onSetCamera((String) args.arg1); - onSetCamera((String) args.arg1, args.argi1); - } finally { - args.recycle(); - } - break; - } - case MSG_SET_PREVIEW_SURFACE: - onSetPreviewSurface((Surface) msg.obj); - break; - case MSG_SET_DISPLAY_SURFACE: - onSetDisplaySurface((Surface) msg.obj); - break; - case MSG_SET_DEVICE_ORIENTATION: - onSetDeviceOrientation(msg.arg1); - break; - case MSG_SET_ZOOM: - onSetZoom((Float) msg.obj); - break; - case MSG_SEND_SESSION_MODIFY_REQUEST: { - SomeArgs args = (SomeArgs) msg.obj; - try { - VideoProfile fromProfile = (VideoProfile) args.arg1; - VideoProfile toProfile = (VideoProfile) args.arg2; - - onSendSessionModifyRequest(fromProfile, toProfile); - } finally { - args.recycle(); - } - break; - } - case MSG_SEND_SESSION_MODIFY_RESPONSE: - onSendSessionModifyResponse((VideoProfile) msg.obj); - break; - case MSG_REQUEST_CAMERA_CAPABILITIES: - onRequestCameraCapabilities(); - break; - case MSG_REQUEST_CALL_DATA_USAGE: - onRequestCallDataUsage(); - break; - case MSG_SET_PAUSE_IMAGE: - onSetPauseImage((Uri) msg.obj); - break; - default: - break; - } - } - }; - - /** - * IImsVideoCallProvider stub implementation. - */ - private final class ImsVideoCallProviderBinder extends IImsVideoCallProvider.Stub { - public void setCallback(IImsVideoCallCallback callback) { - mProviderHandler.obtainMessage(MSG_SET_CALLBACK, callback).sendToTarget(); - } - - public void setCamera(String cameraId, int uid) { - SomeArgs args = SomeArgs.obtain(); - args.arg1 = cameraId; - args.argi1 = uid; - mProviderHandler.obtainMessage(MSG_SET_CAMERA, args).sendToTarget(); - } - - public void setPreviewSurface(Surface surface) { - mProviderHandler.obtainMessage(MSG_SET_PREVIEW_SURFACE, surface).sendToTarget(); - } - - public void setDisplaySurface(Surface surface) { - mProviderHandler.obtainMessage(MSG_SET_DISPLAY_SURFACE, surface).sendToTarget(); - } - - public void setDeviceOrientation(int rotation) { - mProviderHandler.obtainMessage(MSG_SET_DEVICE_ORIENTATION, rotation, 0).sendToTarget(); - } - - public void setZoom(float value) { - mProviderHandler.obtainMessage(MSG_SET_ZOOM, value).sendToTarget(); - } - - public void sendSessionModifyRequest(VideoProfile fromProfile, VideoProfile toProfile) { - SomeArgs args = SomeArgs.obtain(); - args.arg1 = fromProfile; - args.arg2 = toProfile; - mProviderHandler.obtainMessage(MSG_SEND_SESSION_MODIFY_REQUEST, args).sendToTarget(); - } - - public void sendSessionModifyResponse(VideoProfile responseProfile) { - mProviderHandler.obtainMessage( - MSG_SEND_SESSION_MODIFY_RESPONSE, responseProfile).sendToTarget(); - } - - public void requestCameraCapabilities() { - mProviderHandler.obtainMessage(MSG_REQUEST_CAMERA_CAPABILITIES).sendToTarget(); - } - - public void requestCallDataUsage() { - mProviderHandler.obtainMessage(MSG_REQUEST_CALL_DATA_USAGE).sendToTarget(); - } - - public void setPauseImage(Uri uri) { - mProviderHandler.obtainMessage(MSG_SET_PAUSE_IMAGE, uri).sendToTarget(); - } - } - - public ImsVideoCallProvider() { - mBinder = new ImsVideoCallProviderBinder(); - } - - /** - * Returns binder object which can be used across IPC methods. - */ - public final IImsVideoCallProvider getInterface() { - return mBinder; - } - - /** @see Connection.VideoProvider#onSetCamera */ - public abstract void onSetCamera(String cameraId); - - /** - * Similar to {@link #onSetCamera(String)}, except includes the UID of the calling process which - * the IMS service uses when opening the camera. This ensures camera permissions are verified - * by the camera service. - * - * @param cameraId The id of the camera to be opened. - * @param uid The uid of the caller, used when opening the camera for permission verification. - * @see Connection.VideoProvider#onSetCamera - */ - public void onSetCamera(String cameraId, int uid) { - } - - /** @see Connection.VideoProvider#onSetPreviewSurface */ - public abstract void onSetPreviewSurface(Surface surface); - - /** @see Connection.VideoProvider#onSetDisplaySurface */ - public abstract void onSetDisplaySurface(Surface surface); - - /** @see Connection.VideoProvider#onSetDeviceOrientation */ - public abstract void onSetDeviceOrientation(int rotation); - - /** @see Connection.VideoProvider#onSetZoom */ - public abstract void onSetZoom(float value); - - /** @see Connection.VideoProvider#onSendSessionModifyRequest */ - public abstract void onSendSessionModifyRequest(VideoProfile fromProfile, - VideoProfile toProfile); - - /** @see Connection.VideoProvider#onSendSessionModifyResponse */ - public abstract void onSendSessionModifyResponse(VideoProfile responseProfile); - - /** @see Connection.VideoProvider#onRequestCameraCapabilities */ - public abstract void onRequestCameraCapabilities(); - - /** @see Connection.VideoProvider#onRequestCallDataUsage */ - public abstract void onRequestCallDataUsage(); - - /** @see Connection.VideoProvider#onSetPauseImage */ - public abstract void onSetPauseImage(Uri uri); - - /** @see Connection.VideoProvider#receiveSessionModifyRequest */ - public void receiveSessionModifyRequest(VideoProfile VideoProfile) { - if (mCallback != null) { - try { - mCallback.receiveSessionModifyRequest(VideoProfile); - } catch (RemoteException ignored) { - } - } - } - - /** @see Connection.VideoProvider#receiveSessionModifyResponse */ - public void receiveSessionModifyResponse( - int status, VideoProfile requestedProfile, VideoProfile responseProfile) { - if (mCallback != null) { - try { - mCallback.receiveSessionModifyResponse(status, requestedProfile, responseProfile); - } catch (RemoteException ignored) { - } - } - } - - /** @see Connection.VideoProvider#handleCallSessionEvent */ - public void handleCallSessionEvent(int event) { - if (mCallback != null) { - try { - mCallback.handleCallSessionEvent(event); - } catch (RemoteException ignored) { - } - } - } - - /** @see Connection.VideoProvider#changePeerDimensions */ - public void changePeerDimensions(int width, int height) { - if (mCallback != null) { - try { - mCallback.changePeerDimensions(width, height); - } catch (RemoteException ignored) { - } - } - } - - /** @see Connection.VideoProvider#changeCallDataUsage */ - public void changeCallDataUsage(long dataUsage) { - if (mCallback != null) { - try { - mCallback.changeCallDataUsage(dataUsage); - } catch (RemoteException ignored) { - } - } - } - - /** @see Connection.VideoProvider#changeCameraCapabilities */ - public void changeCameraCapabilities(CameraCapabilities CameraCapabilities) { - if (mCallback != null) { - try { - mCallback.changeCameraCapabilities(CameraCapabilities); - } catch (RemoteException ignored) { - } - } - } - - /** @see Connection.VideoProvider#changeVideoQuality */ - public void changeVideoQuality(int videoQuality) { - if (mCallback != null) { - try { - mCallback.changeVideoQuality(videoQuality); - } catch (RemoteException ignored) { - } - } - } -} -- cgit v1.2.3