am c375c360: am 4da2dce1: am 8f357c20: am 2c9b5856: Merge "Fix messageInfo styling" into ub-gmail-ur14-dev

* commit 'c375c360550279633ecce354931f7e99b0735824':
  Fix messageInfo styling
diff --git a/src/com/android/mail/browse/ConversationItemView.java b/src/com/android/mail/browse/ConversationItemView.java
index b00e83d..a43b5f3 100644
--- a/src/com/android/mail/browse/ConversationItemView.java
+++ b/src/com/android/mail/browse/ConversationItemView.java
@@ -753,8 +753,6 @@
 
         updateBackground();
 
-        mHeader.sendersDisplayText = new SpannableStringBuilder();
-
         mHeader.hasDraftMessage = mHeader.conversation.numDrafts() > 0;
 
         // Parse senders fragments.
@@ -1004,23 +1002,20 @@
         sPaint.setTextSize(mCoordinates.sendersFontSize);
         sPaint.setTypeface(Typeface.DEFAULT);
 
-        if (!mHeader.styledNames.isEmpty()) {
-            final SpannableStringBuilder participantText = elideParticipants(mHeader.styledNames);
-            layoutParticipantText(participantText);
-        } else {
-            // First pass to calculate width of each fragment.
-            if (mSendersWidth < 0) {
-                mSendersWidth = 0;
-            }
-
-            mHeader.sendersDisplayLayout = new StaticLayout(mHeader.sendersDisplayText, sPaint,
-                    mSendersWidth, Alignment.ALIGN_NORMAL, 1, 0, true);
-        }
-
+        // First pass to calculate width of each fragment.
         if (mSendersWidth < 0) {
             mSendersWidth = 0;
         }
 
+        // sendersDisplayText is only set when preserveSendersText is true.
+        if (mHeader.preserveSendersText) {
+            mHeader.sendersDisplayLayout = new StaticLayout(mHeader.sendersDisplayText, sPaint,
+                    mSendersWidth, Alignment.ALIGN_NORMAL, 1, 0, true);
+        } else {
+            final SpannableStringBuilder participantText = elideParticipants(mHeader.styledNames);
+            layoutParticipantText(participantText);
+        }
+
         pauseTimer(PERF_TAG_CALCULATE_COORDINATES);
     }
 
@@ -1051,7 +1046,7 @@
         }
 
         final SpannableStringBuilder messageInfoString = mHeader.messageInfoString;
-        if (messageInfoString.length() > 0) {
+        if (!TextUtils.isEmpty(messageInfoString)) {
             CharacterStyle[] spans = messageInfoString.getSpans(0, messageInfoString.length(),
                     CharacterStyle.class);
             // There is only 1 character style span; make sure we apply all the
@@ -1063,8 +1058,8 @@
             float messageInfoWidth = sPaint.measureText(messageInfoString.toString());
             totalWidth += messageInfoWidth;
         }
-       SpannableString prevSender = null;
-       SpannableString ellipsizedText;
+        SpannableString prevSender = null;
+        SpannableString ellipsizedText;
         for (SpannableString sender : parts) {
             // There may be null sender strings if there were dupes we had to remove.
             if (sender == null) {
@@ -1082,17 +1077,16 @@
             // If there are already senders present in this string, we need to
             // make sure we prepend the dividing token
             if (SendersView.sElidedString.equals(sender.toString())) {
-                prevSender = sender;
                 sender = copyStyles(spans, sElidedPaddingToken + sender + sElidedPaddingToken);
             } else if (!skipToHeader && builder.length() > 0
                     && (prevSender == null || !SendersView.sElidedString.equals(prevSender
                             .toString()))) {
-                prevSender = sender;
                 sender = copyStyles(spans, sSendersSplitToken + sender);
             } else {
-                prevSender = sender;
                 skipToHeader = false;
             }
+            prevSender = sender;
+
             if (spans.length > 0) {
                 spans[0].updateDrawState(sPaint);
             }
@@ -1120,7 +1114,9 @@
             builder.append(fragmentDisplayText);
         }
         mHeader.styledMessageInfoStringOffset = builder.length();
-        builder.append(messageInfoString);
+        if (!TextUtils.isEmpty(messageInfoString)) {
+            builder.append(messageInfoString);
+        }
         return builder;
     }
 
diff --git a/src/com/android/mail/browse/SendersView.java b/src/com/android/mail/browse/SendersView.java
index 8b22496..a78d37b 100644
--- a/src/com/android/mail/browse/SendersView.java
+++ b/src/com/android/mail/browse/SendersView.java
@@ -24,9 +24,9 @@
 import android.content.res.Resources;
 import android.graphics.Typeface;
 import android.support.v4.text.BidiFormatter;
-import android.text.Spannable;
 import android.text.SpannableString;
 import android.text.SpannableStringBuilder;
+import android.text.Spanned;
 import android.text.TextUtils;
 import android.text.style.CharacterStyle;
 import android.text.style.TextAppearanceSpan;
@@ -146,8 +146,8 @@
         SpannableStringBuilder messageInfo = new SpannableStringBuilder();
 
         try {
-            ConversationInfo conversationInfo = conv.conversationInfo;
-            int sendingStatus = conv.sendingState;
+            final ConversationInfo conversationInfo = conv.conversationInfo;
+            final int sendingStatus = conv.sendingState;
             boolean hasSenders = false;
             // This covers the case where the sender is "me" and this is a draft
             // message, which means this will only run once most of the time.
@@ -158,56 +158,48 @@
                 }
             }
             getSenderResources(context, resourceCachingRequired);
-            int count = conversationInfo.messageCount;
-            int draftCount = conversationInfo.draftCount;
+            final int count = conversationInfo.messageCount;
+            final int draftCount = conversationInfo.draftCount;
             if (count > 1) {
-                messageInfo.append(count + "");
-            }
-            messageInfo.setSpan(CharacterStyle.wrap(
-                    conv.read ? sMessageInfoReadStyleSpan : sMessageInfoUnreadStyleSpan),
-                    0, messageInfo.length(), 0);
-            if (draftCount > 0) {
-                // If we are showing a message count or any draft text and there
-                // is at least 1 sender, prepend the sending state text with a
-                // comma.
-                if (hasSenders || count > 1) {
-                    messageInfo.append(sSendersSplitToken);
-                }
-                SpannableStringBuilder draftString = new SpannableStringBuilder();
-                if (draftCount == 1) {
-                    draftString.append(sDraftSingularString);
-                } else {
-                    draftString.append(sDraftPluralString).append(
-                            String.format(sDraftCountFormatString, draftCount));
-                }
-                draftString.setSpan(CharacterStyle.wrap(sDraftsStyleSpan), 0,
-                        draftString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-                messageInfo.append(draftString);
+                appendMessageInfo(messageInfo, Integer.toString(count), CharacterStyle.wrap(
+                        conv.read ? sMessageInfoReadStyleSpan : sMessageInfoUnreadStyleSpan),
+                        false, conv.read);
             }
 
-            boolean showState = sendingStatus == UIProvider.ConversationSendingState.SENDING ||
+            boolean appendSplitToken = hasSenders || count > 1;
+            if (draftCount > 0) {
+                final CharSequence draftText;
+                if (draftCount == 1) {
+                    draftText = sDraftSingularString;
+                } else {
+                    draftText = sDraftPluralString +
+                            String.format(sDraftCountFormatString, draftCount);
+                }
+
+                appendMessageInfo(messageInfo, draftText, sDraftsStyleSpan, appendSplitToken,
+                        conv.read);
+            }
+
+            final boolean showState = sendingStatus == UIProvider.ConversationSendingState.SENDING ||
                     sendingStatus == UIProvider.ConversationSendingState.RETRYING ||
                     sendingStatus == UIProvider.ConversationSendingState.SEND_ERROR;
             if (showState) {
-                // If we are showing a message count or any draft text, prepend
-                // the sending state text with a comma.
-                if (count > 1 || draftCount > 0) {
-                    messageInfo.append(sSendersSplitToken);
-                }
+                appendSplitToken |= draftCount > 0;
 
-                SpannableStringBuilder stateSpan = new SpannableStringBuilder();
-
+                final CharSequence statusText;
+                final Object span;
                 if (sendingStatus == UIProvider.ConversationSendingState.SENDING) {
-                    stateSpan.append(sSendingString);
-                    stateSpan.setSpan(sSendingStyleSpan, 0, stateSpan.length(), 0);
+                    statusText = sSendingString;
+                    span = sSendingStyleSpan;
                 } else if (sendingStatus == UIProvider.ConversationSendingState.RETRYING) {
-                    stateSpan.append(sRetryingString);
-                    stateSpan.setSpan(sRetryingStyleSpan, 0, stateSpan.length(), 0);
-                } else if (sendingStatus == UIProvider.ConversationSendingState.SEND_ERROR) {
-                    stateSpan.append(sFailedString);
-                    stateSpan.setSpan(sFailedStyleSpan, 0, stateSpan.length(), 0);
+                    statusText = sRetryingString;
+                    span = sRetryingStyleSpan;
+                } else {
+                    statusText = sFailedString;
+                    span = sFailedStyleSpan;
                 }
-                messageInfo.append(stateSpan);
+
+                appendMessageInfo(messageInfo, statusText, span, appendSplitToken, conv.read);
             }
 
             // Prepend a space if we are showing other message info text.
@@ -223,6 +215,21 @@
         return messageInfo;
     }
 
+    private static void appendMessageInfo(SpannableStringBuilder sb, CharSequence text,
+            Object span, boolean appendSplitToken, boolean convRead) {
+        int startIndex = sb.length();
+        if (appendSplitToken) {
+            sb.append(sSendersSplitToken);
+            sb.setSpan(CharacterStyle.wrap(convRead ?
+                    sMessageInfoReadStyleSpan : sMessageInfoUnreadStyleSpan),
+                    startIndex, sb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+        }
+
+        startIndex = sb.length();
+        sb.append(text);
+        sb.setSpan(span, startIndex, sb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+    }
+
     public static void format(Context context, ConversationInfo conversationInfo,
             String messageInfo, int maxChars, ArrayList<SpannableString> styledSenders,
             ArrayList<String> displayableSenderNames,