Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d75bee9 authored by Brad Ebinger's avatar Brad Ebinger
Browse files

Modify ConnectionServiceAdapter to include Session

Modifies the ConnectionServiceAdapter to include Session Information in
the AIDL interface so that external Sessions can be started in Telecom
from Telephony.

Test: Manual testing and Unit Tests pass
Bug: 26571395
Change-Id: I31bbfe433dd062a50bd05083e1a639dd4cd03403
parent fdfc79a8
Loading
Loading
Loading
Loading
+36 −31
Original line number Diff line number Diff line
@@ -93,7 +93,8 @@ final class ConnectionServiceAdapter implements DeathRecipient {
            ParcelableConnection connection) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.handleCreateConnectionComplete(id, request, connection);
                adapter.handleCreateConnectionComplete(id, request, connection,
                        Log.getExternalSession());
            } catch (RemoteException e) {
            }
        }
@@ -108,7 +109,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void setActive(String callId) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.setActive(callId);
                adapter.setActive(callId, Log.getExternalSession());
            } catch (RemoteException e) {
            }
        }
@@ -122,7 +123,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void setRinging(String callId) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.setRinging(callId);
                adapter.setRinging(callId, Log.getExternalSession());
            } catch (RemoteException e) {
            }
        }
@@ -136,7 +137,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void setDialing(String callId) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.setDialing(callId);
                adapter.setDialing(callId, Log.getExternalSession());
            } catch (RemoteException e) {
            }
        }
@@ -151,7 +152,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void setPulling(String callId) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.setPulling(callId);
                adapter.setPulling(callId, Log.getExternalSession());
            } catch (RemoteException e) {
            }
        }
@@ -167,7 +168,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void setDisconnected(String callId, DisconnectCause disconnectCause) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.setDisconnected(callId, disconnectCause);
                adapter.setDisconnected(callId, disconnectCause, Log.getExternalSession());
            } catch (RemoteException e) {
            }
        }
@@ -181,7 +182,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void setOnHold(String callId) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.setOnHold(callId);
                adapter.setOnHold(callId, Log.getExternalSession());
            } catch (RemoteException e) {
            }
        }
@@ -196,7 +197,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void setRingbackRequested(String callId, boolean ringback) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.setRingbackRequested(callId, ringback);
                adapter.setRingbackRequested(callId, ringback, Log.getExternalSession());
            } catch (RemoteException e) {
            }
        }
@@ -205,7 +206,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void setConnectionCapabilities(String callId, int capabilities) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.setConnectionCapabilities(callId, capabilities);
                adapter.setConnectionCapabilities(callId, capabilities, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -214,7 +215,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void setConnectionProperties(String callId, int properties) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.setConnectionProperties(callId, properties);
                adapter.setConnectionProperties(callId, properties, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -232,7 +233,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                Log.d(this, "sending connection %s with conference %s", callId, conferenceCallId);
                adapter.setIsConferenced(callId, conferenceCallId);
                adapter.setIsConferenced(callId, conferenceCallId, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -247,7 +248,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                Log.d(this, "merge failed for call %s", callId);
                adapter.setConferenceMergeFailed(callId);
                adapter.setConferenceMergeFailed(callId, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -262,7 +263,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void removeCall(String callId) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.removeCall(callId);
                adapter.removeCall(callId, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -271,7 +272,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void onPostDialWait(String callId, String remaining) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.onPostDialWait(callId, remaining);
                adapter.onPostDialWait(callId, remaining, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -280,7 +281,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void onPostDialChar(String callId, char nextChar) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.onPostDialChar(callId, nextChar);
                adapter.onPostDialChar(callId, nextChar, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -294,7 +295,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void addConferenceCall(String callId, ParcelableConference parcelableConference) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.addConferenceCall(callId, parcelableConference);
                adapter.addConferenceCall(callId, parcelableConference, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -307,7 +308,8 @@ final class ConnectionServiceAdapter implements DeathRecipient {
        // Only supported when there is only one adapter.
        if (mAdapters.size() == 1) {
            try {
                mAdapters.iterator().next().queryRemoteConnectionServices(callback);
                mAdapters.iterator().next().queryRemoteConnectionServices(callback,
                        Log.getExternalSession());
            } catch (RemoteException e) {
                Log.e(this, e, "Exception trying to query for remote CSs");
            }
@@ -326,7 +328,8 @@ final class ConnectionServiceAdapter implements DeathRecipient {
            try {
                adapter.setVideoProvider(
                        callId,
                        videoProvider == null ? null : videoProvider.getInterface());
                        videoProvider == null ? null : videoProvider.getInterface(),
                        Log.getExternalSession());
            } catch (RemoteException e) {
            }
        }
@@ -341,7 +344,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void setIsVoipAudioMode(String callId, boolean isVoip) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.setIsVoipAudioMode(callId, isVoip);
                adapter.setIsVoipAudioMode(callId, isVoip, Log.getExternalSession());
            } catch (RemoteException e) {
            }
        }
@@ -350,7 +353,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void setStatusHints(String callId, StatusHints statusHints) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.setStatusHints(callId, statusHints);
                adapter.setStatusHints(callId, statusHints, Log.getExternalSession());
            } catch (RemoteException e) {
            }
        }
@@ -359,7 +362,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void setAddress(String callId, Uri address, int presentation) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.setAddress(callId, address, presentation);
                adapter.setAddress(callId, address, presentation, Log.getExternalSession());
            } catch (RemoteException e) {
            }
        }
@@ -368,7 +371,8 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    void setCallerDisplayName(String callId, String callerDisplayName, int presentation) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.setCallerDisplayName(callId, callerDisplayName, presentation);
                adapter.setCallerDisplayName(callId, callerDisplayName, presentation,
                        Log.getExternalSession());
            } catch (RemoteException e) {
            }
        }
@@ -389,7 +393,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
        Log.v(this, "setVideoState: %d", videoState);
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.setVideoState(callId, videoState);
                adapter.setVideoState(callId, videoState, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -399,7 +403,8 @@ final class ConnectionServiceAdapter implements DeathRecipient {
        Log.v(this, "setConferenceableConnections: %s, %s", callId, conferenceableCallIds);
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.setConferenceableConnections(callId, conferenceableCallIds);
                adapter.setConferenceableConnections(callId, conferenceableCallIds,
                        Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -415,7 +420,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
        Log.v(this, "addExistingConnection: %s", callId);
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.addExistingConnection(callId, connection);
                adapter.addExistingConnection(callId, connection, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -431,7 +436,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
        Log.v(this, "putExtras: %s", callId);
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.putExtras(callId, extras);
                adapter.putExtras(callId, extras, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -450,7 +455,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
            try {
                Bundle bundle = new Bundle();
                bundle.putBoolean(key, value);
                adapter.putExtras(callId, bundle);
                adapter.putExtras(callId, bundle, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -469,7 +474,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
            try {
                Bundle bundle = new Bundle();
                bundle.putInt(key, value);
                adapter.putExtras(callId, bundle);
                adapter.putExtras(callId, bundle, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -488,7 +493,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
            try {
                Bundle bundle = new Bundle();
                bundle.putString(key, value);
                adapter.putExtras(callId, bundle);
                adapter.putExtras(callId, bundle, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -503,7 +508,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
        Log.v(this, "removeExtras: %s %s", callId, keys);
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.removeExtras(callId, keys);
                adapter.removeExtras(callId, keys, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
@@ -520,7 +525,7 @@ final class ConnectionServiceAdapter implements DeathRecipient {
        Log.v(this, "onConnectionEvent: %s", event);
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.onConnectionEvent(callId, event, extras);
                adapter.onConnectionEvent(callId, event, extras, Log.getExternalSession());
            } catch (RemoteException ignored) {
            }
        }
+98 −61

File changed.

Preview size limit exceeded, changes collapsed.

+41 −30
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.os.Bundle;
import android.os.IBinder;
import android.os.IBinder.DeathRecipient;
import android.os.RemoteException;
import android.telecom.Logging.Session;

import com.android.internal.telecom.IConnectionService;
import com.android.internal.telecom.IConnectionServiceAdapter;
@@ -54,7 +55,8 @@ final class RemoteConnectionService {
        public void handleCreateConnectionComplete(
                String id,
                ConnectionRequest request,
                ParcelableConnection parcel) {
                ParcelableConnection parcel,
                Session.Info info) {
            RemoteConnection connection =
                    findConnectionForAction(id, "handleCreateConnectionSuccessful");
            if (connection != NULL_CONNECTION && mPendingConnections.contains(connection)) {
@@ -95,7 +97,7 @@ final class RemoteConnectionService {
        }

        @Override
        public void setActive(String callId) {
        public void setActive(String callId, Session.Info sessionInfo) {
            if (mConnectionById.containsKey(callId)) {
                findConnectionForAction(callId, "setActive")
                        .setState(Connection.STATE_ACTIVE);
@@ -106,25 +108,26 @@ final class RemoteConnectionService {
        }

        @Override
        public void setRinging(String callId) {
        public void setRinging(String callId, Session.Info sessionInfo) {
            findConnectionForAction(callId, "setRinging")
                    .setState(Connection.STATE_RINGING);
        }

        @Override
        public void setDialing(String callId) {
        public void setDialing(String callId, Session.Info sessionInfo) {
            findConnectionForAction(callId, "setDialing")
                    .setState(Connection.STATE_DIALING);
        }

        @Override
        public void setPulling(String callId) {
        public void setPulling(String callId, Session.Info sessionInfo) {
            findConnectionForAction(callId, "setPulling")
                    .setState(Connection.STATE_PULLING_CALL);
        }

        @Override
        public void setDisconnected(String callId, DisconnectCause disconnectCause) {
        public void setDisconnected(String callId, DisconnectCause disconnectCause,
                Session.Info sessionInfo) {
            if (mConnectionById.containsKey(callId)) {
                findConnectionForAction(callId, "setDisconnected")
                        .setDisconnected(disconnectCause);
@@ -135,7 +138,7 @@ final class RemoteConnectionService {
        }

        @Override
        public void setOnHold(String callId) {
        public void setOnHold(String callId, Session.Info sessionInfo) {
            if (mConnectionById.containsKey(callId)) {
                findConnectionForAction(callId, "setOnHold")
                        .setState(Connection.STATE_HOLDING);
@@ -146,13 +149,14 @@ final class RemoteConnectionService {
        }

        @Override
        public void setRingbackRequested(String callId, boolean ringing) {
        public void setRingbackRequested(String callId, boolean ringing, Session.Info sessionInfo) {
            findConnectionForAction(callId, "setRingbackRequested")
                    .setRingbackRequested(ringing);
        }

        @Override
        public void setConnectionCapabilities(String callId, int connectionCapabilities) {
        public void setConnectionCapabilities(String callId, int connectionCapabilities,
                Session.Info sessionInfo) {
            if (mConnectionById.containsKey(callId)) {
                findConnectionForAction(callId, "setConnectionCapabilities")
                        .setConnectionCapabilities(connectionCapabilities);
@@ -163,7 +167,8 @@ final class RemoteConnectionService {
        }

        @Override
        public void setConnectionProperties(String callId, int connectionProperties) {
        public void setConnectionProperties(String callId, int connectionProperties,
                Session.Info sessionInfo) {
            if (mConnectionById.containsKey(callId)) {
                findConnectionForAction(callId, "setConnectionProperties")
                        .setConnectionProperties(connectionProperties);
@@ -174,7 +179,8 @@ final class RemoteConnectionService {
        }

        @Override
        public void setIsConferenced(String callId, String conferenceCallId) {
        public void setIsConferenced(String callId, String conferenceCallId,
                Session.Info sessionInfo) {
            // Note: callId should not be null; conferenceCallId may be null
            RemoteConnection connection =
                    findConnectionForAction(callId, "setIsConferenced");
@@ -195,7 +201,7 @@ final class RemoteConnectionService {
        }

        @Override
        public void setConferenceMergeFailed(String callId) {
        public void setConferenceMergeFailed(String callId, Session.Info sessionInfo) {
            // Nothing to do here.
            // The event has already been handled and there is no state to update
            // in the underlying connection or conference objects
@@ -203,8 +209,7 @@ final class RemoteConnectionService {

        @Override
        public void addConferenceCall(
                final String callId,
                ParcelableConference parcel) {
                final String callId, ParcelableConference parcel, Session.Info sessionInfo) {
            RemoteConference conference = new RemoteConference(callId,
                    mOutgoingConnectionServiceRpc);

@@ -238,7 +243,7 @@ final class RemoteConnectionService {
        }

        @Override
        public void removeCall(String callId) {
        public void removeCall(String callId, Session.Info sessionInfo) {
            if (mConnectionById.containsKey(callId)) {
                findConnectionForAction(callId, "removeCall")
                        .setDestroyed();
@@ -249,24 +254,26 @@ final class RemoteConnectionService {
        }

        @Override
        public void onPostDialWait(String callId, String remaining) {
        public void onPostDialWait(String callId, String remaining, Session.Info sessionInfo) {
            findConnectionForAction(callId, "onPostDialWait")
                    .setPostDialWait(remaining);
        }

        @Override
        public void onPostDialChar(String callId, char nextChar) {
        public void onPostDialChar(String callId, char nextChar, Session.Info sessionInfo) {
            findConnectionForAction(callId, "onPostDialChar")
                    .onPostDialChar(nextChar);
        }

        @Override
        public void queryRemoteConnectionServices(RemoteServiceCallback callback) {
        public void queryRemoteConnectionServices(RemoteServiceCallback callback,
                Session.Info sessionInfo) {
            // Not supported from remote connection service.
        }

        @Override
        public void setVideoProvider(String callId, IVideoProvider videoProvider) {
        public void setVideoProvider(String callId, IVideoProvider videoProvider,
                Session.Info sessionInfo) {
            RemoteConnection.VideoProvider remoteVideoProvider = null;
            if (videoProvider != null) {
                remoteVideoProvider = new RemoteConnection.VideoProvider(videoProvider);
@@ -276,32 +283,34 @@ final class RemoteConnectionService {
        }

        @Override
        public void setVideoState(String callId, int videoState) {
        public void setVideoState(String callId, int videoState, Session.Info sessionInfo) {
            findConnectionForAction(callId, "setVideoState")
                    .setVideoState(videoState);
        }

        @Override
        public void setIsVoipAudioMode(String callId, boolean isVoip) {
        public void setIsVoipAudioMode(String callId, boolean isVoip, Session.Info sessionInfo) {
            findConnectionForAction(callId, "setIsVoipAudioMode")
                    .setIsVoipAudioMode(isVoip);
        }

        @Override
        public void setStatusHints(String callId, StatusHints statusHints) {
        public void setStatusHints(String callId, StatusHints statusHints,
                Session.Info sessionInfo) {
            findConnectionForAction(callId, "setStatusHints")
                    .setStatusHints(statusHints);
        }

        @Override
        public void setAddress(String callId, Uri address, int presentation) {
        public void setAddress(String callId, Uri address, int presentation,
                Session.Info sessionInfo) {
            findConnectionForAction(callId, "setAddress")
                    .setAddress(address, presentation);
        }

        @Override
        public void setCallerDisplayName(String callId, String callerDisplayName,
                int presentation) {
                int presentation, Session.Info sessionInfo) {
            findConnectionForAction(callId, "setCallerDisplayName")
                    .setCallerDisplayName(callerDisplayName, presentation);
        }
@@ -312,8 +321,8 @@ final class RemoteConnectionService {
        }

        @Override
        public final void setConferenceableConnections(
                String callId, List<String> conferenceableConnectionIds) {
        public final void setConferenceableConnections(String callId,
                List<String> conferenceableConnectionIds, Session.Info sessionInfo) {
            List<RemoteConnection> conferenceable = new ArrayList<>();
            for (String id : conferenceableConnectionIds) {
                if (mConnectionById.containsKey(id)) {
@@ -331,7 +340,8 @@ final class RemoteConnectionService {
        }

        @Override
        public void addExistingConnection(String callId, ParcelableConnection connection) {
        public void addExistingConnection(String callId, ParcelableConnection connection,
                Session.Info sessionInfo) {
            // TODO: add contents of this method
            RemoteConnection remoteConnction = new RemoteConnection(callId,
                    mOutgoingConnectionServiceRpc, connection);
@@ -340,7 +350,7 @@ final class RemoteConnectionService {
        }

        @Override
        public void putExtras(String callId, Bundle extras) {
        public void putExtras(String callId, Bundle extras, Session.Info sessionInfo) {
            if (hasConnection(callId)) {
                findConnectionForAction(callId, "putExtras").putExtras(extras);
            } else {
@@ -349,7 +359,7 @@ final class RemoteConnectionService {
        }

        @Override
        public void removeExtras(String callId, List<String> keys) {
        public void removeExtras(String callId, List<String> keys, Session.Info sessionInfo) {
            if (hasConnection(callId)) {
                findConnectionForAction(callId, "removeExtra").removeExtras(keys);
            } else {
@@ -358,7 +368,8 @@ final class RemoteConnectionService {
        }

        @Override
        public void onConnectionEvent(String callId, String event, Bundle extras) {
        public void onConnectionEvent(String callId, String event, Bundle extras,
                Session.Info sessionInfo) {
            if (mConnectionById.containsKey(callId)) {
                findConnectionForAction(callId, "onConnectionEvent").onConnectionEvent(event,
                        extras);
+38 −28
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.telecom.ConnectionRequest;
import android.telecom.DisconnectCause;
import android.telecom.Logging.Session;
import android.telecom.ParcelableConnection;
import android.telecom.ParcelableConference;
import android.telecom.StatusHints;
@@ -39,59 +40,68 @@ oneway interface IConnectionServiceAdapter {
    void handleCreateConnectionComplete(
            String callId,
            in ConnectionRequest request,
            in ParcelableConnection connection);
            in ParcelableConnection connection,
            in Session.Info sessionInfo);

    void setActive(String callId);
    void setActive(String callId, in Session.Info sessionInfo);

    void setRinging(String callId);
    void setRinging(String callId, in Session.Info sessionInfo);

    void setDialing(String callId);
    void setDialing(String callId, in Session.Info sessionInfo);

    void setPulling(String callId);
    void setPulling(String callId, in Session.Info sessionInfo);

    void setDisconnected(String callId, in DisconnectCause disconnectCause);
    void setDisconnected(String callId, in DisconnectCause disconnectCause,
    in Session.Info sessionInfo);

    void setOnHold(String callId);
    void setOnHold(String callId, in Session.Info sessionInfo);

    void setRingbackRequested(String callId, boolean ringing);
    void setRingbackRequested(String callId, boolean ringing, in Session.Info sessionInfo);

    void setConnectionCapabilities(String callId, int connectionCapabilities);
    void setConnectionCapabilities(String callId, int connectionCapabilities,
    in Session.Info sessionInfo);

    void setConnectionProperties(String callId, int connectionProperties);
    void setConnectionProperties(String callId, int connectionProperties,
    in Session.Info sessionInfo);

    void setIsConferenced(String callId, String conferenceCallId);
    void setIsConferenced(String callId, String conferenceCallId, in Session.Info sessionInfo);

    void setConferenceMergeFailed(String callId);
    void setConferenceMergeFailed(String callId, in Session.Info sessionInfo);

    void addConferenceCall(String callId, in ParcelableConference conference);
    void addConferenceCall(String callId, in ParcelableConference conference,
    in Session.Info sessionInfo);

    void removeCall(String callId);
    void removeCall(String callId, in Session.Info sessionInfo);

    void onPostDialWait(String callId, String remaining);
    void onPostDialWait(String callId, String remaining, in Session.Info sessionInfo);

    void onPostDialChar(String callId, char nextChar);
    void onPostDialChar(String callId, char nextChar, in Session.Info sessionInfo);

    void queryRemoteConnectionServices(RemoteServiceCallback callback);
    void queryRemoteConnectionServices(RemoteServiceCallback callback, in Session.Info sessionInfo);

    void setVideoProvider(String callId, IVideoProvider videoProvider);
    void setVideoProvider(String callId, IVideoProvider videoProvider, in Session.Info sessionInfo);

    void setVideoState(String callId, int videoState);
    void setVideoState(String callId, int videoState, in Session.Info sessionInfo);

    void setIsVoipAudioMode(String callId, boolean isVoip);
    void setIsVoipAudioMode(String callId, boolean isVoip, in Session.Info sessionInfo);

    void setStatusHints(String callId, in StatusHints statusHints);
    void setStatusHints(String callId, in StatusHints statusHints, in Session.Info sessionInfo);

    void setAddress(String callId, in Uri address, int presentation);
    void setAddress(String callId, in Uri address, int presentation, in Session.Info sessionInfo);

    void setCallerDisplayName(String callId, String callerDisplayName, int presentation);
    void setCallerDisplayName(String callId, String callerDisplayName, int presentation,
    in Session.Info sessionInfo);

    void setConferenceableConnections(String callId, in List<String> conferenceableCallIds);
    void setConferenceableConnections(String callId, in List<String> conferenceableCallIds,
    in Session.Info sessionInfo);

    void addExistingConnection(String callId, in ParcelableConnection connection);
    void addExistingConnection(String callId, in ParcelableConnection connection,
    in Session.Info sessionInfo);

    void putExtras(String callId, in Bundle extras);
    void putExtras(String callId, in Bundle extras, in Session.Info sessionInfo);

    void removeExtras(String callId, in List<String> keys);
    void removeExtras(String callId, in List<String> keys, in Session.Info sessionInfo);

    void onConnectionEvent(String callId, String event, in Bundle extras);
    void onConnectionEvent(String callId, String event, in Bundle extras,
    in Session.Info sessionInfo);
}