Plumb the extras data through to the CallService
Add support for the new extras API which allows a Bundle to be passed
with the incoming call intent, and plumb this Bundle all the way
through to the setIncomingCallId call.
Change-Id: I52e7e1d0788ecd01aa427e76de7ccf4d9b75f1f0
diff --git a/src/com/android/telecomm/CallActivity.java b/src/com/android/telecomm/CallActivity.java
index 1f9ffab..9347c2e 100644
--- a/src/com/android/telecomm/CallActivity.java
+++ b/src/com/android/telecomm/CallActivity.java
@@ -126,7 +126,12 @@
return;
}
+ Bundle clientExtras = Bundle.EMPTY;
+ if (intent.hasExtra(TelecommConstants.EXTRA_INCOMING_CALL_EXTRAS)) {
+ clientExtras = intent.getBundleExtra(TelecommConstants.EXTRA_INCOMING_CALL_EXTRAS);
+ }
+
Log.d(TAG, "Processing incoming call from call service [" + descriptor + "]");
- mCallsManager.processIncomingCallIntent(descriptor);
+ mCallsManager.processIncomingCallIntent(descriptor, clientExtras);
}
}
diff --git a/src/com/android/telecomm/CallServiceWrapper.java b/src/com/android/telecomm/CallServiceWrapper.java
index bb9d649..72e1041 100644
--- a/src/com/android/telecomm/CallServiceWrapper.java
+++ b/src/com/android/telecomm/CallServiceWrapper.java
@@ -16,9 +16,11 @@
package com.android.telecomm;
+import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.telecomm.CallInfo;
+import android.telecomm.CallService;
import android.telecomm.CallServiceDescriptor;
import android.telecomm.ICallService;
import android.telecomm.ICallServiceAdapter;
@@ -105,11 +107,11 @@
}
/** See {@link ICallService#setIncomingCallId}. */
- public void setIncomingCallId(String callId) {
+ public void setIncomingCallId(String callId, Bundle extras) {
if (isServiceValid("setIncomingCallId")) {
mAdapter.addPendingIncomingCallId(callId);
try {
- mServiceInterface.setIncomingCallId(callId);
+ mServiceInterface.setIncomingCallId(callId, extras);
} catch (RemoteException e) {
Log.e(TAG, "Failed to setIncomingCallId for call " + callId, e);
mAdapter.removePendingIncomingCallId(callId);
@@ -155,13 +157,16 @@
* call-service adapter using the specified call ID. Upon failure, the specified error callback
* is invoked. Can be invoked even when the call service is unbound.
*
- * @param callID The call ID used for the incoming call.
+ * @param callId The call ID used for the incoming call.
+ * @param extras The {@link CallService}-provided extras which need to be sent back.
* @param errorCallback The callback invoked upon failure.
*/
- void retrieveIncomingCall(final String callId, final Runnable errorCallback) {
+ void retrieveIncomingCall(final String callId, final Bundle extras,
+ final Runnable errorCallback) {
+
BindCallback callback = new BindCallback() {
@Override public void onSuccess() {
- setIncomingCallId(callId);
+ setIncomingCallId(callId, extras);
}
@Override public void onFailure() {
errorCallback.run();
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index c049e18..f084f6b 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -16,6 +16,7 @@
package com.android.telecomm;
+import android.os.Bundle;
import android.telecomm.CallServiceDescriptor;
import android.telecomm.CallState;
import android.util.Log;
@@ -89,15 +90,16 @@
* to {@link #handleSuccessfulIncomingCall} to start the in-call UI.
*
* @param descriptor The descriptor of the call service to use for this incoming call.
+ * @param extras The optional extras Bundle passed with the intent used for the incoming call.
*/
- void processIncomingCallIntent(CallServiceDescriptor descriptor) {
+ void processIncomingCallIntent(CallServiceDescriptor descriptor, Bundle extras) {
Log.d(TAG, "processIncomingCallIntent");
// Create a call with no handle. Eventually, switchboard will update the call with
// additional information from the call service, but for now we just need one to pass around
// with a unique call ID.
Call call = new Call();
- mSwitchboard.retrieveIncomingCall(call, descriptor);
+ mSwitchboard.retrieveIncomingCall(call, descriptor, extras);
}
/**
diff --git a/src/com/android/telecomm/IncomingCallsManager.java b/src/com/android/telecomm/IncomingCallsManager.java
index 13f1319..d82a7de 100644
--- a/src/com/android/telecomm/IncomingCallsManager.java
+++ b/src/com/android/telecomm/IncomingCallsManager.java
@@ -16,7 +16,9 @@
package com.android.telecomm;
+import android.os.Bundle;
import android.telecomm.CallInfo;
+import android.telecomm.CallService;
import android.util.Log;
import com.google.common.base.Preconditions;
@@ -53,8 +55,10 @@
* Starts the timeout sequence in case the call service is unresponsive.
*
* @param call The call object.
+ * @param extras The optional extras passed with the incoming call intent (to be returned to
+ * the call service via {@link CallService#setIncomingCallId(String, android.os.Bundle)}).
*/
- void retrieveIncomingCall(final Call call) {
+ void retrieveIncomingCall(final Call call, Bundle extras) {
ThreadUtil.checkOnMainThread();
Log.d(TAG, "retrieveIncomingCall");
@@ -71,7 +75,7 @@
};
// TODO(gilad): call.retrieve*Call() seems a bit unusual, consider revisiting.
- call.getCallService().retrieveIncomingCall(callId, errorCallback);
+ call.getCallService().retrieveIncomingCall(callId, extras, errorCallback);
}
/**
diff --git a/src/com/android/telecomm/Switchboard.java b/src/com/android/telecomm/Switchboard.java
index 4967c36..a9889c5 100644
--- a/src/com/android/telecomm/Switchboard.java
+++ b/src/com/android/telecomm/Switchboard.java
@@ -20,10 +20,12 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
+import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.telecomm.CallServiceDescriptor;
import android.telecomm.ICallServiceSelector;
+import android.telecomm.TelecommConstants;
import android.util.Log;
import java.util.Collection;
@@ -155,14 +157,16 @@
*
* @param call The call object.
* @param descriptor The relevant call-service descriptor.
+ * @param extras The optional extras passed via
+ * {@link TelecommConstants#EXTRA_INCOMING_CALL_EXTRAS}
*/
- void retrieveIncomingCall(Call call, CallServiceDescriptor descriptor) {
+ void retrieveIncomingCall(Call call, CallServiceDescriptor descriptor, Bundle extras) {
Log.d(TAG, "retrieveIncomingCall");
mBinderDeallocator.acquireUsePermit();
CallServiceWrapper callService = mCallServiceRepository.getCallService(descriptor);
call.setCallService(callService);
- mIncomingCallsManager.retrieveIncomingCall(call);
+ mIncomingCallsManager.retrieveIncomingCall(call, extras);
}
/**