diff options
author | 2017-05-09 14:34:57 -0700 | |
---|---|---|
committer | 2017-05-24 15:15:44 -0700 | |
commit | 78da7816da1acdb1cce3f4b5943d105c3383debe (patch) | |
tree | 6f50257f18e65981102981b9bcd76dd9ad4df04b | |
parent | e943a3cbe7dd9d7f1ab977e64178730190b37755 (diff) |
Add ability to add existing connection AND set parent at the same time.
This is useful for IMS conferences where we want to add a connection and
set it as a child of a conference at the same time.
Test: Manual
Bug: 37581781
Change-Id: Id09c8296ffe18893c5642d403c6a69ad6c9765e2
-rw-r--r-- | telecomm/java/android/telecom/Connection.java | 20 | ||||
-rw-r--r-- | telecomm/java/android/telecom/ConnectionService.java | 21 | ||||
-rw-r--r-- | telecomm/java/android/telecom/ParcelableConnection.java | 41 |
3 files changed, 80 insertions, 2 deletions
diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index dc0c485eed3c..f37378591e71 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -523,6 +523,26 @@ public abstract class Connection extends Conferenceable { public static final String EVENT_CALL_MERGE_FAILED = "android.telecom.event.CALL_MERGE_FAILED"; /** + * Connection event used to inform {@link InCallService}s when the process of merging a + * Connection into a conference has begun. + * <p> + * Sent via {@link #sendConnectionEvent(String, Bundle)}. The {@link Bundle} parameter is + * expected to be null when this connection event is used. + * @hide + */ + public static final String EVENT_MERGE_START = "android.telecom.event.MERGE_START"; + + /** + * Connection event used to inform {@link InCallService}s when the process of merging a + * Connection into a conference has completed. + * <p> + * Sent via {@link #sendConnectionEvent(String, Bundle)}. The {@link Bundle} parameter is + * expected to be null when this connection event is used. + * @hide + */ + public static final String EVENT_MERGE_COMPLETE = "android.telecom.event.MERGE_COMPLETE"; + + /** * Connection event used to inform {@link InCallService}s when a call has been put on hold by * the remote party. * <p> diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java index bf8f8e4e723e..d203d1949a06 100644 --- a/telecomm/java/android/telecom/ConnectionService.java +++ b/telecomm/java/android/telecom/ConnectionService.java @@ -1770,10 +1770,28 @@ public abstract class ConnectionService extends Service { */ public final void addExistingConnection(PhoneAccountHandle phoneAccountHandle, Connection connection) { + addExistingConnection(phoneAccountHandle, connection, null /* conference */); + } + + /** + * Adds a connection created by the {@link ConnectionService} and informs telecom of the new + * connection. + * + * @param phoneAccountHandle The phone account handle for the connection. + * @param connection The connection to add. + * @param conference The parent conference of the new connection. + * @hide + */ + public final void addExistingConnection(PhoneAccountHandle phoneAccountHandle, + Connection connection, Conference conference) { String id = addExistingConnectionInternal(phoneAccountHandle, connection); if (id != null) { List<String> emptyList = new ArrayList<>(0); + String conferenceId = null; + if (conference != null) { + conferenceId = mIdByConference.get(conference); + } ParcelableConnection parcelableConnection = new ParcelableConnection( phoneAccountHandle, @@ -1794,7 +1812,8 @@ public abstract class ConnectionService extends Service { connection.getStatusHints(), connection.getDisconnectCause(), emptyList, - connection.getExtras()); + connection.getExtras(), + conferenceId); mAdapter.addExistingConnection(id, parcelableConnection); } } diff --git a/telecomm/java/android/telecom/ParcelableConnection.java b/telecomm/java/android/telecom/ParcelableConnection.java index e9dba686ff82..434abf53624c 100644 --- a/telecomm/java/android/telecom/ParcelableConnection.java +++ b/telecomm/java/android/telecom/ParcelableConnection.java @@ -51,6 +51,35 @@ public final class ParcelableConnection implements Parcelable { private final DisconnectCause mDisconnectCause; private final List<String> mConferenceableConnectionIds; private final Bundle mExtras; + private String mParentCallId; + + /** @hide */ + public ParcelableConnection( + PhoneAccountHandle phoneAccount, + int state, + int capabilities, + int properties, + int supportedAudioRoutes, + Uri address, + int addressPresentation, + String callerDisplayName, + int callerDisplayNamePresentation, + IVideoProvider videoProvider, + int videoState, + boolean ringbackRequested, + boolean isVoipAudioMode, + long connectTimeMillis, + StatusHints statusHints, + DisconnectCause disconnectCause, + List<String> conferenceableConnectionIds, + Bundle extras, + String parentCallId) { + this(phoneAccount, state, capabilities, properties, supportedAudioRoutes, address, + addressPresentation, callerDisplayName, callerDisplayNamePresentation, + videoProvider, videoState, ringbackRequested, isVoipAudioMode, connectTimeMillis, + statusHints, disconnectCause, conferenceableConnectionIds, extras); + mParentCallId = parentCallId; + } /** @hide */ public ParcelableConnection( @@ -90,6 +119,7 @@ public final class ParcelableConnection implements Parcelable { mDisconnectCause = disconnectCause; mConferenceableConnectionIds = conferenceableConnectionIds; mExtras = extras; + mParentCallId = null; } public PhoneAccountHandle getPhoneAccount() { @@ -176,6 +206,10 @@ public final class ParcelableConnection implements Parcelable { return mExtras; } + public final String getParentCallId() { + return mParentCallId; + } + @Override public String toString() { return new StringBuilder() @@ -189,6 +223,8 @@ public final class ParcelableConnection implements Parcelable { .append(Connection.propertiesToString(mConnectionProperties)) .append(", extras:") .append(mExtras) + .append(", parent:") + .append(mParentCallId) .toString(); } @@ -218,6 +254,7 @@ public final class ParcelableConnection implements Parcelable { Bundle extras = Bundle.setDefusable(source.readBundle(classLoader), true); int properties = source.readInt(); int supportedAudioRoutes = source.readInt(); + String parentCallId = source.readString(); return new ParcelableConnection( phoneAccount, @@ -237,7 +274,8 @@ public final class ParcelableConnection implements Parcelable { statusHints, disconnectCause, conferenceableConnectionIds, - extras); + extras, + parentCallId); } @Override @@ -274,5 +312,6 @@ public final class ParcelableConnection implements Parcelable { destination.writeBundle(mExtras); destination.writeInt(mConnectionProperties); destination.writeInt(mSupportedAudioRoutes); + destination.writeString(mParentCallId); } } |