Merge "Pass PhoneAccountHandle into VideoTech isAvailable"
diff --git a/java/com/android/dialer/duo/Duo.java b/java/com/android/dialer/duo/Duo.java
index d914784..d471a7a 100644
--- a/java/com/android/dialer/duo/Duo.java
+++ b/java/com/android/dialer/duo/Duo.java
@@ -23,6 +23,7 @@
 import android.support.annotation.Nullable;
 import android.support.annotation.StringRes;
 import android.telecom.Call;
+import android.telecom.PhoneAccountHandle;
 import com.google.auto.value.AutoValue;
 import com.google.common.base.Optional;
 import java.util.List;
@@ -51,7 +52,10 @@
    *     null} if result is unknown.
    */
   @MainThread
-  Optional<Boolean> supportsUpgrade(@NonNull Context context, @Nullable String number);
+  Optional<Boolean> supportsUpgrade(
+      @NonNull Context context,
+      @Nullable String number,
+      @Nullable PhoneAccountHandle phoneAccountHandle);
 
   /** Starts a task to update the reachability of the parameter numbers asynchronously. */
   @MainThread
diff --git a/java/com/android/dialer/duo/stub/DuoStub.java b/java/com/android/dialer/duo/stub/DuoStub.java
index cfa400a..9e896cf 100644
--- a/java/com/android/dialer/duo/stub/DuoStub.java
+++ b/java/com/android/dialer/duo/stub/DuoStub.java
@@ -23,6 +23,7 @@
 import android.support.annotation.Nullable;
 import android.support.annotation.StringRes;
 import android.telecom.Call;
+import android.telecom.PhoneAccountHandle;
 import com.android.dialer.common.Assert;
 import com.android.dialer.duo.Duo;
 import com.android.dialer.duo.DuoListener;
@@ -60,7 +61,10 @@
 
   @MainThread
   @Override
-  public Optional<Boolean> supportsUpgrade(@NonNull Context context, @Nullable String number) {
+  public Optional<Boolean> supportsUpgrade(
+      @NonNull Context context,
+      @Nullable String number,
+      @Nullable PhoneAccountHandle phoneAccountHandle) {
     Assert.isMainThread();
     Assert.isNotNull(context);
     return Optional.of(false);
diff --git a/java/com/android/incallui/CallButtonPresenter.java b/java/com/android/incallui/CallButtonPresenter.java
index 88aeaf5..3854642 100644
--- a/java/com/android/incallui/CallButtonPresenter.java
+++ b/java/com/android/incallui/CallButtonPresenter.java
@@ -497,7 +497,7 @@
   }
 
   private boolean hasVideoCallCapabilities(DialerCall call) {
-    return call.getVideoTech().isAvailable(context);
+    return call.getVideoTech().isAvailable(context, call.getAccountHandle());
   }
 
   /**
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index d57271a..2724322 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -525,7 +525,7 @@
     Trace.beginSection("DialerCall.updateFromTelecomCall");
     LogUtil.v("DialerCall.updateFromTelecomCall", telecomCall.toString());
 
-    videoTechManager.dispatchCallStateChanged(telecomCall.getState());
+    videoTechManager.dispatchCallStateChanged(telecomCall.getState(), getAccountHandle());
 
     final int translatedState = translateState(telecomCall.getState());
     if (state != State.BLOCKED) {
@@ -1258,7 +1258,7 @@
 
   public VideoTech getVideoTech() {
     if (videoTech == null) {
-      videoTech = videoTechManager.getVideoTech();
+      videoTech = videoTechManager.getVideoTech(getAccountHandle());
 
       // Only store the first video tech type found to be available during the life of the call.
       if (selectedAvailableVideoTechType == com.android.dialer.logging.VideoTech.Type.NONE) {
@@ -1674,16 +1674,17 @@
     }
 
     @VisibleForTesting
-    public VideoTech getVideoTech() {
+    public VideoTech getVideoTech(PhoneAccountHandle phoneAccountHandle) {
       if (savedTech == emptyVideoTech) {
         for (VideoTech tech : videoTechs) {
-          if (tech.isAvailable(context)) {
+          if (tech.isAvailable(context, phoneAccountHandle)) {
             savedTech = tech;
             savedTech.becomePrimary();
             break;
           }
         }
-      } else if (savedTech instanceof DuoVideoTech && rcsVideoShare.isAvailable(context)) {
+      } else if (savedTech instanceof DuoVideoTech
+          && rcsVideoShare.isAvailable(context, phoneAccountHandle)) {
         // RCS Video Share will become available after the capability exchange which is slower than
         // Duo reading local contacts for reachability. If Video Share becomes available and we are
         // not in the middle of any session changes, let it take over.
@@ -1695,9 +1696,9 @@
     }
 
     @VisibleForTesting
-    public void dispatchCallStateChanged(int newState) {
+    public void dispatchCallStateChanged(int newState, PhoneAccountHandle phoneAccountHandle) {
       for (VideoTech videoTech : videoTechs) {
-        videoTech.onCallStateChanged(context, newState);
+        videoTech.onCallStateChanged(context, newState, phoneAccountHandle);
       }
     }
 
diff --git a/java/com/android/incallui/videotech/VideoTech.java b/java/com/android/incallui/videotech/VideoTech.java
index 71087cb..9870302 100644
--- a/java/com/android/incallui/videotech/VideoTech.java
+++ b/java/com/android/incallui/videotech/VideoTech.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.telecom.PhoneAccountHandle;
 import com.android.dialer.logging.DialerImpression;
 import com.android.incallui.video.protocol.VideoCallScreen;
 import com.android.incallui.video.protocol.VideoCallScreenDelegate;
@@ -27,7 +28,7 @@
 /** Video calling interface. */
 public interface VideoTech {
 
-  boolean isAvailable(Context context);
+  boolean isAvailable(Context context, PhoneAccountHandle phoneAccountHandle);
 
   boolean isTransmittingOrReceiving();
 
@@ -50,7 +51,7 @@
   VideoCallScreenDelegate createVideoCallScreenDelegate(
       Context context, VideoCallScreen videoCallScreen);
 
-  void onCallStateChanged(Context context, int newState);
+  void onCallStateChanged(Context context, int newState, PhoneAccountHandle phoneAccountHandle);
 
   void onRemovedFromCallList();
 
diff --git a/java/com/android/incallui/videotech/duo/DuoVideoTech.java b/java/com/android/incallui/videotech/duo/DuoVideoTech.java
index c858ae1..fdaed07 100644
--- a/java/com/android/incallui/videotech/duo/DuoVideoTech.java
+++ b/java/com/android/incallui/videotech/duo/DuoVideoTech.java
@@ -20,6 +20,7 @@
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.telecom.Call;
+import android.telecom.PhoneAccountHandle;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.configprovider.ConfigProviderBindings;
@@ -55,7 +56,7 @@
   }
 
   @Override
-  public boolean isAvailable(Context context) {
+  public boolean isAvailable(Context context, PhoneAccountHandle phoneAccountHandle) {
     if (!ConfigProviderBindings.get(context)
         .getBoolean("enable_lightbringer_video_upgrade", true)) {
       LogUtil.v("DuoVideoTech.isAvailable", "upgrade disabled by flag");
@@ -66,7 +67,7 @@
       LogUtil.v("DuoVideoTech.isAvailable", "upgrade unavailable, call must be active");
       return false;
     }
-    Optional<Boolean> localResult = duo.supportsUpgrade(context, callingNumber);
+    Optional<Boolean> localResult = duo.supportsUpgrade(context, callingNumber, phoneAccountHandle);
     if (localResult.isPresent()) {
       LogUtil.v(
           "DuoVideoTech.isAvailable", "upgrade supported in local cache: " + localResult.get());
@@ -109,7 +110,8 @@
   }
 
   @Override
-  public void onCallStateChanged(Context context, int newState) {
+  public void onCallStateChanged(
+      Context context, int newState, PhoneAccountHandle phoneAccountHandle) {
     if (newState == Call.STATE_DISCONNECTING) {
       duo.unregisterListener(this);
     }
diff --git a/java/com/android/incallui/videotech/empty/EmptyVideoTech.java b/java/com/android/incallui/videotech/empty/EmptyVideoTech.java
index 2e34a6a..9f6211d 100644
--- a/java/com/android/incallui/videotech/empty/EmptyVideoTech.java
+++ b/java/com/android/incallui/videotech/empty/EmptyVideoTech.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.telecom.PhoneAccountHandle;
 import com.android.dialer.common.Assert;
 import com.android.incallui.video.protocol.VideoCallScreen;
 import com.android.incallui.video.protocol.VideoCallScreenDelegate;
@@ -29,7 +30,7 @@
 public class EmptyVideoTech implements VideoTech {
 
   @Override
-  public boolean isAvailable(Context context) {
+  public boolean isAvailable(Context context, PhoneAccountHandle phoneAccountHandle) {
     return false;
   }
 
@@ -60,7 +61,8 @@
   }
 
   @Override
-  public void onCallStateChanged(Context context, int newState) {}
+  public void onCallStateChanged(
+      Context context, int newState, PhoneAccountHandle phoneAccountHandle) {}
 
   @Override
   public void onRemovedFromCallList() {}
diff --git a/java/com/android/incallui/videotech/ims/ImsVideoTech.java b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
index 17bad55..a2fb73b 100644
--- a/java/com/android/incallui/videotech/ims/ImsVideoTech.java
+++ b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
@@ -23,6 +23,7 @@
 import android.support.annotation.VisibleForTesting;
 import android.telecom.Call;
 import android.telecom.Call.Details;
+import android.telecom.PhoneAccountHandle;
 import android.telecom.VideoProfile;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
@@ -59,7 +60,7 @@
   }
 
   @Override
-  public boolean isAvailable(Context context) {
+  public boolean isAvailable(Context context, PhoneAccountHandle phoneAccountHandle) {
     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
       return false;
     }
@@ -121,8 +122,9 @@
   }
 
   @Override
-  public void onCallStateChanged(Context context, int newState) {
-    if (!isAvailable(context)) {
+  public void onCallStateChanged(
+      Context context, int newState, PhoneAccountHandle phoneAccountHandle) {
+    if (!isAvailable(context, phoneAccountHandle)) {
       return;
     }