From 1a7061ba950538c93d92c0448752a212039cc06a Mon Sep 17 00:00:00 2001 From: Sailesh Nepal Date: Wed, 9 Jul 2014 21:03:20 -0700 Subject: [PATCH] Add Connection.setCallCapabilities This will be used to enable things like hold and conferencing. Change-Id: I90238eeefbcbfaa044881d80833b62e4474821d6 --- api/current.txt | 6 +++-- .../java/android/telecomm/Connection.java | 24 ++++++++++--------- .../android/telecomm/ConnectionService.java | 4 ++-- .../telecomm/ConnectionServiceAdapter.java | 10 ++------ .../android/telecomm/RemoteConnection.java | 16 +++++++++++++ .../telecomm/RemoteConnectionService.java | 6 +++-- .../telecomm/IConnectionServiceAdapter.aidl | 2 +- 7 files changed, 42 insertions(+), 26 deletions(-) diff --git a/api/current.txt b/api/current.txt index 29ec56b12d5b3..896bfb32971a1 100644 --- a/api/current.txt +++ b/api/current.txt @@ -27626,13 +27626,13 @@ package android.telecomm { ctor protected Connection(); method public final boolean getAudioModeIsVoip(); method public final android.telecomm.CallAudioState getCallAudioState(); + method public final int getCallCapabilities(); method public final java.util.List getChildConnections(); method public final int getFeatures(); method public final android.net.Uri getHandle(); method public final android.telecomm.Connection getParentConnection(); method public final int getState(); method public final android.telecomm.StatusHints getStatusHints(); - method public final boolean isConferenceCapable(); method public final boolean isConferenceConnection(); method public final boolean isRequestingRingback(); method protected void onAbort(); @@ -27651,13 +27651,13 @@ package android.telecomm { method protected void onUnhold(); method public final void setActive(); method public final void setAudioModeIsVoip(boolean); + method public final void setCallCapabilities(int); method public final void setCallVideoProvider(android.telecomm.CallVideoProvider); method public final void setDestroyed(); method public final void setDialing(); method public final void setDisconnected(int, java.lang.String); method public final void setFeatures(int); method public final void setHandle(android.net.Uri); - method public final void setIsConferenceCapable(boolean); method public final void setOnHold(); method public final void setParentConnection(android.telecomm.Connection); method public final void setPostDialWait(java.lang.String); @@ -27814,6 +27814,7 @@ package android.telecomm { method public void answer(); method public void disconnect(); method public boolean getAudioModeIsVoip(); + method public int getCallCapabilities(); method public int getDisconnectCause(); method public java.lang.String getDisconnectMessage(); method public int getFeatures(); @@ -27830,6 +27831,7 @@ package android.telecomm { } public static abstract interface RemoteConnection.Listener { + method public abstract void onCallCapabilitiesChanged(android.telecomm.RemoteConnection, int); method public abstract void onDestroyed(android.telecomm.RemoteConnection); method public abstract void onDisconnected(android.telecomm.RemoteConnection, int, java.lang.String); method public abstract void onFeaturesChanged(android.telecomm.RemoteConnection, int); diff --git a/telecomm/java/android/telecomm/Connection.java b/telecomm/java/android/telecomm/Connection.java index 770e3856ce817..2fd001abfc74d 100644 --- a/telecomm/java/android/telecomm/Connection.java +++ b/telecomm/java/android/telecomm/Connection.java @@ -41,7 +41,7 @@ public abstract class Connection { void onPostDialWait(Connection c, String remaining); void onRequestingRingback(Connection c, boolean ringback); void onDestroyed(Connection c); - void onConferenceCapableChanged(Connection c, boolean isConferenceCapable); + void onCallCapabilitiesChanged(Connection c, int callCapabilities); void onParentConnectionChanged(Connection c, Connection parent); void onSetCallVideoProvider(Connection c, CallVideoProvider callVideoProvider); void onSetAudioModeIsVoip(Connection c, boolean isVoip); @@ -76,7 +76,7 @@ public abstract class Connection { public void onRequestingRingback(Connection c, boolean ringback) {} @Override - public void onConferenceCapableChanged(Connection c, boolean isConferenceCapable) {} + public void onCallCapabilitiesChanged(Connection c, int callCapabilities) {} @Override public void onParentConnectionChanged(Connection c, Connection parent) {} @@ -110,7 +110,7 @@ public abstract class Connection { private CallAudioState mCallAudioState; private Uri mHandle; private boolean mRequestingRingback = false; - private boolean mIsConferenceCapable = false; + private int mCallCapabilities; private Connection mParentConnection; private boolean mAudioModeIsVoip; private StatusHints mStatusHints; @@ -279,10 +279,10 @@ public abstract class Connection { } /** - * Returns whether this connection is capable of being conferenced. + * Returns the connection's {@link CallCapabilities} */ - public final boolean isConferenceCapable() { - return mIsConferenceCapable; + public final int getCallCapabilities() { + return mCallCapabilities; } /** @@ -394,13 +394,15 @@ public abstract class Connection { } /** - * TODO(santoscordon): Needs documentation. + * Sets the connection's {@link CallCapabilities}. + * + * @param callCapabilities The new call capabilities. */ - public final void setIsConferenceCapable(boolean isConferenceCapable) { - if (mIsConferenceCapable != isConferenceCapable) { - mIsConferenceCapable = isConferenceCapable; + public final void setCallCapabilities(int callCapabilities) { + if (mCallCapabilities != callCapabilities) { + mCallCapabilities = callCapabilities; for (Listener l : mListeners) { - l.onConferenceCapableChanged(this, mIsConferenceCapable); + l.onCallCapabilitiesChanged(this, mCallCapabilities); } } } diff --git a/telecomm/java/android/telecomm/ConnectionService.java b/telecomm/java/android/telecomm/ConnectionService.java index 905304e3ce4ce..1bc184bbb752b 100644 --- a/telecomm/java/android/telecomm/ConnectionService.java +++ b/telecomm/java/android/telecomm/ConnectionService.java @@ -346,9 +346,9 @@ public abstract class ConnectionService extends Service { } @Override - public void onConferenceCapableChanged(Connection c, boolean isConferenceCapable) { + public void onCallCapabilitiesChanged(Connection c, int callCapabilities) { String id = mIdByConnection.get(c); - mAdapter.setCanConference(id, isConferenceCapable); + mAdapter.setCallCapabilities(id, callCapabilities); } /** ${inheritDoc} */ diff --git a/telecomm/java/android/telecomm/ConnectionServiceAdapter.java b/telecomm/java/android/telecomm/ConnectionServiceAdapter.java index 890513f40d084..b60e7c63da886 100644 --- a/telecomm/java/android/telecomm/ConnectionServiceAdapter.java +++ b/telecomm/java/android/telecomm/ConnectionServiceAdapter.java @@ -221,16 +221,10 @@ final class ConnectionServiceAdapter implements DeathRecipient { } } - /** - * Indicates that the specified call can conference with any of the specified list of calls. - * - * @param callId The unique ID of the call. - * @param canConference Specified whether or not the call can be conferenced. - */ - void setCanConference(String callId, boolean canConference) { + void setCallCapabilities(String callId, int capabilities) { for (IConnectionServiceAdapter adapter : mAdapters) { try { - adapter.setCanConference(callId, canConference); + adapter.setCallCapabilities(callId, capabilities); } catch (RemoteException ignored) { } } diff --git a/telecomm/java/android/telecomm/RemoteConnection.java b/telecomm/java/android/telecomm/RemoteConnection.java index 665a8646432db..8ef283a48d50e 100644 --- a/telecomm/java/android/telecomm/RemoteConnection.java +++ b/telecomm/java/android/telecomm/RemoteConnection.java @@ -35,6 +35,7 @@ public final class RemoteConnection { void onStateChanged(RemoteConnection connection, int state); void onDisconnected(RemoteConnection connection, int cause, String message); void onRequestingRingback(RemoteConnection connection, boolean ringback); + void onCallCapabilitiesChanged(RemoteConnection connection, int callCapabilities); void onPostDialWait(RemoteConnection connection, String remainingDigits); void onFeaturesChanged(RemoteConnection connection, int features); void onSetAudioModeIsVoip(RemoteConnection connection, boolean isVoip); @@ -51,6 +52,7 @@ public final class RemoteConnection { private String mDisconnectMessage; private boolean mRequestingRingback; private boolean mConnected; + private int mCallCapabilities; private int mFeatures; private boolean mAudioModeIsVoip; private StatusHints mStatusHints; @@ -85,6 +87,10 @@ public final class RemoteConnection { return mDisconnectMessage; } + public int getCallCapabilities() { + return mCallCapabilities; + } + public int getFeatures() { return mFeatures; } @@ -226,6 +232,16 @@ public final class RemoteConnection { } } + /** + * @hide + */ + void setCallCapabilities(int callCapabilities) { + mCallCapabilities = callCapabilities; + for (Listener l : mListeners) { + l.onCallCapabilitiesChanged(this, callCapabilities); + } + } + /** * @hide */ diff --git a/telecomm/java/android/telecomm/RemoteConnectionService.java b/telecomm/java/android/telecomm/RemoteConnectionService.java index 42a9f5f346feb..c22005b0c783a 100644 --- a/telecomm/java/android/telecomm/RemoteConnectionService.java +++ b/telecomm/java/android/telecomm/RemoteConnectionService.java @@ -144,8 +144,10 @@ final class RemoteConnectionService implements DeathRecipient { /** ${inheritDoc} */ @Override - public void setCanConference(String connectionId, boolean canConference) { - // not supported for remote connections. + public void setCallCapabilities(String connectionId, int callCapabilities) { + if (isCurrentConnection(connectionId)) { + mConnection.setCallCapabilities(callCapabilities); + } } /** ${inheritDoc} */ diff --git a/telecomm/java/com/android/internal/telecomm/IConnectionServiceAdapter.aidl b/telecomm/java/com/android/internal/telecomm/IConnectionServiceAdapter.aidl index 47cc78ecf44ac..e724bfb0eabfc 100644 --- a/telecomm/java/com/android/internal/telecomm/IConnectionServiceAdapter.aidl +++ b/telecomm/java/com/android/internal/telecomm/IConnectionServiceAdapter.aidl @@ -50,7 +50,7 @@ oneway interface IConnectionServiceAdapter { void setRequestingRingback(String callId, boolean ringing); - void setCanConference(String callId, boolean canConference); + void setCallCapabilities(String callId, int callCapabilities); void setIsConferenced(String callId, String conferenceCallId);