Merge "Add adhoc conference APIs to RemoteConnection and RemoteConnectionService." am: 329c6ff777
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1388908 Change-Id: I051c16bcaca7f30db5c62772a3d3f39c23f18304
This commit is contained in:
@ -44071,7 +44071,9 @@ package android.telecom {
|
|||||||
method public final void addExistingConnection(android.telecom.PhoneAccountHandle, android.telecom.Connection);
|
method public final void addExistingConnection(android.telecom.PhoneAccountHandle, android.telecom.Connection);
|
||||||
method public final void conferenceRemoteConnections(android.telecom.RemoteConnection, android.telecom.RemoteConnection);
|
method public final void conferenceRemoteConnections(android.telecom.RemoteConnection, android.telecom.RemoteConnection);
|
||||||
method public final void connectionServiceFocusReleased();
|
method public final void connectionServiceFocusReleased();
|
||||||
|
method @Nullable public final android.telecom.RemoteConference createRemoteIncomingConference(@Nullable android.telecom.PhoneAccountHandle, @Nullable android.telecom.ConnectionRequest);
|
||||||
method public final android.telecom.RemoteConnection createRemoteIncomingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
|
method public final android.telecom.RemoteConnection createRemoteIncomingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
|
||||||
|
method @Nullable public final android.telecom.RemoteConference createRemoteOutgoingConference(@Nullable android.telecom.PhoneAccountHandle, @Nullable android.telecom.ConnectionRequest);
|
||||||
method public final android.telecom.RemoteConnection createRemoteOutgoingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
|
method public final android.telecom.RemoteConnection createRemoteOutgoingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
|
||||||
method public final java.util.Collection<android.telecom.Conference> getAllConferences();
|
method public final java.util.Collection<android.telecom.Conference> getAllConferences();
|
||||||
method public final java.util.Collection<android.telecom.Connection> getAllConnections();
|
method public final java.util.Collection<android.telecom.Connection> getAllConnections();
|
||||||
@ -44302,6 +44304,7 @@ package android.telecom {
|
|||||||
|
|
||||||
public final class RemoteConnection {
|
public final class RemoteConnection {
|
||||||
method public void abort();
|
method public void abort();
|
||||||
|
method public void addConferenceParticipants(@NonNull java.util.List<android.net.Uri>);
|
||||||
method public void answer();
|
method public void answer();
|
||||||
method public void disconnect();
|
method public void disconnect();
|
||||||
method public android.net.Uri getAddress();
|
method public android.net.Uri getAddress();
|
||||||
|
@ -43927,7 +43927,9 @@ package android.telecom {
|
|||||||
method public final void addExistingConnection(android.telecom.PhoneAccountHandle, android.telecom.Connection);
|
method public final void addExistingConnection(android.telecom.PhoneAccountHandle, android.telecom.Connection);
|
||||||
method public final void conferenceRemoteConnections(android.telecom.RemoteConnection, android.telecom.RemoteConnection);
|
method public final void conferenceRemoteConnections(android.telecom.RemoteConnection, android.telecom.RemoteConnection);
|
||||||
method public final void connectionServiceFocusReleased();
|
method public final void connectionServiceFocusReleased();
|
||||||
|
method @Nullable public final android.telecom.RemoteConference createRemoteIncomingConference(@Nullable android.telecom.PhoneAccountHandle, @Nullable android.telecom.ConnectionRequest);
|
||||||
method public final android.telecom.RemoteConnection createRemoteIncomingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
|
method public final android.telecom.RemoteConnection createRemoteIncomingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
|
||||||
|
method @Nullable public final android.telecom.RemoteConference createRemoteOutgoingConference(@Nullable android.telecom.PhoneAccountHandle, @Nullable android.telecom.ConnectionRequest);
|
||||||
method public final android.telecom.RemoteConnection createRemoteOutgoingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
|
method public final android.telecom.RemoteConnection createRemoteOutgoingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
|
||||||
method public final java.util.Collection<android.telecom.Conference> getAllConferences();
|
method public final java.util.Collection<android.telecom.Conference> getAllConferences();
|
||||||
method public final java.util.Collection<android.telecom.Connection> getAllConnections();
|
method public final java.util.Collection<android.telecom.Connection> getAllConnections();
|
||||||
@ -44158,6 +44160,7 @@ package android.telecom {
|
|||||||
|
|
||||||
public final class RemoteConnection {
|
public final class RemoteConnection {
|
||||||
method public void abort();
|
method public void abort();
|
||||||
|
method public void addConferenceParticipants(@NonNull java.util.List<android.net.Uri>);
|
||||||
method public void answer();
|
method public void answer();
|
||||||
method public void disconnect();
|
method public void disconnect();
|
||||||
method public android.net.Uri getAddress();
|
method public android.net.Uri getAddress();
|
||||||
|
@ -2487,6 +2487,42 @@ public abstract class ConnectionService extends Service {
|
|||||||
connectionManagerPhoneAccount, request, false);
|
connectionManagerPhoneAccount, request, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ask some other {@code ConnectionService} to create a {@code RemoteConference} given an
|
||||||
|
* incoming request. This is used by {@code ConnectionService}s that are registered with
|
||||||
|
* {@link PhoneAccount#CAPABILITY_ADHOC_CONFERENCE_CALLING}.
|
||||||
|
*
|
||||||
|
* @param connectionManagerPhoneAccount See description at
|
||||||
|
* {@link #onCreateOutgoingConnection(PhoneAccountHandle, ConnectionRequest)}.
|
||||||
|
* @param request Details about the incoming conference call.
|
||||||
|
* @return The {@code RemoteConference} object to satisfy this call, or {@code null} to not
|
||||||
|
* handle the call.
|
||||||
|
*/
|
||||||
|
public final @Nullable RemoteConference createRemoteIncomingConference(
|
||||||
|
@Nullable PhoneAccountHandle connectionManagerPhoneAccount,
|
||||||
|
@Nullable ConnectionRequest request) {
|
||||||
|
return mRemoteConnectionManager.createRemoteConference(connectionManagerPhoneAccount,
|
||||||
|
request, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ask some other {@code ConnectionService} to create a {@code RemoteConference} given an
|
||||||
|
* outgoing request. This is used by {@code ConnectionService}s that are registered with
|
||||||
|
* {@link PhoneAccount#CAPABILITY_ADHOC_CONFERENCE_CALLING}.
|
||||||
|
*
|
||||||
|
* @param connectionManagerPhoneAccount See description at
|
||||||
|
* {@link #onCreateOutgoingConnection(PhoneAccountHandle, ConnectionRequest)}.
|
||||||
|
* @param request Details about the outgoing conference call.
|
||||||
|
* @return The {@code RemoteConference} object to satisfy this call, or {@code null} to not
|
||||||
|
* handle the call.
|
||||||
|
*/
|
||||||
|
public final @Nullable RemoteConference createRemoteOutgoingConference(
|
||||||
|
@Nullable PhoneAccountHandle connectionManagerPhoneAccount,
|
||||||
|
@Nullable ConnectionRequest request) {
|
||||||
|
return mRemoteConnectionManager.createRemoteConference(connectionManagerPhoneAccount,
|
||||||
|
request, false);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates to the relevant {@code RemoteConnectionService} that the specified
|
* Indicates to the relevant {@code RemoteConnectionService} that the specified
|
||||||
* {@link RemoteConnection}s should be merged into a conference call.
|
* {@link RemoteConnection}s should be merged into a conference call.
|
||||||
|
@ -16,14 +16,14 @@
|
|||||||
|
|
||||||
package android.telecom;
|
package android.telecom;
|
||||||
|
|
||||||
import com.android.internal.telecom.IConnectionService;
|
|
||||||
|
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.annotation.SystemApi;
|
import android.annotation.SystemApi;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
|
|
||||||
|
import com.android.internal.telecom.IConnectionService;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -154,6 +154,14 @@ public final class RemoteConference {
|
|||||||
mConnectionService = connectionService;
|
mConnectionService = connectionService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
RemoteConference(DisconnectCause disconnectCause) {
|
||||||
|
mId = "NULL";
|
||||||
|
mConnectionService = null;
|
||||||
|
mState = Connection.STATE_DISCONNECTED;
|
||||||
|
mDisconnectCause = disconnectCause;
|
||||||
|
}
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
String getId() {
|
String getId() {
|
||||||
return mId;
|
return mId;
|
||||||
@ -583,4 +591,16 @@ public final class RemoteConference {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a {@link RemoteConference} represents a failure, and which will
|
||||||
|
* be in {@link Connection#STATE_DISCONNECTED}.
|
||||||
|
*
|
||||||
|
* @param disconnectCause The disconnect cause.
|
||||||
|
* @return a failed {@link RemoteConference}
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static RemoteConference failure(DisconnectCause disconnectCause) {
|
||||||
|
return new RemoteConference(disconnectCause);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,10 +16,6 @@
|
|||||||
|
|
||||||
package android.telecom;
|
package android.telecom;
|
||||||
|
|
||||||
import com.android.internal.telecom.IConnectionService;
|
|
||||||
import com.android.internal.telecom.IVideoCallback;
|
|
||||||
import com.android.internal.telecom.IVideoProvider;
|
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.annotation.SystemApi;
|
import android.annotation.SystemApi;
|
||||||
@ -32,6 +28,10 @@ import android.os.IBinder;
|
|||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.view.Surface;
|
import android.view.Surface;
|
||||||
|
|
||||||
|
import com.android.internal.telecom.IConnectionService;
|
||||||
|
import com.android.internal.telecom.IVideoCallback;
|
||||||
|
import com.android.internal.telecom.IVideoProvider;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -1060,6 +1060,23 @@ public final class RemoteConnection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instructs this {@link RemoteConnection} to initiate a conference with a list of
|
||||||
|
* participants.
|
||||||
|
* <p>
|
||||||
|
*
|
||||||
|
* @param participants with which conference call will be formed.
|
||||||
|
*/
|
||||||
|
public void addConferenceParticipants(@NonNull List<Uri> participants) {
|
||||||
|
try {
|
||||||
|
if (mConnected) {
|
||||||
|
mConnectionService.addConferenceParticipants(mConnectionId, participants,
|
||||||
|
null /*Session.Info*/);
|
||||||
|
}
|
||||||
|
} catch (RemoteException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the audio state of this {@code RemoteConnection}.
|
* Set the audio state of this {@code RemoteConnection}.
|
||||||
*
|
*
|
||||||
|
@ -73,6 +73,37 @@ public class RemoteConnectionManager {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ask a {@code RemoteConnectionService} to create a {@code RemoteConference}.
|
||||||
|
* @param connectionManagerPhoneAccount See description at
|
||||||
|
* {@link ConnectionService#onCreateOutgoingConnection(PhoneAccountHandle, ConnectionRequest)}.
|
||||||
|
* @param request Details about the incoming conference call.
|
||||||
|
* @param isIncoming {@code true} if it's an incoming conference.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public RemoteConference createRemoteConference(
|
||||||
|
PhoneAccountHandle connectionManagerPhoneAccount,
|
||||||
|
ConnectionRequest request,
|
||||||
|
boolean isIncoming) {
|
||||||
|
PhoneAccountHandle accountHandle = request.getAccountHandle();
|
||||||
|
if (accountHandle == null) {
|
||||||
|
throw new IllegalArgumentException("accountHandle must be specified.");
|
||||||
|
}
|
||||||
|
|
||||||
|
ComponentName componentName = request.getAccountHandle().getComponentName();
|
||||||
|
if (!mRemoteConnectionServices.containsKey(componentName)) {
|
||||||
|
throw new UnsupportedOperationException("accountHandle not supported: "
|
||||||
|
+ componentName);
|
||||||
|
}
|
||||||
|
|
||||||
|
RemoteConnectionService remoteService = mRemoteConnectionServices.get(componentName);
|
||||||
|
if (remoteService != null) {
|
||||||
|
return remoteService.createRemoteConference(
|
||||||
|
connectionManagerPhoneAccount, request, isIncoming);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public void conferenceRemoteConnections(RemoteConnection a, RemoteConnection b) {
|
public void conferenceRemoteConnections(RemoteConnection a, RemoteConnection b) {
|
||||||
if (a.getConnectionService() == b.getConnectionService()) {
|
if (a.getConnectionService() == b.getConnectionService()) {
|
||||||
try {
|
try {
|
||||||
|
@ -31,9 +31,9 @@ import com.android.internal.telecom.RemoteServiceCallback;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -591,6 +591,38 @@ final class RemoteConnectionService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RemoteConference createRemoteConference(
|
||||||
|
PhoneAccountHandle connectionManagerPhoneAccount,
|
||||||
|
ConnectionRequest request,
|
||||||
|
boolean isIncoming) {
|
||||||
|
final String id = UUID.randomUUID().toString();
|
||||||
|
try {
|
||||||
|
if (mConferenceById.isEmpty()) {
|
||||||
|
mOutgoingConnectionServiceRpc.addConnectionServiceAdapter(mServant.getStub(),
|
||||||
|
null /*Session.Info*/);
|
||||||
|
}
|
||||||
|
RemoteConference conference = new RemoteConference(id, mOutgoingConnectionServiceRpc);
|
||||||
|
mOutgoingConnectionServiceRpc.createConference(connectionManagerPhoneAccount,
|
||||||
|
id,
|
||||||
|
request,
|
||||||
|
isIncoming,
|
||||||
|
false /* isUnknownCall */,
|
||||||
|
null /*Session.info*/);
|
||||||
|
conference.registerCallback(new RemoteConference.Callback() {
|
||||||
|
@Override
|
||||||
|
public void onDestroyed(RemoteConference conference) {
|
||||||
|
mConferenceById.remove(id);
|
||||||
|
maybeDisconnectAdapter();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
conference.putExtras(request.getExtras());
|
||||||
|
return conference;
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
return RemoteConference.failure(
|
||||||
|
new DisconnectCause(DisconnectCause.ERROR, e.toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private boolean hasConnection(String callId) {
|
private boolean hasConnection(String callId) {
|
||||||
return mConnectionById.containsKey(callId);
|
return mConnectionById.containsKey(callId);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user