Merge changes I332d53ab,I18d63f4e

* changes:
  Update contact photo for RTT call screen.
  Fix the bug that number format is not correct in RTL mode.
diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java
index 2f88c88..1f7a0d3 100644
--- a/java/com/android/incallui/CallCardPresenter.java
+++ b/java/com/android/incallui/CallCardPresenter.java
@@ -36,6 +36,8 @@
 import android.telecom.Call.Details;
 import android.telecom.StatusHints;
 import android.telecom.TelecomManager;
+import android.text.BidiFormatter;
+import android.text.TextDirectionHeuristics;
 import android.text.TextUtils;
 import android.view.Display;
 import android.view.View;
@@ -987,7 +989,10 @@
         ContactDisplayUtils.getPreferredDisplayName(
             contactInfo.namePrimary, contactInfo.nameAlternative, contactsPreferences);
     if (TextUtils.isEmpty(preferredName)) {
-      return contactInfo.number;
+      return TextUtils.isEmpty(contactInfo.number)
+          ? null
+          : BidiFormatter.getInstance()
+              .unicodeWrap(contactInfo.number, TextDirectionHeuristics.LTR);
     }
     return preferredName;
   }
diff --git a/java/com/android/incallui/rtt/impl/RttChatAdapter.java b/java/com/android/incallui/rtt/impl/RttChatAdapter.java
index 955fc9f..fb73d19 100644
--- a/java/com/android/incallui/rtt/impl/RttChatAdapter.java
+++ b/java/com/android/incallui/rtt/impl/RttChatAdapter.java
@@ -17,6 +17,7 @@
 package com.android.incallui.rtt.impl;
 
 import android.content.Context;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -32,6 +33,8 @@
 /** Adapter class for holding RTT chat data. */
 public class RttChatAdapter extends RecyclerView.Adapter<RttChatMessageViewHolder> {
 
+  private Drawable avatarDrawable;
+
   interface MessageListener {
     void onUpdateRemoteMessage(int position);
 
@@ -75,7 +78,7 @@
     if (i > 0) {
       isSameGroup = rttMessages.get(i).isRemote == rttMessages.get(i - 1).isRemote;
     }
-    rttChatMessageViewHolder.setMessage(rttMessages.get(i), isSameGroup);
+    rttChatMessageViewHolder.setMessage(rttMessages.get(i), isSameGroup, avatarDrawable);
   }
 
   @Override
@@ -169,4 +172,8 @@
     bundle.putParcelableArrayList(KEY_MESSAGE_DATA, (ArrayList<RttChatMessage>) rttMessages);
     bundle.putInt(KEY_LAST_LOCAL_MESSAGE, lastIndexOfLocalMessage);
   }
+
+  void setAvatarDrawable(Drawable drawable) {
+    avatarDrawable = drawable;
+  }
 }
diff --git a/java/com/android/incallui/rtt/impl/RttChatFragment.java b/java/com/android/incallui/rtt/impl/RttChatFragment.java
index a181f88..a889408 100644
--- a/java/com/android/incallui/rtt/impl/RttChatFragment.java
+++ b/java/com/android/incallui/rtt/impl/RttChatFragment.java
@@ -48,9 +48,12 @@
 import com.android.dialer.common.FragmentUtils;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.UiUtil;
+import com.android.dialer.lettertile.LetterTileDrawable;
+import com.android.dialer.util.DrawableConverter;
 import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment.AudioRouteSelectorPresenter;
 import com.android.incallui.call.DialerCall.State;
 import com.android.incallui.hold.OnHoldFragment;
+import com.android.incallui.incall.protocol.ContactPhotoType;
 import com.android.incallui.incall.protocol.InCallButtonIds;
 import com.android.incallui.incall.protocol.InCallButtonUi;
 import com.android.incallui.incall.protocol.InCallButtonUiDelegate;
@@ -95,7 +98,8 @@
   private RttOverflowMenu overflowMenu;
   private SecondaryInfo savedSecondaryInfo;
   private TextView statusBanner;
-  private PrimaryInfo primaryInfo;
+  private PrimaryInfo primaryInfo = PrimaryInfo.empty();
+  private PrimaryCallState primaryCallState = PrimaryCallState.empty();
   private boolean isUserScrolling;
   private boolean shouldAutoScrolling;
 
@@ -366,9 +370,35 @@
   public void setPrimary(@NonNull PrimaryInfo primaryInfo) {
     LogUtil.i("RttChatFragment.setPrimary", primaryInfo.toString());
     nameTextView.setText(primaryInfo.name());
+    updateAvatar(primaryInfo);
     this.primaryInfo = primaryInfo;
   }
 
+  private void updateAvatar(PrimaryInfo primaryInfo) {
+    boolean hasPhoto =
+        primaryInfo.photo() != null && primaryInfo.photoType() == ContactPhotoType.CONTACT;
+    // Contact has a photo, don't render a letter tile.
+    if (hasPhoto) {
+      int avatarSize = getResources().getDimensionPixelSize(R.dimen.rtt_avatar_size);
+      adapter.setAvatarDrawable(
+          DrawableConverter.getRoundedDrawable(
+              getContext(), primaryInfo.photo(), avatarSize, avatarSize));
+    } else {
+      LetterTileDrawable letterTile = new LetterTileDrawable(getResources());
+      letterTile.setCanonicalDialerLetterTileDetails(
+          primaryInfo.name(),
+          primaryInfo.contactInfoLookupKey(),
+          LetterTileDrawable.SHAPE_CIRCLE,
+          LetterTileDrawable.getContactTypeFromPrimitives(
+              primaryCallState.isVoiceMailNumber(),
+              primaryInfo.isSpam(),
+              primaryCallState.isBusinessNumber(),
+              primaryInfo.numberPresentation(),
+              primaryCallState.isConference()));
+      adapter.setAvatarDrawable(letterTile);
+    }
+  }
+
   @Override
   public void onAttach(Context context) {
     super.onAttach(context);
@@ -404,6 +434,7 @@
   @Override
   public void setCallState(@NonNull PrimaryCallState primaryCallState) {
     LogUtil.i("RttChatFragment.setCallState", primaryCallState.toString());
+    this.primaryCallState = primaryCallState;
     if (!isTimerStarted && primaryCallState.state() == State.ACTIVE) {
       LogUtil.i(
           "RttChatFragment.setCallState", "starting timer with base: %d", chronometer.getBase());
diff --git a/java/com/android/incallui/rtt/impl/RttChatMessageViewHolder.java b/java/com/android/incallui/rtt/impl/RttChatMessageViewHolder.java
index c88786a..2beea95 100644
--- a/java/com/android/incallui/rtt/impl/RttChatMessageViewHolder.java
+++ b/java/com/android/incallui/rtt/impl/RttChatMessageViewHolder.java
@@ -17,6 +17,7 @@
 package com.android.incallui.rtt.impl;
 
 import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
 import android.support.v7.widget.RecyclerView.ViewHolder;
 import android.view.Gravity;
 import android.view.View;
@@ -41,7 +42,7 @@
     resources = view.getResources();
   }
 
-  void setMessage(RttChatMessage message, boolean isSameGroup) {
+  void setMessage(RttChatMessage message, boolean isSameGroup, Drawable imageDrawable) {
     messageTextView.setText(message.getContent());
     LinearLayout.LayoutParams params = (LayoutParams) container.getLayoutParams();
     params.gravity = message.isRemote ? Gravity.START : Gravity.END;
@@ -56,7 +57,7 @@
         avatarImageView.setVisibility(View.INVISIBLE);
       } else {
         avatarImageView.setVisibility(View.VISIBLE);
-        avatarImageView.setImageResource(R.drawable.product_logo_avatar_anonymous_white_color_120);
+        avatarImageView.setImageDrawable(imageDrawable);
       }
     } else {
       avatarImageView.setVisibility(View.GONE);
diff --git a/java/com/android/incallui/rtt/impl/res/layout/rtt_chat_list_item.xml b/java/com/android/incallui/rtt/impl/res/layout/rtt_chat_list_item.xml
index 54b0f4f..5f17142 100644
--- a/java/com/android/incallui/rtt/impl/res/layout/rtt_chat_list_item.xml
+++ b/java/com/android/incallui/rtt/impl/res/layout/rtt_chat_list_item.xml
@@ -26,8 +26,8 @@
       android:orientation="horizontal">
     <ImageView
         android:id="@+id/rtt_chat_avatar"
-        android:layout_width="40dp"
-        android:layout_height="40dp"
+        android:layout_width="@dimen/rtt_avatar_size"
+        android:layout_height="@dimen/rtt_avatar_size"
         android:layout_marginStart="8dp"
         android:layout_marginEnd="8dp"
         android:visibility="gone"
diff --git a/java/com/android/incallui/rtt/impl/res/values/dimens.xml b/java/com/android/incallui/rtt/impl/res/values/dimens.xml
index a6418d7..c3d28da 100644
--- a/java/com/android/incallui/rtt/impl/res/values/dimens.xml
+++ b/java/com/android/incallui/rtt/impl/res/values/dimens.xml
@@ -19,4 +19,5 @@
   <dimen name="rtt_same_group_message_margin_top">2dp</dimen>
   <dimen name="rtt_overflow_menu_width">180dp</dimen>
   <dimen name="rtt_overflow_menu_elevation">8dp</dimen>
-</resources>
\ No newline at end of file
+  <dimen name="rtt_avatar_size">40dp</dimen>
+</resources>