Fix UI discrepencies

Bug: 197674556

PiperOrigin-RevId: 401365789
Change-Id: I9a569ece4fc902ed4aca014c137bead4fba6dd39
diff --git a/res/drawable/ic_subtitle_play.xml b/res/drawable/ic_subtitle_play.xml
index 9eccfaf..b14bfb9 100644
--- a/res/drawable/ic_subtitle_play.xml
+++ b/res/drawable/ic_subtitle_play.xml
@@ -15,8 +15,8 @@
   ~ limitations under the License.
   -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="11dp"
-    android:height="14dp"
+    android:width="14.67dp"
+    android:height="18.67dp"
     android:viewportHeight="14"
     android:viewportWidth="11">
     <path
diff --git a/res/layout/conversation_list_item.xml b/res/layout/conversation_list_item.xml
index 3739d9d..b9455a3 100644
--- a/res/layout/conversation_list_item.xml
+++ b/res/layout/conversation_list_item.xml
@@ -95,6 +95,7 @@
         tools:text="Ashley Bae"
         app:layout_constraintVertical_chainStyle="packed"
         android:theme="@style/Theme.Messaging.BidiText"
+        android:ellipsize="end"
         app:layout_constraintBottom_toTopOf="@+id/preview"
         app:layout_constraintEnd_toEndOf="@id/guideline_end"
         app:layout_constraintStart_toStartOf="@id/guideline_begin"
@@ -129,7 +130,7 @@
         app:layout_constraintEnd_toStartOf="@id/preview_dot"
         tools:visibility="visible"
         android:ellipsize="end"
-        android:maxLength="20"
+        android:maxEms="19"
         tools:text="Let this be the preview. Lots of preview with
         a whole lot of various texts, one that is quite long in every way.
         To verify that it still fits in the end" />
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 42d721b..863fd2d 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -64,7 +64,9 @@
 
     <!-- Contact Avatar -->
     <item name="letter_spacing_display3" format="float" type="dimen">0.0</item>
-    <item name="letter_spacing_body1" format="float" type="dimen">0.0</item>
-    <item name="letter_spacing_body2" format="float" type="dimen">0.0</item>
-    <item name="letter_spacing_body3" format="float" type="dimen">0.0</item>
+    <item name="letter_spacing_body1" format="float" type="dimen">0.03</item>
+    <item name="letter_spacing_body2" format="float" type="dimen">0.045</item>
+    <item name="letter_spacing_body3" format="float" type="dimen">0.06</item>
+
+    <dimen name="dot_size">32sp</dimen>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3108071..17c90fe 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -93,6 +93,9 @@
     <!-- A string denoting the current point in time that should be as short as possible. Abbreviations are preferred to full strings as this might be shown repetitively. It is used in the header of notifications. [CHAR LIMIT=8]-->
     <string name="now_string_shortest">now</string>
 
+    <!-- Overflow title text for too many participants in a conversation [CHAR LIMIT=40] -->
+    <string name="participant_overflow_text">, and %d more</string>
+
     <!-- Phrase describing a time duration using minutes that is as short as possible, preferrably one character. If the language needs a space in between the integer and the unit, please also integrate it in the string, but preferably it should not have a space in between.[CHAR LIMIT=6] -->
     <plurals name="duration_minutes_shortest">
         <item quantity="one"><xliff:g example="1" id="count" translatable="false">%d</xliff:g>m</item>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 8845c0a..f332ebb 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -15,15 +15,19 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- Message history -->
-    <style name="TextAppearance.MessageHistoryTitle" parent="TextAppearance.Body1" />
+    <style name="TextAppearance.MessageHistoryTitle" parent="TextAppearance.Body1" >
+    </style>
 
-    <style name="TextAppearance.MessageHistoryTextPreviewUnread" parent="TextAppearance.CarUi.Body1">
+    <style name="TextAppearance.MessageHistoryTextPreviewUnread" parent="TextAppearance.Body3">
         <item name="android:textColor">@color/unread_color</item>
+        <item name="android:alpha">0.72</item>
     </style>
 
-    <style name="TextAppearance.MessageHistoryTextPreview" parent="TextAppearance.CarUi.Body1">
+    <style name="TextAppearance.MessageHistoryTextPreview" parent="TextAppearance.Body3">
         <item name="android:textColor">@color/secondary_text_color</item>
+        <item name="android:alpha">0.72</item>
     </style>
+
     <!-- Customized text color for unread messages can be added here -->
     <style name="TextAppearance.MessageHistoryUnreadTitle"
         parent="TextAppearance.MessageHistoryTitle">
@@ -62,6 +66,7 @@
         <item name="android:fontFamily">roboto-regular</item>
         <item name="android:textColor">@color/primary_text_color</item>
         <item name="android:textAlignment">viewStart</item>
+        <item name="android:textFontWeight">400</item>
     </style>
 
     <style name="TextAppearance.Display3" parent="TextAppearance">
@@ -72,16 +77,19 @@
     <style name="TextAppearance.Body1" parent="TextAppearance">
         <item name="android:textSize">32sp</item>
         <item name="android:letterSpacing">@dimen/letter_spacing_body1</item>
+        <item name="android:lineHeight">40sp</item>
     </style>
 
     <style name="TextAppearance.Body2" parent="TextAppearance">
         <item name="android:textSize">28sp</item>
         <item name="android:letterSpacing">@dimen/letter_spacing_body2</item>
+        <item name="android:lineHeight">36sp</item>
     </style>
 
     <style name="TextAppearance.Body3" parent="TextAppearance">
         <item name="android:textSize">24sp</item>
         <item name="android:letterSpacing">@dimen/letter_spacing_body3</item>
+        <item name="android:lineHeight">32sp</item>
     </style>
 
     <!-- Styles for ControlBar -->
@@ -107,4 +115,4 @@
         <item name="android:gravity">center</item>
         <item name="android:paddingHorizontal">@dimen/hero_button_corner_radius</item>
     </style>
-</resources>
\ No newline at end of file
+</resources>
diff --git a/src/com/android/car/messenger/core/shared/NotificationHandler.java b/src/com/android/car/messenger/core/shared/NotificationHandler.java
index 167c283..f63696c 100644
--- a/src/com/android/car/messenger/core/shared/NotificationHandler.java
+++ b/src/com/android/car/messenger/core/shared/NotificationHandler.java
@@ -79,7 +79,8 @@
 
     private static PendingIntent createContentIntent() {
         Context context = AppFactory.get().getContext();
-        Intent intent = new Intent(context, MessageLauncherActivity.class)
+        Intent intent =
+                new Intent(context, MessageLauncherActivity.class)
                         .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
 
         return PendingIntent.getActivity(
diff --git a/src/com/android/car/messenger/core/ui/conversationlist/ConversationItemViewHolder.java b/src/com/android/car/messenger/core/ui/conversationlist/ConversationItemViewHolder.java
index 4f4de71..1ac5a50 100644
--- a/src/com/android/car/messenger/core/ui/conversationlist/ConversationItemViewHolder.java
+++ b/src/com/android/car/messenger/core/ui/conversationlist/ConversationItemViewHolder.java
@@ -135,6 +135,7 @@
             updateSubtitleIcon(context.getColor(R.color.secondary_text_color));
             ViewUtils.setVisible(mUnreadIconIndicator, /* visible= */ false);
         }
+        mDotSeparatorView.setTextSize(context.getResources().getDimension(R.dimen.dot_size));
     }
 
     private void updateSubtitleIcon(@ColorInt int color) {
diff --git a/src/com/android/car/messenger/core/ui/conversationlist/ConversationListFragment.java b/src/com/android/car/messenger/core/ui/conversationlist/ConversationListFragment.java
index bc27889..78e6608 100644
--- a/src/com/android/car/messenger/core/ui/conversationlist/ConversationListFragment.java
+++ b/src/com/android/car/messenger/core/ui/conversationlist/ConversationListFragment.java
@@ -135,7 +135,7 @@
         MenuItem newMessageButton =
                 new MenuItem.Builder(activity)
                         .setIcon(R.drawable.ui_icon_edit)
-                        .setTinted(true)
+                        .setTinted(false)
                         .setShowIconAndTitle(true)
                         .setTitle(R.string.new_message)
                         .setPrimary(true)
diff --git a/src/com/android/car/messenger/impl/datamodels/util/ConversationFetchUtil.java b/src/com/android/car/messenger/impl/datamodels/util/ConversationFetchUtil.java
index ddedbe2..5cea752 100644
--- a/src/com/android/car/messenger/impl/datamodels/util/ConversationFetchUtil.java
+++ b/src/com/android/car/messenger/impl/datamodels/util/ConversationFetchUtil.java
@@ -16,6 +16,8 @@
 
 package com.android.car.messenger.impl.datamodels.util;
 
+import static java.lang.Math.min;
+
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.database.Cursor;
@@ -27,6 +29,7 @@
 import androidx.annotation.NonNull;
 import androidx.core.app.Person;
 
+import com.android.car.messenger.R;
 import com.android.car.messenger.common.Conversation;
 import com.android.car.messenger.core.interfaces.AppFactory;
 import com.android.car.messenger.core.shared.MessageConstants;
@@ -44,6 +47,7 @@
 
     private static final int MESSAGE_LIMIT = 10;
     private static final String COMMA_DELIMITER = ", ";
+    private static final int MAX_TITLE_NAMES = 3;
 
     private ConversationFetchUtil() {}
 
@@ -82,7 +86,7 @@
                 fetchParticipants(
                         conversationId,
                         (names, icons) -> {
-                            builder.setConversationTitle(TextUtils.join(COMMA_DELIMITER, names));
+                            builder.setConversationTitle(formatConversationTitle(names));
                             Bitmap bitmap = AvatarUtil.createGroupAvatar(context, icons);
                             if (bitmap != null) {
                                 builder.setConversationIcon(IconCompat.createWithBitmap(bitmap));
@@ -93,6 +97,19 @@
         return builder;
     }
 
+    private static String formatConversationTitle(List<CharSequence> names) {
+        Context context = AppFactory.get().getContext();
+        String title =
+                TextUtils.join(
+                        COMMA_DELIMITER, names.subList(0, min(MAX_TITLE_NAMES, names.size())));
+        if (names.size() > MAX_TITLE_NAMES) {
+            title +=
+                    context.getString(
+                            R.string.participant_overflow_text, names.size() - MAX_TITLE_NAMES);
+        }
+        return title;
+    }
+
     /**
      * Fetches participants and allows caller to process names and icons before returning.
      *