Merge "Improve remote connection logging."
This commit is contained in:
@@ -734,6 +734,31 @@ public abstract class Connection extends Conferenceable {
|
|||||||
public static final String EXTRA_ORIGINAL_CONNECTION_ID =
|
public static final String EXTRA_ORIGINAL_CONNECTION_ID =
|
||||||
"android.telecom.extra.ORIGINAL_CONNECTION_ID";
|
"android.telecom.extra.ORIGINAL_CONNECTION_ID";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extra key set on a {@link Connection} when it was created via a remote connection service.
|
||||||
|
* For example, if a connection manager requests a remote connection service to create a call
|
||||||
|
* using one of the remote connection service's phone account handle, this extra will be set so
|
||||||
|
* that Telecom knows that the wrapped remote connection originated in a remote connection
|
||||||
|
* service. We stash this in the extras since connection managers will typically copy the
|
||||||
|
* extras from a {@link RemoteConnection} to a {@link Connection} (there is ultimately not
|
||||||
|
* other way to relate a {@link RemoteConnection} to a {@link Connection}.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final String EXTRA_REMOTE_PHONE_ACCOUNT_HANDLE =
|
||||||
|
"android.telecom.extra.REMOTE_PHONE_ACCOUNT_HANDLE";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extra key set from a {@link ConnectionService} when using the remote connection APIs
|
||||||
|
* (e.g. {@link RemoteConnectionService#createRemoteConnection(PhoneAccountHandle,
|
||||||
|
* ConnectionRequest, boolean)}) to create a remote connection. Provides the receiving
|
||||||
|
* {@link ConnectionService} with a means to know the package name of the requesting
|
||||||
|
* {@link ConnectionService} so that {@link #EXTRA_REMOTE_PHONE_ACCOUNT_HANDLE} can be set for
|
||||||
|
* better visibility in Telecom of where a connection ultimately originated.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final String EXTRA_REMOTE_CONNECTION_ORIGINATING_PACKAGE_NAME =
|
||||||
|
"android.telecom.extra.REMOTE_CONNECTION_ORIGINATING_PACKAGE_NAME";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Boolean connection extra key set on the extras passed to
|
* Boolean connection extra key set on the extras passed to
|
||||||
* {@link Connection#sendConnectionEvent} which indicates that audio is present
|
* {@link Connection#sendConnectionEvent} which indicates that audio is present
|
||||||
|
|||||||
@@ -1859,9 +1859,25 @@ public abstract class ConnectionService extends Service {
|
|||||||
new DisconnectCause(DisconnectCause.ERROR, "IMPL_RETURNED_NULL_CONFERENCE"),
|
new DisconnectCause(DisconnectCause.ERROR, "IMPL_RETURNED_NULL_CONFERENCE"),
|
||||||
request.getAccountHandle());
|
request.getAccountHandle());
|
||||||
}
|
}
|
||||||
if (conference.getExtras() != null) {
|
|
||||||
conference.getExtras().putString(Connection.EXTRA_ORIGINAL_CONNECTION_ID, callId);
|
Bundle extras = request.getExtras();
|
||||||
|
Bundle newExtras = new Bundle();
|
||||||
|
newExtras.putString(Connection.EXTRA_ORIGINAL_CONNECTION_ID, callId);
|
||||||
|
if (extras != null) {
|
||||||
|
// If the request originated from a remote connection service, we will add some
|
||||||
|
// tracking information that Telecom can use to keep informed of which package
|
||||||
|
// made the remote request, and which remote connection service was used.
|
||||||
|
if (extras.containsKey(Connection.EXTRA_REMOTE_CONNECTION_ORIGINATING_PACKAGE_NAME)) {
|
||||||
|
newExtras.putString(
|
||||||
|
Connection.EXTRA_REMOTE_CONNECTION_ORIGINATING_PACKAGE_NAME,
|
||||||
|
extras.getString(
|
||||||
|
Connection.EXTRA_REMOTE_CONNECTION_ORIGINATING_PACKAGE_NAME));
|
||||||
|
newExtras.putParcelable(Connection.EXTRA_REMOTE_PHONE_ACCOUNT_HANDLE,
|
||||||
|
request.getAccountHandle());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
conference.putExtras(newExtras);
|
||||||
|
|
||||||
mConferenceById.put(callId, conference);
|
mConferenceById.put(callId, conference);
|
||||||
mIdByConference.put(conference, callId);
|
mIdByConference.put(conference, callId);
|
||||||
|
|
||||||
@@ -1937,6 +1953,30 @@ public abstract class ConnectionService extends Service {
|
|||||||
Log.i(this, "createConnection, implementation returned null connection.");
|
Log.i(this, "createConnection, implementation returned null connection.");
|
||||||
connection = Connection.createFailedConnection(
|
connection = Connection.createFailedConnection(
|
||||||
new DisconnectCause(DisconnectCause.ERROR, "IMPL_RETURNED_NULL_CONNECTION"));
|
new DisconnectCause(DisconnectCause.ERROR, "IMPL_RETURNED_NULL_CONNECTION"));
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
Bundle extras = request.getExtras();
|
||||||
|
if (extras != null) {
|
||||||
|
// If the request originated from a remote connection service, we will add some
|
||||||
|
// tracking information that Telecom can use to keep informed of which package
|
||||||
|
// made the remote request, and which remote connection service was used.
|
||||||
|
if (extras.containsKey(
|
||||||
|
Connection.EXTRA_REMOTE_CONNECTION_ORIGINATING_PACKAGE_NAME)) {
|
||||||
|
Bundle newExtras = new Bundle();
|
||||||
|
newExtras.putString(
|
||||||
|
Connection.EXTRA_REMOTE_CONNECTION_ORIGINATING_PACKAGE_NAME,
|
||||||
|
extras.getString(
|
||||||
|
Connection.EXTRA_REMOTE_CONNECTION_ORIGINATING_PACKAGE_NAME
|
||||||
|
));
|
||||||
|
newExtras.putParcelable(Connection.EXTRA_REMOTE_PHONE_ACCOUNT_HANDLE,
|
||||||
|
request.getAccountHandle());
|
||||||
|
connection.putExtras(newExtras);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (UnsupportedOperationException ose) {
|
||||||
|
// Do nothing; if the ConnectionService reported a failure it will be an instance
|
||||||
|
// of an immutable Connection which we cannot edit, so we're out of luck.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isSelfManaged =
|
boolean isSelfManaged =
|
||||||
|
|||||||
@@ -427,7 +427,7 @@ public class Session {
|
|||||||
StringBuilder methodName = new StringBuilder();
|
StringBuilder methodName = new StringBuilder();
|
||||||
methodName.append(getFullMethodPath(false /*truncatePath*/));
|
methodName.append(getFullMethodPath(false /*truncatePath*/));
|
||||||
if (mOwnerInfo != null && !mOwnerInfo.isEmpty()) {
|
if (mOwnerInfo != null && !mOwnerInfo.isEmpty()) {
|
||||||
methodName.append("(InCall package: ");
|
methodName.append("(");
|
||||||
methodName.append(mOwnerInfo);
|
methodName.append(mOwnerInfo);
|
||||||
methodName.append(")");
|
methodName.append(")");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -258,6 +258,9 @@ final class RemoteConnectionService {
|
|||||||
// See comments on Connection.EXTRA_ORIGINAL_CONNECTION_ID for more information.
|
// See comments on Connection.EXTRA_ORIGINAL_CONNECTION_ID for more information.
|
||||||
Bundle newExtras = new Bundle();
|
Bundle newExtras = new Bundle();
|
||||||
newExtras.putString(Connection.EXTRA_ORIGINAL_CONNECTION_ID, callId);
|
newExtras.putString(Connection.EXTRA_ORIGINAL_CONNECTION_ID, callId);
|
||||||
|
// Track the fact this request was relayed through the remote connection service.
|
||||||
|
newExtras.putParcelable(Connection.EXTRA_REMOTE_PHONE_ACCOUNT_HANDLE,
|
||||||
|
parcel.getPhoneAccount());
|
||||||
conference.putExtras(newExtras);
|
conference.putExtras(newExtras);
|
||||||
|
|
||||||
conference.registerCallback(new RemoteConference.Callback() {
|
conference.registerCallback(new RemoteConference.Callback() {
|
||||||
@@ -383,6 +386,11 @@ final class RemoteConnectionService {
|
|||||||
RemoteConnection remoteConnection = new RemoteConnection(callId,
|
RemoteConnection remoteConnection = new RemoteConnection(callId,
|
||||||
mOutgoingConnectionServiceRpc, connection, callingPackage,
|
mOutgoingConnectionServiceRpc, connection, callingPackage,
|
||||||
callingTargetSdkVersion);
|
callingTargetSdkVersion);
|
||||||
|
// Track that it is via a remote connection.
|
||||||
|
Bundle newExtras = new Bundle();
|
||||||
|
newExtras.putParcelable(Connection.EXTRA_REMOTE_PHONE_ACCOUNT_HANDLE,
|
||||||
|
connection.getPhoneAccount());
|
||||||
|
remoteConnection.putExtras(newExtras);
|
||||||
mConnectionById.put(callId, remoteConnection);
|
mConnectionById.put(callId, remoteConnection);
|
||||||
remoteConnection.registerCallback(new RemoteConnection.Callback() {
|
remoteConnection.registerCallback(new RemoteConnection.Callback() {
|
||||||
@Override
|
@Override
|
||||||
@@ -535,10 +543,20 @@ final class RemoteConnectionService {
|
|||||||
ConnectionRequest request,
|
ConnectionRequest request,
|
||||||
boolean isIncoming) {
|
boolean isIncoming) {
|
||||||
final String id = UUID.randomUUID().toString();
|
final String id = UUID.randomUUID().toString();
|
||||||
|
Bundle extras = new Bundle();
|
||||||
|
if (request.getExtras() != null) {
|
||||||
|
extras.putAll(request.getExtras());
|
||||||
|
}
|
||||||
|
// We will set the package name for the originator of the remote request; this lets the
|
||||||
|
// receiving ConnectionService know that the request originated from a remote connection
|
||||||
|
// service so that it can provide tracking information for Telecom.
|
||||||
|
extras.putString(Connection.EXTRA_REMOTE_CONNECTION_ORIGINATING_PACKAGE_NAME,
|
||||||
|
mOurConnectionServiceImpl.getApplicationContext().getOpPackageName());
|
||||||
|
|
||||||
final ConnectionRequest newRequest = new ConnectionRequest.Builder()
|
final ConnectionRequest newRequest = new ConnectionRequest.Builder()
|
||||||
.setAccountHandle(request.getAccountHandle())
|
.setAccountHandle(request.getAccountHandle())
|
||||||
.setAddress(request.getAddress())
|
.setAddress(request.getAddress())
|
||||||
.setExtras(request.getExtras())
|
.setExtras(extras)
|
||||||
.setVideoState(request.getVideoState())
|
.setVideoState(request.getVideoState())
|
||||||
.setRttPipeFromInCall(request.getRttPipeFromInCall())
|
.setRttPipeFromInCall(request.getRttPipeFromInCall())
|
||||||
.setRttPipeToInCall(request.getRttPipeToInCall())
|
.setRttPipeToInCall(request.getRttPipeToInCall())
|
||||||
|
|||||||
Reference in New Issue
Block a user