Add RTT badge to new call log.

Bug: 77717594
Test: ContactPhotoViewTest
PiperOrigin-RevId: 192492913
Change-Id: I6db36017fde2cf9dca580d60d5c88bf2ad2dfe16
diff --git a/java/com/android/dialer/calllog/database/Coalescer.java b/java/com/android/dialer/calllog/database/Coalescer.java
index 6b1a9e1..5fdf0df 100644
--- a/java/com/android/dialer/calllog/database/Coalescer.java
+++ b/java/com/android/dialer/calllog/database/Coalescer.java
@@ -203,6 +203,11 @@
       return false;
     }
 
+    // A RTT call should not be combined with one that is not a RTT call.
+    if ((row1Features & Calls.FEATURES_RTT) != (row2Features & Calls.FEATURES_RTT)) {
+      return false;
+    }
+
     return true;
   }
 
diff --git a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
index 217208d..d1a654a 100644
--- a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
+++ b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
@@ -21,6 +21,7 @@
 import android.database.Cursor;
 import android.provider.CallLog.Calls;
 import android.support.annotation.DrawableRes;
+import android.support.v4.os.BuildCompat;
 import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
 import android.view.View;
@@ -152,6 +153,9 @@
         NumberAttributesConverter.toPhotoInfoBuilder(row.getNumberAttributes())
             .setFormattedNumber(row.getFormattedNumber())
             .setIsVideo((row.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO)
+            .setIsRtt(
+                BuildCompat.isAtLeastP()
+                    && (row.getFeatures() & Calls.FEATURES_RTT) == Calls.FEATURES_RTT)
             .setIsVoicemail(row.getIsVoicemailCall())
             .build());
   }
diff --git a/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java b/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java
index d348541..d87888d 100644
--- a/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java
+++ b/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.provider.CallLog.Calls;
+import android.support.v4.os.BuildCompat;
 import com.android.dialer.calllog.model.CoalescedRow;
 import com.android.dialer.calllogutils.CallLogEntryText;
 import com.android.dialer.calllogutils.NumberAttributesConverter;
@@ -33,6 +34,9 @@
             NumberAttributesConverter.toPhotoInfoBuilder(row.getNumberAttributes())
                 .setFormattedNumber(row.getFormattedNumber())
                 .setIsVideo((row.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO)
+                .setIsRtt(
+                    BuildCompat.isAtLeastP()
+                        && (row.getFeatures() & Calls.FEATURES_RTT) == Calls.FEATURES_RTT)
                 .build())
         .setPrimaryText(CallLogEntryText.buildPrimaryText(context, row).toString())
         .setSecondaryText(
diff --git a/java/com/android/dialer/calllog/ui/menu/Modules.java b/java/com/android/dialer/calllog/ui/menu/Modules.java
index dd0b085..e16de3a 100644
--- a/java/com/android/dialer/calllog/ui/menu/Modules.java
+++ b/java/com/android/dialer/calllog/ui/menu/Modules.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.provider.CallLog.Calls;
+import android.support.v4.os.BuildCompat;
 import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
 import android.text.TextUtils;
@@ -211,6 +212,9 @@
     return NumberAttributesConverter.toPhotoInfoBuilder(row.getNumberAttributes())
         .setFormattedNumber(row.getFormattedNumber())
         .setIsVideo((row.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO)
+        .setIsRtt(
+            BuildCompat.isAtLeastP()
+                && (row.getFeatures() & Calls.FEATURES_RTT) == Calls.FEATURES_RTT)
         .setIsVoicemail(row.getIsVoicemailCall())
         .build();
   }
diff --git a/java/com/android/dialer/glidephotomanager/photo_info.proto b/java/com/android/dialer/glidephotomanager/photo_info.proto
index 447cfe8..6fa21d8 100644
--- a/java/com/android/dialer/glidephotomanager/photo_info.proto
+++ b/java/com/android/dialer/glidephotomanager/photo_info.proto
@@ -9,7 +9,7 @@
 
 // Contains information associated with a number, which is used to create the
 // photo.
-// Next ID: 11
+// Next ID: 12
 message PhotoInfo {
   // The display name of the number.
   optional string name = 1;
@@ -41,4 +41,7 @@
 
   // Whether the photo should be badged as video call.
   optional bool is_video = 10;
+
+  // Whether the photo should be badged as RTT call.
+  optional bool is_rtt = 11;
 }
diff --git a/java/com/android/dialer/widget/ContactPhotoView.java b/java/com/android/dialer/widget/ContactPhotoView.java
index 5020875..03d25de 100644
--- a/java/com/android/dialer/widget/ContactPhotoView.java
+++ b/java/com/android/dialer/widget/ContactPhotoView.java
@@ -37,6 +37,7 @@
   private final QuickContactBadge contactPhoto;
   private final FrameLayout contactBadgeContainer;
   private final ImageView videoCallBadge;
+  private final ImageView rttCallBadge;
 
   private final GlidePhotoManager glidePhotoManager;
 
@@ -61,6 +62,7 @@
     contactPhoto = findViewById(R.id.quick_contact_photo);
     contactBadgeContainer = findViewById(R.id.contact_badge_container);
     videoCallBadge = findViewById(R.id.video_call_badge);
+    rttCallBadge = findViewById(R.id.rtt_call_badge);
 
     glidePhotoManager = GlidePhotoManagerComponent.get(context).glidePhotoManager();
 
@@ -75,6 +77,7 @@
   private void hideBadge() {
     contactBadgeContainer.setVisibility(View.INVISIBLE);
     videoCallBadge.setVisibility(View.INVISIBLE);
+    rttCallBadge.setVisibility(View.INVISIBLE);
   }
 
   /** Sets the contact photo and its badge to be displayed. */
@@ -93,6 +96,15 @@
     if (photoInfo.getIsVideo()) {
       contactBadgeContainer.setVisibility(View.VISIBLE);
       videoCallBadge.setVisibility(View.VISIBLE);
+      // Normally a video call can't be RTT call and vice versa.
+      // (a bug): In theory a video call could be downgraded to voice and upgraded to RTT call
+      // again, this might end up a call with video and RTT features both set. Update logic here if
+      // that could happen. Also update {@link Coalescer#meetsCallFeatureCriteria}.
+      rttCallBadge.setVisibility(INVISIBLE);
+    } else if (photoInfo.getIsRtt()) {
+      contactBadgeContainer.setVisibility(View.VISIBLE);
+      videoCallBadge.setVisibility(INVISIBLE);
+      rttCallBadge.setVisibility(View.VISIBLE);
     } else {
       hideBadge();
     }
diff --git a/java/com/android/dialer/widget/res/layout/contact_photo_view.xml b/java/com/android/dialer/widget/res/layout/contact_photo_view.xml
index 2f5cd9e..a825ce3 100644
--- a/java/com/android/dialer/widget/res/layout/contact_photo_view.xml
+++ b/java/com/android/dialer/widget/res/layout/contact_photo_view.xml
@@ -47,5 +47,13 @@
         android:layout_height="13dp"
         android:layout_gravity="center"
         android:src="@drawable/quantum_ic_videocam_vd_white_24"/>
+
+    <ImageView
+        android:id="@+id/rtt_call_badge"
+        android:layout_width="13dp"
+        android:layout_height="13dp"
+        android:layout_gravity="center"
+        android:tint="@android:color/white"
+        android:src="@drawable/quantum_ic_rtt_vd_theme_24"/>
   </FrameLayout>
 </FrameLayout>
\ No newline at end of file