Creating connections for conference event package participants.

- Add "addExistingConnection" method to connection service which provides
a way for a connection service to notify telecom of a pre-existing
connection (connections are normally created through telecom).
- Modify TelephonyConferenceController to retrieve its state from a
multiparty connection in the conference (in the case of IMS calls, this
would be the ImsCall that manages the conference) instead of just taking
the first one.

Bug: 18057361
Change-Id: I26993aec54ecb0ce90ae6983fd3eed9d8d0a5773
This commit is contained in:
Tyler Gunn
2014-10-30 14:27:48 -07:00
parent 272e2f73bd
commit 4a57b9b59b
8 changed files with 146 additions and 2 deletions

View File

@@ -821,6 +821,40 @@ public abstract class ConnectionService extends Service {
}
}
/**
* 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.
*/
public final void addExistingConnection(PhoneAccountHandle phoneAccountHandle,
Connection connection) {
String id = addExistingConnectionInternal(connection);
if (id != null) {
List<String> emptyList = new ArrayList<>(0);
ParcelableConnection parcelableConnection = new ParcelableConnection(
phoneAccountHandle,
connection.getState(),
connection.getCallCapabilities(),
connection.getAddress(),
connection.getAddressPresentation(),
connection.getCallerDisplayName(),
connection.getCallerDisplayNamePresentation(),
connection.getVideoProvider() == null ?
null : connection.getVideoProvider().getInterface(),
connection.getVideoState(),
connection.isRingbackRequested(),
connection.getAudioModeIsVoip(),
connection.getStatusHints(),
connection.getDisconnectCause(),
emptyList);
mAdapter.addExistingConnection(id, parcelableConnection);
}
}
/**
* Returns all the active {@code Connection}s for which this {@code ConnectionService}
* has taken responsibility.
@@ -905,6 +939,12 @@ public abstract class ConnectionService extends Service {
public void onRemoteConferenceAdded(RemoteConference conference) {}
/**
* Called when an existing connection is added remotely.
* @param connection The existing connection which was added.
*/
public void onRemoteExistingConnectionAdded(RemoteConnection connection) {}
/**
* @hide
*/
@@ -917,6 +957,11 @@ public abstract class ConnectionService extends Service {
onRemoteConferenceAdded(remoteConference);
}
/** {@hide} */
void addRemoteExistingConnection(RemoteConnection remoteConnection) {
onRemoteExistingConnectionAdded(remoteConnection);
}
private void onAccountsInitialized() {
mAreAccountsInitialized = true;
for (Runnable r : mPreInitializationConnectionRequests) {
@@ -925,6 +970,18 @@ public abstract class ConnectionService extends Service {
mPreInitializationConnectionRequests.clear();
}
/**
* Adds an existing connection to the list of connections, identified by a new UUID.
*
* @param connection The connection.
* @return The UUID of the connection (e.g. the call-id).
*/
private String addExistingConnectionInternal(Connection connection) {
String id = UUID.randomUUID().toString();
addConnection(id, connection);
return id;
}
private void addConnection(String callId, Connection connection) {
mConnectionById.put(callId, connection);
mIdByConnection.put(connection, callId);