diff options
author | Jin Cao <jinyan@google.com> | 2014-09-22 13:07:11 -0700 |
---|---|---|
committer | Jin Cao <jinyan@google.com> | 2014-09-22 13:07:11 -0700 |
commit | 42b362587928704ea17b0a09a5e4e16037d14491 (patch) | |
tree | 68ceb011f86215aa34cdcee843a7f1122b24d571 /src | |
parent | bef503898602f9bdb55ab7b2e39de585e27fe4f6 (diff) | |
download | android_packages_apps_UnifiedEmail-42b362587928704ea17b0a09a5e4e16037d14491.tar.gz android_packages_apps_UnifiedEmail-42b362587928704ea17b0a09a5e4e16037d14491.tar.bz2 android_packages_apps_UnifiedEmail-42b362587928704ea17b0a09a5e4e16037d14491.zip |
Fix messageInfo styling
- Fix bug where we incorrectly use displaySendersText (it is only
used by AdTeaserView), this was causing the draft message to
not render properly.
- Add a character style span to the split token so that it's not
white.
b/16321486
b/17586158
Change-Id: I1ad2d919813f031d00e1e9d3e5dbecdd25715edf
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/mail/browse/ConversationItemView.java | 38 | ||||
-rw-r--r-- | src/com/android/mail/browse/SendersView.java | 83 |
2 files changed, 62 insertions, 59 deletions
diff --git a/src/com/android/mail/browse/ConversationItemView.java b/src/com/android/mail/browse/ConversationItemView.java index 200dce196..a9af22dec 100644 --- a/src/com/android/mail/browse/ConversationItemView.java +++ b/src/com/android/mail/browse/ConversationItemView.java @@ -756,8 +756,6 @@ public class ConversationItemView extends View updateBackground(); - mHeader.sendersDisplayText = new SpannableStringBuilder(); - mHeader.hasDraftMessage = mHeader.conversation.numDrafts() > 0; // Parse senders fragments. @@ -1007,21 +1005,18 @@ public class ConversationItemView extends View 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; - } + // 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); - } - - if (mSendersWidth < 0) { - mSendersWidth = 0; + } else { + final SpannableStringBuilder participantText = elideParticipants(mHeader.styledNames); + layoutParticipantText(participantText); } pauseTimer(PERF_TAG_CALCULATE_COORDINATES); @@ -1054,7 +1049,7 @@ public class ConversationItemView extends View } 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 @@ -1066,8 +1061,8 @@ public class ConversationItemView extends View 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) { @@ -1085,17 +1080,16 @@ public class ConversationItemView extends View // 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); } @@ -1123,7 +1117,9 @@ public class ConversationItemView extends View 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 8b224961c..a78d37baf 100644 --- a/src/com/android/mail/browse/SendersView.java +++ b/src/com/android/mail/browse/SendersView.java @@ -24,9 +24,9 @@ import android.content.IntentFilter; 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 @@ public class SendersView { 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 @@ public class SendersView { } } 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 + ""); + appendMessageInfo(messageInfo, Integer.toString(count), CharacterStyle.wrap( + conv.read ? sMessageInfoReadStyleSpan : sMessageInfoUnreadStyleSpan), + false, conv.read); } - messageInfo.setSpan(CharacterStyle.wrap( - conv.read ? sMessageInfoReadStyleSpan : sMessageInfoUnreadStyleSpan), - 0, messageInfo.length(), 0); + + boolean appendSplitToken = hasSenders || count > 1; 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(); + final CharSequence draftText; if (draftCount == 1) { - draftString.append(sDraftSingularString); + draftText = sDraftSingularString; } else { - draftString.append(sDraftPluralString).append( - String.format(sDraftCountFormatString, draftCount)); + draftText = sDraftPluralString + + String.format(sDraftCountFormatString, draftCount); } - draftString.setSpan(CharacterStyle.wrap(sDraftsStyleSpan), 0, - draftString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - messageInfo.append(draftString); + + appendMessageInfo(messageInfo, draftText, sDraftsStyleSpan, appendSplitToken, + conv.read); } - boolean showState = sendingStatus == UIProvider.ConversationSendingState.SENDING || + 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); - } - - SpannableStringBuilder stateSpan = new SpannableStringBuilder(); + appendSplitToken |= draftCount > 0; + 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 @@ public class SendersView { 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, |