From 9f6f04733ef1ce1c3def27b4307d3acbd3831a9d Mon Sep 17 00:00:00 2001 From: Tyler Gunn Date: Mon, 17 Apr 2017 18:25:22 -0700 Subject: [PATCH] Further handover support changes. Add handover extras key used when initiating handover. Add handover complete / fail connection events which are sent to the initiating IncallService when a handover is complete or fails. Adding PhoneAccount extra to indicate that a self-managed CS should have its calls logged to the call log. Test: Manual Bug: 37102939 Change-Id: Icbb6f1addf913de841a9c48089a7d8311668f3bc --- telecomm/java/android/telecom/Call.java | 35 ++++++++++++++----- telecomm/java/android/telecom/Connection.java | 18 ++++++++++ .../java/android/telecom/PhoneAccount.java | 12 +++++++ .../java/android/telecom/TelecomManager.java | 23 ++++++++++-- 4 files changed, 78 insertions(+), 10 deletions(-) diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java index f822d5e23b237..c1475784a9ac3 100644 --- a/telecomm/java/android/telecom/Call.java +++ b/telecomm/java/android/telecom/Call.java @@ -165,20 +165,39 @@ public final class Call { "android.telecom.extra.HANDOVER_VIDEO_STATE"; /** - * Call event sent from Telecom via {@link Connection#onCallEvent(String, Bundle)} to - * inform a {@link Connection} that a handover initiated via {@link #EVENT_REQUEST_HANDOVER} - * has completed. + * Extra key used with the {@link #EVENT_REQUEST_HANDOVER} call event. Used by the + * {@link InCallService} initiating a handover to provide a {@link Bundle} with extra + * information to the handover {@link ConnectionService} specified by + * {@link #EXTRA_HANDOVER_PHONE_ACCOUNT_HANDLE}. + *

+ * This {@link Bundle} is not interpreted by Telecom, but passed as-is to the + * {@link ConnectionService} via the request extras when + * {@link ConnectionService#onCreateOutgoingConnection(PhoneAccountHandle, ConnectionRequest)} + * is called to initate the handover. * @hide */ - public static final String EVENT_HANDOVER_COMPLETE = "android.telecom.event.HANDOVER_COMPLETE"; + public static final String EXTRA_HANDOVER_EXTRAS = "android.telecom.extra.HANDOVER_EXTRAS"; /** - * Call event sent from Telecom via {@link Connection#onCallEvent(String, Bundle)} to - * inform a {@link Connection} that a handover initiated via {@link #EVENT_REQUEST_HANDOVER} - * has failed to complete. + * Call event sent from Telecom to the handover {@link ConnectionService} via + * {@link Connection#onCallEvent(String, Bundle)} to inform a {@link Connection} that a handover + * to the {@link ConnectionService} has completed successfully. + *

+ * A handover is initiated with the {@link #EVENT_REQUEST_HANDOVER} call event. * @hide */ - public static final String EVENT_HANDOVER_FAILED = "android.telecom.event.HANDOVER_FAILED"; + public static final String EVENT_HANDOVER_COMPLETE = + "android.telecom.event.HANDOVER_COMPLETE"; + /** + * Call event sent from Telecom to the handover {@link ConnectionService} via + * {@link Connection#onCallEvent(String, Bundle)} to inform a {@link Connection} that a handover + * to the {@link ConnectionService} has failed. + *

+ * A handover is initiated with the {@link #EVENT_REQUEST_HANDOVER} call event. + * @hide + */ + public static final String EVENT_HANDOVER_FAILED = + "android.telecom.event.HANDOVER_FAILED"; public static class Details { diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index 982293656858f..462f591284797 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -551,6 +551,24 @@ public abstract class Connection extends Conferenceable { public static final String EVENT_CALL_REMOTELY_UNHELD = "android.telecom.event.CALL_REMOTELY_UNHELD"; + /** + * Connection event used to inform an {@link InCallService} which initiated a call handover via + * {@link Call#EVENT_REQUEST_HANDOVER} that the handover from this {@link Connection} has + * successfully completed. + * @hide + */ + public static final String EVENT_HANDOVER_COMPLETE = + "android.telecom.event.HANDOVER_COMPLETE"; + + /** + * Connection event used to inform an {@link InCallService} which initiated a call handover via + * {@link Call#EVENT_REQUEST_HANDOVER} that the handover from this {@link Connection} has failed + * to complete. + * @hide + */ + public static final String EVENT_HANDOVER_FAILED = + "android.telecom.event.HANDOVER_FAILED"; + // Flag controlling whether PII is emitted into the logs private static final boolean PII_DEBUG = Log.isLoggable(android.util.Log.DEBUG); diff --git a/telecomm/java/android/telecom/PhoneAccount.java b/telecomm/java/android/telecom/PhoneAccount.java index 080ead1a2c0f2..5cfa71c872ebb 100644 --- a/telecomm/java/android/telecom/PhoneAccount.java +++ b/telecomm/java/android/telecom/PhoneAccount.java @@ -95,6 +95,18 @@ public final class PhoneAccount implements Parcelable { public static final String EXTRA_SUPPORTS_HANDOVER_FROM = "android.telecom.extra.SUPPORTS_HANDOVER_FROM"; + + /** + * Boolean {@link PhoneAccount} extras key (see {@link PhoneAccount#getExtras()}) which + * indicates whether a Self-Managed {@link PhoneAccount} should log its calls to the call log. + *

+ * By default, Self-Managed {@link PhoneAccount}s do not log their calls to the call log. + * Setting this extra to {@code true} provides a means for them to log their calls. + * @hide + */ + public static final String EXTRA_LOG_SELF_MANAGED_CALLS = + "android.telecom.extra.LOG_SELF_MANAGED_CALLS"; + /** * Flag indicating that this {@code PhoneAccount} can act as a connection manager for * other connections. The {@link ConnectionService} associated with this {@code PhoneAccount} diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java index 852610e77c7dd..357fd2b5895f3 100644 --- a/telecomm/java/android/telecom/TelecomManager.java +++ b/telecomm/java/android/telecom/TelecomManager.java @@ -344,15 +344,34 @@ public class TelecomManager { "android.telecom.extra.NEW_OUTGOING_CALL_CANCEL_TIMEOUT"; /** - * Boolean extra specified when calling {@link #addNewIncomingCall(PhoneAccountHandle, Bundle)} - * to indicate to Telecom that the purpose of adding a new incoming call is to handover an + * Boolean extra specified to indicate that the intention of adding a call is to handover an * existing call from the user's device to a different {@link PhoneAccount}. *

+ * Used when calling {@link #addNewIncomingCall(PhoneAccountHandle, Bundle)} + * to indicate to Telecom that the purpose of adding a new incoming call is to handover an + * existing call from the user's device to a different {@link PhoneAccount}. This occurs on + * the receiving side of a handover. + *

+ * Used when Telecom calls + * {@link ConnectionService#onCreateOutgoingConnection(PhoneAccountHandle, ConnectionRequest)} + * to indicate that the purpose of Telecom requesting a new outgoing connection it to request + * a handover to this {@link ConnectionService} from an ongoing call on the user's device. This + * occurs on the initiating side of a handover. + *

* The phone number of the call used by Telecom to determine which call should be handed over. * @hide */ public static final String EXTRA_IS_HANDOVER = "android.telecom.extra.IS_HANDOVER"; + /** + * Extra key specified in the {@link ConnectionRequest#getExtras()} when Telecom calls + * {@link ConnectionService#onCreateOutgoingConnection(PhoneAccountHandle, ConnectionRequest)} + * to inform the {@link ConnectionService} what the initial {@link CallAudioState} of the + * {@link Connection} will be. + * @hide + */ + public static final String EXTRA_CALL_AUDIO_STATE = "android.telecom.extra.CALL_AUDIO_STATE"; + /** * A boolean extra, which when set on the {@link Intent#ACTION_CALL} intent or on the bundle * passed into {@link #placeCall(Uri, Bundle)}, indicates that the call should be initiated with