Set Calls with CallVideoProviders, and update InCallCalls on change.

Bug: 15893156
Change-Id: I27aa41d389673d94adcfe5da8c1ea0f4e155ae26
diff --git a/src/com/android/telecomm/Call.java b/src/com/android/telecomm/Call.java
index 09f60cf..4265c65 100644
--- a/src/com/android/telecomm/Call.java
+++ b/src/com/android/telecomm/Call.java
@@ -27,7 +27,6 @@
 import android.telecomm.CallServiceDescriptor;
 import android.telecomm.CallState;
 import android.telecomm.GatewayInfo;
-import android.telecomm.InCallService;
 import android.telecomm.Response;
 import android.telecomm.Subscription;
 import android.telecomm.TelecommConstants;
@@ -35,10 +34,10 @@
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 
+import com.android.internal.telecomm.ICallVideoProvider;
 import com.android.internal.telephony.CallerInfo;
 import com.android.internal.telephony.CallerInfoAsyncQuery;
 import com.android.internal.telephony.CallerInfoAsyncQuery.OnQueryCompleteListener;
-
 import com.android.internal.telephony.SmsApplication;
 import com.android.telecomm.ContactsAsyncHelper.OnImageLoadCompleteListener;
 import com.google.common.base.Preconditions;
@@ -74,6 +73,7 @@
         void onParentChanged(Call call);
         void onChildrenChanged(Call call);
         void onCannedSmsResponsesLoaded(Call call);
+        void onCallVideoProviderChanged(Call call);
     }
 
     private static final OnQueryCompleteListener sCallerInfoQueryListener =
@@ -206,6 +206,8 @@
     /** Whether an attempt has been made to load the text message responses. */
     private boolean mCannedSmsResponsesLoadingStarted = false;
 
+    private ICallVideoProvider mCallVideoProvider;
+
     /**
      * Creates an empty call object.
      *
@@ -1053,7 +1055,17 @@
     /**
      * Sets a call video provider for the call.
      */
-    public void setCallVideoProvider() {
-        //TODO: Implement this method. For now, it's just an empty stub.
+    public void setCallVideoProvider(ICallVideoProvider callVideoProvider) {
+        mCallVideoProvider = callVideoProvider;
+        for (Listener l : mListeners) {
+            l.onCallVideoProviderChanged(Call.this);
+        }
+    }
+
+    /**
+     * @return Return the call video Provider binder.
+     */
+    public ICallVideoProvider getCallVideoProvider() {
+        return mCallVideoProvider;
     }
 }
diff --git a/src/com/android/telecomm/CallServiceWrapper.java b/src/com/android/telecomm/CallServiceWrapper.java
index 365a5ce..5970846 100644
--- a/src/com/android/telecomm/CallServiceWrapper.java
+++ b/src/com/android/telecomm/CallServiceWrapper.java
@@ -287,8 +287,9 @@
                         SomeArgs args = (SomeArgs) msg.obj;
                         try {
                             call = mCallIdMapper.getCall(args.arg1);
+                            ICallVideoProvider callVideoProvider = (ICallVideoProvider) args.arg2;
                             if (call != null) {
-                                call.setCallVideoProvider();
+                                call.setCallVideoProvider(callVideoProvider);
                             }
                         } finally {
                             args.recycle();
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index d53b583..26f627f 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -65,6 +65,7 @@
         void onIsConferenceCapableChanged(Call call, boolean isConferenceCapable);
         void onIsConferencedChanged(Call call);
         void onCannedSmsResponsesLoaded(Call call);
+        void onCallVideoProviderChanged(Call call);
     }
 
     private static final CallsManager INSTANCE = new CallsManager();
@@ -225,6 +226,13 @@
         }
     }
 
+    @Override
+    public void onCallVideoProviderChanged(Call call) {
+        for (CallsManagerListener listener : mListeners) {
+            listener.onCallVideoProviderChanged(call);
+        }
+    }
+
     ImmutableCollection<Call> getCalls() {
         return ImmutableList.copyOf(mCalls);
     }
diff --git a/src/com/android/telecomm/CallsManagerListenerBase.java b/src/com/android/telecomm/CallsManagerListenerBase.java
index 55fa0a1..26d122b 100644
--- a/src/com/android/telecomm/CallsManagerListenerBase.java
+++ b/src/com/android/telecomm/CallsManagerListenerBase.java
@@ -86,4 +86,9 @@
     @Override
     public void onCannedSmsResponsesLoaded(Call call) {
     }
+
+    @Override
+    public void onCallVideoProviderChanged(Call call) {
+
+    }
 }
diff --git a/src/com/android/telecomm/InCallController.java b/src/com/android/telecomm/InCallController.java
index bd41dcc..871bf75 100644
--- a/src/com/android/telecomm/InCallController.java
+++ b/src/com/android/telecomm/InCallController.java
@@ -162,6 +162,11 @@
         updateCall(call);
     }
 
+    @Override
+    public void onCallVideoProviderChanged(Call call) {
+        updateCall(call);
+    }
+
     void bringToForeground(boolean showDialpad) {
         if (mInCallService != null) {
             try {
@@ -311,7 +316,8 @@
         return new InCallCall(callId, state, call.getDisconnectCause(), call.getDisconnectMessage(),
                 call.getCannedSmsResponses(), capabilities, connectTimeMillis, call.getHandle(),
                 call.getGatewayInfo(), call.getSubscription(), descriptor,
-                call.getHandoffCallServiceDescriptor(), parentCallId, childCallIds);
+                call.getHandoffCallServiceDescriptor(), call.getCallVideoProvider(),
+                parentCallId, childCallIds);
     }
 
 }