summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJin Cao <jinyan@google.com>2014-09-22 13:07:11 -0700
committerJin Cao <jinyan@google.com>2014-09-22 13:07:11 -0700
commit42b362587928704ea17b0a09a5e4e16037d14491 (patch)
tree68ceb011f86215aa34cdcee843a7f1122b24d571 /src
parentbef503898602f9bdb55ab7b2e39de585e27fe4f6 (diff)
downloadandroid_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.java38
-rw-r--r--src/com/android/mail/browse/SendersView.java83
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,