Merge cherrypicks of [15712549, 15712550, 15712551, 15712641, 15712642, 15712643, 15710166, 15711786, 15711787, 15711788, 15711789, 15712646, 15712631, 15712552, 15712632, 15712633, 15712634, 15712559, 15712560, 15712561] into sc-d1-release
Change-Id: I2f75348cfba79d048e12c5f06c0f055b16776637
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index 8fae923..0218124 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -85,6 +85,7 @@
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
/**
* Encapsulates all aspects of a given phone call throughout its lifecycle, starting
@@ -3160,6 +3161,13 @@
void setConferenceableCalls(List<Call> conferenceableCalls) {
mConferenceableCalls.clear();
mConferenceableCalls.addAll(conferenceableCalls);
+ String confCallIds = "";
+ if (!conferenceableCalls.isEmpty()) {
+ confCallIds = conferenceableCalls.stream()
+ .map(c -> c.getId())
+ .collect(Collectors.joining(","));
+ }
+ Log.addEvent(this, LogUtils.Events.CONF_CALLS_CHANGED, confCallIds);
for (Listener l : mListeners) {
l.onConferenceableCallsChanged(this);
diff --git a/src/com/android/server/telecom/ConnectionServiceWrapper.java b/src/com/android/server/telecom/ConnectionServiceWrapper.java
index 21c6844..da2669c 100755
--- a/src/com/android/server/telecom/ConnectionServiceWrapper.java
+++ b/src/com/android/server/telecom/ConnectionServiceWrapper.java
@@ -920,6 +920,45 @@
} else {
connectIdToCheck = callId;
}
+
+ // Handle the case where an existing connection was added by Telephony via
+ // a connection manager. The remote connection service API does not include
+ // the ability to specify a parent connection when adding an existing
+ // connection, so we stash the desired parent in the connection extras.
+ if (connectionExtras != null
+ && connectionExtras.containsKey(
+ Connection.EXTRA_ADD_TO_CONFERENCE_ID)
+ && connection.getParentCallId() == null) {
+ String parentId = connectionExtras.getString(
+ Connection.EXTRA_ADD_TO_CONFERENCE_ID);
+ Log.i(ConnectionServiceWrapper.this, "addExistingConnection: remote "
+ + "connection will auto-add to parent %s", parentId);
+ // Replace parcelable connection instance, swapping the new desired
+ // parent in.
+ connection = new ParcelableConnection(
+ connection.getPhoneAccount(),
+ connection.getState(),
+ connection.getConnectionCapabilities(),
+ connection.getConnectionProperties(),
+ connection.getSupportedAudioRoutes(),
+ connection.getHandle(),
+ connection.getHandlePresentation(),
+ connection.getCallerDisplayName(),
+ connection.getCallerDisplayNamePresentation(),
+ connection.getVideoProvider(),
+ connection.getVideoState(),
+ connection.isRingbackRequested(),
+ connection.getIsVoipAudioMode(),
+ connection.getConnectTimeMillis(),
+ connection.getConnectElapsedTimeMillis(),
+ connection.getStatusHints(),
+ connection.getDisconnectCause(),
+ connection.getConferenceableConnectionIds(),
+ connection.getExtras(),
+ parentId,
+ connection.getCallDirection(),
+ connection.getCallerNumberVerificationStatus());
+ }
// Check to see if this Connection has already been added.
Call alreadyAddedConnection = mCallsManager
.getAlreadyAddedConnection(connectIdToCheck);
diff --git a/src/com/android/server/telecom/LogUtils.java b/src/com/android/server/telecom/LogUtils.java
index 138e441..f53f239 100644
--- a/src/com/android/server/telecom/LogUtils.java
+++ b/src/com/android/server/telecom/LogUtils.java
@@ -138,6 +138,7 @@
public static final String REMOVE_CHILD = "REMOVE_CHILD";
public static final String SET_PARENT = "SET_PARENT";
public static final String CONF_STATE_CHANGED = "CONF_STATE_CHANGED";
+ public static final String CONF_CALLS_CHANGED = "CONF_CALLS_CHANGED";
public static final String CALL_DIRECTION_CHANGED = "CALL_DIRECTION_CHANGED";
public static final String MUTE = "MUTE";
public static final String UNMUTE = "UNMUTE";