Display correct string for Lightbringer calls in call details

Without this change, all video calls are referred to as just "video call". This
CL uses the Lightbringer interface to allow customizing that text.

Before: https://drive.google.com/open?id=0B7uuA4cyYX0xeVZCTGtMUUtoRVU
After: https://drive.google.com/open?id=0B7uuA4cyYX0xMnFhbTBXMDI2VW8
Bug: 63138393
Test: CallTypeHelperTest
PiperOrigin-RevId: 161692812
Change-Id: I36dc1a1fae96dddee91c5efb8892c4a6c7ef67ca
diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java
index 4942184..41c9d60 100644
--- a/java/com/android/dialer/app/calllog/CallLogAdapter.java
+++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java
@@ -967,7 +967,7 @@
   }
 
   @MainThread
-  private static CallDetailsEntries createCallDetailsEntries(Cursor cursor, int count) {
+  private CallDetailsEntries createCallDetailsEntries(Cursor cursor, int count) {
     Assert.isMainThread();
     int position = cursor.getPosition();
     CallDetailsEntries.Builder entries = CallDetailsEntries.newBuilder();
@@ -980,6 +980,16 @@
               .setDate(cursor.getLong(CallLogQuery.DATE))
               .setDuration(cursor.getLong(CallLogQuery.DURATION))
               .setFeatures(cursor.getInt(CallLogQuery.FEATURES));
+
+      String phoneAccountComponentName = cursor.getString(CallLogQuery.ACCOUNT_COMPONENT_NAME);
+      if (getLightbringer().getPhoneAccountComponentName() != null
+          && getLightbringer()
+              .getPhoneAccountComponentName()
+              .flattenToString()
+              .equals(phoneAccountComponentName)) {
+        entry.setIsLightbringerCall(true);
+      }
+
       entries.addEntries(entry.build());
       cursor.moveToNext();
     }
diff --git a/java/com/android/dialer/calldetails/CallDetailsAdapter.java b/java/com/android/dialer/calldetails/CallDetailsAdapter.java
index 48e9b69..66a736c 100644
--- a/java/com/android/dialer/calldetails/CallDetailsAdapter.java
+++ b/java/com/android/dialer/calldetails/CallDetailsAdapter.java
@@ -26,6 +26,7 @@
 import com.android.dialer.calllogutils.CallTypeHelper;
 import com.android.dialer.common.Assert;
 import com.android.dialer.dialercontact.DialerContact;
+import com.android.dialer.lightbringer.LightbringerComponent;
 import java.util.List;
 
 /** Adapter for RecyclerView in {@link CallDetailsActivity}. */
@@ -48,7 +49,9 @@
     this.contact = Assert.isNotNull(contact);
     this.callDetailsEntries = callDetailsEntries;
     this.listener = listener;
-    callTypeHelper = new CallTypeHelper(context.getResources());
+    callTypeHelper =
+        new CallTypeHelper(
+            context.getResources(), LightbringerComponent.get(context).getLightbringer());
   }
 
   @Override
diff --git a/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java b/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java
index 6ad158e..9c592fc 100644
--- a/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java
+++ b/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java
@@ -91,6 +91,7 @@
     boolean isPulledCall =
         (entry.getFeatures() & Calls.FEATURES_PULLED_EXTERNALLY)
             == Calls.FEATURES_PULLED_EXTERNALLY;
+    boolean isLightbringerCall = entry.getIsLightbringerCall();
 
     callTime.setTextColor(getColorForCallType(context, callType));
     callTypeIcon.clear();
@@ -100,7 +101,8 @@
     callTypeIcon.setShowWifi(
         MotorolaUtils.shouldShowWifiIconInCallLog(context, entry.getFeatures()));
 
-    callTypeText.setText(callTypeHelper.getCallTypeText(callType, isVideoCall, isPulledCall));
+    callTypeText.setText(
+        callTypeHelper.getCallTypeText(callType, isVideoCall, isPulledCall, isLightbringerCall));
     callTime.setText(CallEntryFormatter.formatDate(context, entry.getDate()));
     if (CallTypeHelper.isMissedCallType(callType)) {
       callDuration.setVisibility(View.GONE);
diff --git a/java/com/android/dialer/calldetails/proto/call_details_entries.proto b/java/com/android/dialer/calldetails/proto/call_details_entries.proto
index 18bc931..587fd35 100644
--- a/java/com/android/dialer/calldetails/proto/call_details_entries.proto
+++ b/java/com/android/dialer/calldetails/proto/call_details_entries.proto
@@ -18,6 +18,7 @@
     optional int64 duration = 5;
     optional int64 data_usage = 6;
     repeated enrichedcall.historyquery.proto.HistoryResult history_results = 7;
+    optional bool is_lightbringer_call = 8;
   }
 
   repeated CallDetailsEntry entries = 1;
diff --git a/java/com/android/dialer/calllogutils/CallTypeHelper.java b/java/com/android/dialer/calllogutils/CallTypeHelper.java
index d3b5b67..783f799 100644
--- a/java/com/android/dialer/calllogutils/CallTypeHelper.java
+++ b/java/com/android/dialer/calllogutils/CallTypeHelper.java
@@ -18,6 +18,7 @@
 
 import android.content.res.Resources;
 import com.android.dialer.compat.AppCompatConstants;
+import com.android.dialer.lightbringer.Lightbringer;
 
 /** Helper class to perform operations related to call types. */
 public class CallTypeHelper {
@@ -50,8 +51,12 @@
   private final CharSequence mBlockedName;
   /** Name used to identify calls which were answered on another device. */
   private final CharSequence mAnsweredElsewhereName;
+  /** Name used to identify incoming lightbringer calls. */
+  private final CharSequence mIncomingLightbringerCall;
+  /** Name used to identify outgoing lightbringer calls. */
+  private final CharSequence mOutgoingLightbringerCall;
 
-  public CallTypeHelper(Resources resources) {
+  public CallTypeHelper(Resources resources, Lightbringer lightbringer) {
     // Cache these values so that we do not need to look them up each time.
     mIncomingName = resources.getString(R.string.type_incoming);
     mIncomingPulledName = resources.getString(R.string.type_incoming_pulled);
@@ -67,6 +72,18 @@
     mRejectedName = resources.getString(R.string.type_rejected);
     mBlockedName = resources.getString(R.string.type_blocked);
     mAnsweredElsewhereName = resources.getString(R.string.type_answered_elsewhere);
+
+    if (lightbringer.getIncomingCallTypeText() != -1) {
+      mIncomingLightbringerCall = resources.getString(lightbringer.getIncomingCallTypeText());
+    } else {
+      mIncomingLightbringerCall = mIncomingVideoName;
+    }
+
+    if (lightbringer.getOutgoingCallTypeText() != -1) {
+      mOutgoingLightbringerCall = resources.getString(lightbringer.getOutgoingCallTypeText());
+    } else {
+      mOutgoingLightbringerCall = mOutgoingVideoName;
+    }
   }
 
   public static boolean isMissedCallType(int callType) {
@@ -77,13 +94,17 @@
   }
 
   /** Returns the text used to represent the given call type. */
-  public CharSequence getCallTypeText(int callType, boolean isVideoCall, boolean isPulledCall) {
+  public CharSequence getCallTypeText(
+      int callType, boolean isVideoCall, boolean isPulledCall, boolean isLightbringerCall) {
     switch (callType) {
       case AppCompatConstants.CALLS_INCOMING_TYPE:
         if (isVideoCall) {
           if (isPulledCall) {
             return mIncomingVideoPulledName;
           } else {
+            if (isLightbringerCall) {
+              return mIncomingLightbringerCall;
+            }
             return mIncomingVideoName;
           }
         } else {
@@ -99,6 +120,9 @@
           if (isPulledCall) {
             return mOutgoingVideoPulledName;
           } else {
+            if (isLightbringerCall) {
+              return mOutgoingLightbringerCall;
+            }
             return mOutgoingVideoName;
           }
         } else {
diff --git a/java/com/android/dialer/lightbringer/Lightbringer.java b/java/com/android/dialer/lightbringer/Lightbringer.java
index 669e571..9b8a180 100644
--- a/java/com/android/dialer/lightbringer/Lightbringer.java
+++ b/java/com/android/dialer/lightbringer/Lightbringer.java
@@ -22,6 +22,7 @@
 import android.support.annotation.MainThread;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.annotation.StringRes;
 import android.telecom.Call;
 import android.telecom.PhoneAccountHandle;
 
@@ -56,4 +57,12 @@
   @Nullable
   @MainThread
   String getPackageName();
+
+  @StringRes
+  @MainThread
+  int getOutgoingCallTypeText();
+
+  @StringRes
+  @MainThread
+  int getIncomingCallTypeText();
 }
diff --git a/java/com/android/dialer/lightbringer/stub/LightbringerStub.java b/java/com/android/dialer/lightbringer/stub/LightbringerStub.java
index 1cb3c1f..92230a4 100644
--- a/java/com/android/dialer/lightbringer/stub/LightbringerStub.java
+++ b/java/com/android/dialer/lightbringer/stub/LightbringerStub.java
@@ -22,6 +22,7 @@
 import android.support.annotation.MainThread;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.annotation.StringRes;
 import android.telecom.Call;
 import android.telecom.PhoneAccountHandle;
 import com.android.dialer.common.Assert;
@@ -97,4 +98,16 @@
   public String getPackageName() {
     return null;
   }
+
+  @StringRes
+  @Override
+  public int getOutgoingCallTypeText() {
+    return -1;
+  }
+
+  @StringRes
+  @Override
+  public int getIncomingCallTypeText() {
+    return -1;
+  }
 }