Loading telecomm/java/android/telecom/Connection.java +25 −0 Original line number Diff line number Diff line Loading @@ -733,6 +733,31 @@ public abstract class Connection extends Conferenceable { public static final String 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 * {@link Connection#sendConnectionEvent} which indicates that audio is present Loading telecomm/java/android/telecom/ConnectionService.java +42 −2 Original line number Diff line number Diff line Loading @@ -1859,9 +1859,25 @@ public abstract class ConnectionService extends Service { new DisconnectCause(DisconnectCause.ERROR, "IMPL_RETURNED_NULL_CONFERENCE"), 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); mIdByConference.put(conference, callId); conference.addListener(mConferenceListener); Loading Loading @@ -1936,6 +1952,30 @@ public abstract class ConnectionService extends Service { Log.i(this, "createConnection, implementation returned null connection."); connection = Connection.createFailedConnection( 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 = Loading telecomm/java/android/telecom/Logging/Session.java +1 −1 Original line number Diff line number Diff line Loading @@ -427,7 +427,7 @@ public class Session { StringBuilder methodName = new StringBuilder(); methodName.append(getFullMethodPath(false /*truncatePath*/)); if (mOwnerInfo != null && !mOwnerInfo.isEmpty()) { methodName.append("(InCall package: "); methodName.append("("); methodName.append(mOwnerInfo); methodName.append(")"); } Loading telecomm/java/android/telecom/RemoteConnectionService.java +19 −1 Original line number Diff line number Diff line Loading @@ -258,6 +258,9 @@ final class RemoteConnectionService { // See comments on Connection.EXTRA_ORIGINAL_CONNECTION_ID for more information. Bundle newExtras = new Bundle(); 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.registerCallback(new RemoteConference.Callback() { Loading Loading @@ -383,6 +386,11 @@ final class RemoteConnectionService { RemoteConnection remoteConnection = new RemoteConnection(callId, mOutgoingConnectionServiceRpc, connection, callingPackage, 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); remoteConnection.registerCallback(new RemoteConnection.Callback() { @Override Loading Loading @@ -535,10 +543,20 @@ final class RemoteConnectionService { ConnectionRequest request, boolean isIncoming) { 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() .setAccountHandle(request.getAccountHandle()) .setAddress(request.getAddress()) .setExtras(request.getExtras()) .setExtras(extras) .setVideoState(request.getVideoState()) .setRttPipeFromInCall(request.getRttPipeFromInCall()) .setRttPipeToInCall(request.getRttPipeToInCall()) Loading Loading
telecomm/java/android/telecom/Connection.java +25 −0 Original line number Diff line number Diff line Loading @@ -733,6 +733,31 @@ public abstract class Connection extends Conferenceable { public static final String 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 * {@link Connection#sendConnectionEvent} which indicates that audio is present Loading
telecomm/java/android/telecom/ConnectionService.java +42 −2 Original line number Diff line number Diff line Loading @@ -1859,9 +1859,25 @@ public abstract class ConnectionService extends Service { new DisconnectCause(DisconnectCause.ERROR, "IMPL_RETURNED_NULL_CONFERENCE"), 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); mIdByConference.put(conference, callId); conference.addListener(mConferenceListener); Loading Loading @@ -1936,6 +1952,30 @@ public abstract class ConnectionService extends Service { Log.i(this, "createConnection, implementation returned null connection."); connection = Connection.createFailedConnection( 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 = Loading
telecomm/java/android/telecom/Logging/Session.java +1 −1 Original line number Diff line number Diff line Loading @@ -427,7 +427,7 @@ public class Session { StringBuilder methodName = new StringBuilder(); methodName.append(getFullMethodPath(false /*truncatePath*/)); if (mOwnerInfo != null && !mOwnerInfo.isEmpty()) { methodName.append("(InCall package: "); methodName.append("("); methodName.append(mOwnerInfo); methodName.append(")"); } Loading
telecomm/java/android/telecom/RemoteConnectionService.java +19 −1 Original line number Diff line number Diff line Loading @@ -258,6 +258,9 @@ final class RemoteConnectionService { // See comments on Connection.EXTRA_ORIGINAL_CONNECTION_ID for more information. Bundle newExtras = new Bundle(); 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.registerCallback(new RemoteConference.Callback() { Loading Loading @@ -383,6 +386,11 @@ final class RemoteConnectionService { RemoteConnection remoteConnection = new RemoteConnection(callId, mOutgoingConnectionServiceRpc, connection, callingPackage, 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); remoteConnection.registerCallback(new RemoteConnection.Callback() { @Override Loading Loading @@ -535,10 +543,20 @@ final class RemoteConnectionService { ConnectionRequest request, boolean isIncoming) { 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() .setAccountHandle(request.getAccountHandle()) .setAddress(request.getAddress()) .setExtras(request.getExtras()) .setExtras(extras) .setVideoState(request.getVideoState()) .setRttPipeFromInCall(request.getRttPipeFromInCall()) .setRttPipeToInCall(request.getRttPipeToInCall()) Loading