Merge "Add ability to add existing connection AND set parent at the same time." into oc-dev
diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java
index dc0c485..f373785 100644
--- a/telecomm/java/android/telecom/Connection.java
+++ b/telecomm/java/android/telecom/Connection.java
@@ -523,6 +523,26 @@
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 1ffc83f..a9655d8 100644
--- a/telecomm/java/android/telecom/ConnectionService.java
+++ b/telecomm/java/android/telecom/ConnectionService.java
@@ -1823,10 +1823,28 @@
*/
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,
@@ -1847,7 +1865,8 @@
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 e9dba68..434abf5 100644
--- a/telecomm/java/android/telecom/ParcelableConnection.java
+++ b/telecomm/java/android/telecom/ParcelableConnection.java
@@ -51,6 +51,35 @@
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 @@
mDisconnectCause = disconnectCause;
mConferenceableConnectionIds = conferenceableConnectionIds;
mExtras = extras;
+ mParentCallId = null;
}
public PhoneAccountHandle getPhoneAccount() {
@@ -176,6 +206,10 @@
return mExtras;
}
+ public final String getParentCallId() {
+ return mParentCallId;
+ }
+
@Override
public String toString() {
return new StringBuilder()
@@ -189,6 +223,8 @@
.append(Connection.propertiesToString(mConnectionProperties))
.append(", extras:")
.append(mExtras)
+ .append(", parent:")
+ .append(mParentCallId)
.toString();
}
@@ -218,6 +254,7 @@
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 @@
statusHints,
disconnectCause,
conferenceableConnectionIds,
- extras);
+ extras,
+ parentCallId);
}
@Override
@@ -274,5 +312,6 @@
destination.writeBundle(mExtras);
destination.writeInt(mConnectionProperties);
destination.writeInt(mSupportedAudioRoutes);
+ destination.writeString(mParentCallId);
}
}