Merge "Ensure VideoProvider is only set on ParcelableCalls for the default InCallService (i.e. the Incall UI)." into lmp-dev
diff --git a/src/com/android/telecomm/InCallController.java b/src/com/android/telecomm/InCallController.java
index 4f022c0..2e7bc45 100644
--- a/src/com/android/telecomm/InCallController.java
+++ b/src/com/android/telecomm/InCallController.java
@@ -143,7 +143,7 @@
 
     private final CallIdMapper mCallIdMapper = new CallIdMapper("InCall");
 
-    /** The {@link ComponentName} of the default InCall UI */
+    /** The {@link ComponentName} of the default InCall UI. */
     private ComponentName mInCallComponentName;
 
     public InCallController() {
@@ -164,8 +164,12 @@
             // Track the call if we don't already know about it.
             addCall(call);
 
-            ParcelableCall parcelableCall = toParcelableCall(call);
-            for (IInCallService inCallService : mInCallServices.values()) {
+            for (Map.Entry<ComponentName, IInCallService> entry : mInCallServices.entrySet()) {
+                ComponentName componentName = entry.getKey();
+                IInCallService inCallService = entry.getValue();
+
+                ParcelableCall parcelableCall = toParcelableCall(call,
+                        componentName.equals(mInCallComponentName) /* includeVideoProvider */);
                 try {
                     inCallService.addCall(parcelableCall);
                 } catch (RemoteException ignored) {
@@ -336,7 +340,8 @@
                     // Track the call if we don't already know about it.
                     addCall(call);
 
-                    inCallService.addCall(toParcelableCall(call));
+                    inCallService.addCall(toParcelableCall(call,
+                            componentName.equals(mInCallComponentName) /* includeVideoProvider */));
                 } catch (RemoteException ignored) {
                 }
             }
@@ -382,11 +387,21 @@
         }
     }
 
+    /**
+     * Informs all {@link InCallService} instances of the updated call information.  Changes to the
+     * video provider are only communicated to the default in-call UI.
+     *
+     * @param call The {@link Call}.
+     */
     private void updateCall(Call call) {
         if (!mInCallServices.isEmpty()) {
-            ParcelableCall parcelableCall = toParcelableCall(call);
-            Log.v(this, "updateCall %s ==> %s", call, parcelableCall);
-            for (IInCallService inCallService : mInCallServices.values()) {
+            for (Map.Entry<ComponentName, IInCallService> entry : mInCallServices.entrySet()) {
+                ComponentName componentName = entry.getKey();
+                IInCallService inCallService = entry.getValue();
+                ParcelableCall parcelableCall = toParcelableCall(call,
+                        componentName.equals(mInCallComponentName) /* includeVideoProvider */);
+
+                Log.v(this, "updateCall %s ==> %s", call, parcelableCall);
                 try {
                     inCallService.updateCall(parcelableCall);
                 } catch (RemoteException ignored) {
@@ -395,7 +410,15 @@
         }
     }
 
-    private ParcelableCall toParcelableCall(Call call) {
+    /**
+     * Parcels all information for a {@link Call} into a new {@link ParcelableCall} instance.
+     *
+     * @param call The {@link Call} to parcel.
+     * @param includeVideoProvider When {@code true}, the {@link IVideoProvider} is included in the
+     *      parcelled call.  When {@code false}, the {@link IVideoProvider} is not included.
+     * @return The {@link ParcelableCall} containing all call information from the {@link Call}.
+     */
+    private ParcelableCall toParcelableCall(Call call, boolean includeVideoProvider) {
         String callId = mCallIdMapper.getCallId(call);
 
         int capabilities = call.getCallCapabilities();
@@ -460,7 +483,7 @@
                 call.getCallerDisplayNamePresentation(),
                 call.getGatewayInfo(),
                 call.getTargetPhoneAccount(),
-                call.getVideoProvider(),
+                includeVideoProvider ? call.getVideoProvider() : null,
                 parentCallId,
                 childCallIds,
                 call.getStatusHints(),