Make sure that we render conversation sender details.

Change-Id: I5fffcf1b4abf6ee565d0d1db5520fd14dd6490be
diff --git a/res/layout/conversation_item_view_normal.xml b/res/layout/conversation_item_view_normal.xml
index c30d699..c0ad362 100644
--- a/res/layout/conversation_item_view_normal.xml
+++ b/res/layout/conversation_item_view_normal.xml
@@ -30,7 +30,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:gravity="center_vertical">
-        <TextView
+        <com.android.mail.browse.SendersView
             android:id="@+id/senders"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
diff --git a/res/layout/conversation_item_view_wide.xml b/res/layout/conversation_item_view_wide.xml
index d9b77f4..9d6ccdb 100644
--- a/res/layout/conversation_item_view_wide.xml
+++ b/res/layout/conversation_item_view_wide.xml
@@ -35,7 +35,7 @@
         android:layout_marginRight="16dip"
         android:layout_gravity="center_vertical"
         android:src="@drawable/btn_check_on_normal_holo_light" />
-    <TextView
+    <com.android.mail.browse.SendersView
         android:id="@+id/senders"
         android:layout_width="224dip"
         android:layout_height="wrap_content"
diff --git a/src/com/android/mail/browse/ConversationItemView.java b/src/com/android/mail/browse/ConversationItemView.java
index cf81f1e..91cd325 100644
--- a/src/com/android/mail/browse/ConversationItemView.java
+++ b/src/com/android/mail/browse/ConversationItemView.java
@@ -50,23 +50,17 @@
 import android.text.style.CharacterStyle;
 import android.text.style.ForegroundColorSpan;
 import android.text.style.StyleSpan;
-import android.text.util.Rfc822Token;
-import android.text.util.Rfc822Tokenizer;
 import android.util.SparseArray;
 import android.view.HapticFeedbackConstants;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewConfiguration;
-import android.view.View.DragShadowBuilder;
-import android.view.View.MeasureSpec;
 import android.view.animation.DecelerateInterpolator;
-import android.widget.Checkable;
 import android.widget.ListView;
 
 import com.android.mail.R;
 import com.android.mail.browse.ConversationItemViewModel.SenderFragment;
 import com.android.mail.perf.Timer;
-import com.android.mail.providers.Address;
 import com.android.mail.providers.Conversation;
 import com.android.mail.providers.Folder;
 import com.android.mail.providers.UIProvider;
@@ -124,7 +118,7 @@
     private static int sStandardScaledDimen;
     private static int sUndoAnimationDuration;
     private static CharacterStyle sLightTextStyle;
-    private static CharacterStyle sNormalTextStyle;
+    protected static CharacterStyle sNormalTextStyle;
 
     // Static paints.
     private static TextPaint sPaint = new TextPaint();
@@ -174,7 +168,6 @@
         sFoldersPaint.setAntiAlias(true);
     }
 
-
     /**
      * Handles displaying folders in a conversation header view.
      */
@@ -556,7 +549,7 @@
         createSubjectSpans(isUnread);
 
         // Parse senders fragments.
-        parseSendersFragments(isUnread);
+        mCoordinates.sendersView.parseSendersFragments(mHeader, isUnread, mMode);
 
         pauseTimer(PERF_TAG_CALCULATE_SENDER_SUBJECT);
         pauseTimer(PERF_TAG_CALCULATE_TEXTS_BITMAPS);
@@ -598,35 +591,6 @@
         }
     }
 
-    /**
-     * Parses senders text into small fragments.
-     */
-    private void parseSendersFragments(boolean isUnread) {
-        if (TextUtils.isEmpty(mHeader.conversation.senders)) {
-            return;
-        }
-        mHeader.sendersText = formatSenders(mHeader.conversation.senders);
-        mHeader.addSenderFragment(0, mHeader.sendersText.length(), sNormalTextStyle, true);
-    }
-
-    private String formatSenders(String sendersString) {
-        String[] senders = TextUtils.split(sendersString, Address.ADDRESS_DELIMETER);
-        String[] namesOnly = new String[senders.length];
-        Rfc822Token[] senderTokens;
-        String display;
-        for (int i = 0; i < senders.length; i++) {
-            senderTokens = Rfc822Tokenizer.tokenize(senders[i]);
-            if (senderTokens != null && senderTokens.length > 0) {
-                display = senderTokens[0].getName();
-                if (TextUtils.isEmpty(display)) {
-                    display = senderTokens[0].getAddress();
-                }
-                namesOnly[i] = display;
-            }
-        }
-        return TextUtils.join(Address.ADDRESS_DELIMETER + " ", namesOnly);
-    }
-
     private boolean canFitFragment(int width, int line, int fixedWidth) {
         if (line == mCoordinates.sendersLineCount) {
             return width + fixedWidth <= mSendersWidth;
@@ -875,7 +839,7 @@
         // Senders.
         boolean isUnread = mHeader.unread;
         sPaint.setTextSize(mCoordinates.sendersFontSize);
-        sPaint.setTypeface(isUnread ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT);
+        sPaint.setTypeface(mCoordinates.sendersView.getTypeface(isUnread));
         int sendersColor = getFontColor(isUnread ? SENDERS_TEXT_COLOR_UNREAD
                 : SENDERS_TEXT_COLOR_READ);
         sPaint.setColor(sendersColor);
diff --git a/src/com/android/mail/browse/ConversationItemViewCoordinates.java b/src/com/android/mail/browse/ConversationItemViewCoordinates.java
index 0afc443..2c59b21 100644
--- a/src/com/android/mail/browse/ConversationItemViewCoordinates.java
+++ b/src/com/android/mail/browse/ConversationItemViewCoordinates.java
@@ -104,6 +104,7 @@
 
     // Minimum height of this view; used for animating.
     int minHeight;
+    SendersView sendersView;
 
 
     // Cache to save Coordinates based on view width.
@@ -322,7 +323,8 @@
                 coordinates.showPersonalLevel = false;
             }
 
-            TextView senders = (TextView) view.findViewById(R.id.senders);
+            SendersView senders = (SendersView) view.findViewById(R.id.senders);
+            coordinates.sendersView = senders;
             coordinates.sendersX = getX(senders);
             coordinates.sendersY = getY(senders);
             coordinates.sendersWidth = senders.getWidth();
diff --git a/src/com/android/mail/browse/SendersView.java b/src/com/android/mail/browse/SendersView.java
new file mode 100644
index 0000000..b99747e
--- /dev/null
+++ b/src/com/android/mail/browse/SendersView.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2012 Google Inc.
+ * Licensed to The Android Open Source Project.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mail.browse;
+
+import android.content.Context;
+import android.graphics.Typeface;
+import android.text.TextUtils;
+import android.text.style.CharacterStyle;
+import android.text.style.StyleSpan;
+import android.text.util.Rfc822Token;
+import android.text.util.Rfc822Tokenizer;
+import android.util.AttributeSet;
+import android.widget.TextView;
+
+import com.android.mail.providers.Address;
+import com.android.mail.providers.Conversation;
+
+public class SendersView extends TextView {
+    CharacterStyle sNormalTextStyle = new StyleSpan(Typeface.NORMAL);
+
+    public SendersView(Context context) {
+        this(context, null);
+    }
+
+    public SendersView(Context context, AttributeSet attrs) {
+        this(context, attrs, -1);
+    }
+
+    public SendersView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    public Typeface getTypeface(boolean isUnread) {
+        return isUnread ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT;
+    }
+
+    /**
+     * Parses senders text into small fragments.
+     */
+    public void parseSendersFragments(ConversationItemViewModel header, boolean isUnread,
+            int mode) {
+        if (TextUtils.isEmpty(header.conversation.senders)) {
+            return;
+        }
+        header.sendersText = formatSenders(header.conversation);
+        header.addSenderFragment(0, header.sendersText.length(), sNormalTextStyle, true);
+    }
+
+    public String formatSenders(Conversation conversation) {
+        String sendersString = conversation.senders;
+        String[] senders = TextUtils.split(sendersString, Address.ADDRESS_DELIMETER);
+        String[] namesOnly = new String[senders.length];
+        Rfc822Token[] senderTokens;
+        String display;
+        for (int i = 0; i < senders.length; i++) {
+            senderTokens = Rfc822Tokenizer.tokenize(senders[i]);
+            if (senderTokens != null && senderTokens.length > 0) {
+                display = senderTokens[0].getName();
+                if (TextUtils.isEmpty(display)) {
+                    display = senderTokens[0].getAddress();
+                }
+                namesOnly[i] = display;
+            }
+        }
+        return TextUtils.join(Address.ADDRESS_DELIMETER + " ", namesOnly);
+    }
+}