Merge "Sending a mail to self crashes gmail" into ub-gmail-ur14-dev
diff --git a/src/com/android/mail/browse/ConversationItemView.java b/src/com/android/mail/browse/ConversationItemView.java
index bb20182..cc5305d 100644
--- a/src/com/android/mail/browse/ConversationItemView.java
+++ b/src/com/android/mail/browse/ConversationItemView.java
@@ -779,13 +779,7 @@
SendersView.format(context, mHeader.conversation.conversationInfo,
mHeader.messageInfoString.toString(), maxChars, mHeader.styledNames,
mHeader.displayableNames, mHeader.mSenderAvatarModel,
- mAccount.getEmailAddress(), mDisplayedFolder.shouldShowRecipients(), true);
-
- if (mHeader.mSenderAvatarModel.isNotPopulated() && mHeader.hasDraftMessage) {
- mHeader.mSenderAvatarModel.populate(mAccount.getDisplayName(),
- mAccount.getEmailAddress());
- mHeader.displayableNames.add(mAccount.getDisplayName());
- }
+ mAccount, mDisplayedFolder.shouldShowRecipients(), true);
// If we have displayable senders, load their thumbnails
loadImages();
diff --git a/src/com/android/mail/browse/SendersView.java b/src/com/android/mail/browse/SendersView.java
index 734a59a..8b22496 100644
--- a/src/com/android/mail/browse/SendersView.java
+++ b/src/com/android/mail/browse/SendersView.java
@@ -32,6 +32,7 @@
import android.text.style.TextAppearanceSpan;
import com.android.mail.R;
+import com.android.mail.providers.Account;
import com.android.mail.providers.Conversation;
import com.android.mail.providers.ConversationInfo;
import com.android.mail.providers.ParticipantInfo;
@@ -226,7 +227,7 @@
String messageInfo, int maxChars, ArrayList<SpannableString> styledSenders,
ArrayList<String> displayableSenderNames,
ConversationItemViewModel.SenderAvatarModel senderAvatarModel,
- String account, final boolean showToHeader, final boolean resourceCachingRequired) {
+ Account account, final boolean showToHeader, final boolean resourceCachingRequired) {
try {
getSenderResources(context, resourceCachingRequired);
format(context, conversationInfo, messageInfo, maxChars, styledSenders,
@@ -243,7 +244,7 @@
String messageInfo, int maxChars, ArrayList<SpannableString> styledSenders,
ArrayList<String> displayableSenderNames,
ConversationItemViewModel.SenderAvatarModel senderAvatarModel,
- String account, final TextAppearanceSpan notificationUnreadStyleSpan,
+ Account account, final TextAppearanceSpan notificationUnreadStyleSpan,
final CharacterStyle notificationReadStyleSpan, final boolean showToHeader,
final boolean resourceCachingRequired) {
try {
@@ -262,7 +263,7 @@
ConversationInfo conversationInfo, ArrayList<SpannableString> styledSenders,
ArrayList<String> displayableSenderNames,
ConversationItemViewModel.SenderAvatarModel senderAvatarModel,
- String account, final TextAppearanceSpan unreadStyleSpan,
+ Account account, final TextAppearanceSpan unreadStyleSpan,
final CharacterStyle readStyleSpan, final boolean showToHeader) {
final boolean shouldSelectSenders = displayableSenderNames != null;
final boolean shouldSelectAvatar = senderAvatarModel != null;
@@ -363,7 +364,7 @@
}
}
- final String senderEmail = TextUtils.isEmpty(currentName) ? account :
+ final String senderEmail = TextUtils.isEmpty(currentName) ? account.getEmailAddress() :
TextUtils.isEmpty(currentEmail) ? currentName : currentEmail;
if (shouldSelectSenders) {
@@ -406,9 +407,7 @@
}
// if all messages in the thread were read, we must search for an appropriate avatar
- if (shouldSelectAvatar && senderAvatarModel.isNotPopulated() &&
- !conversationInfo.participantInfos.isEmpty()) {
-
+ if (shouldSelectAvatar && senderAvatarModel.isNotPopulated()) {
// search for the last sender that is not the current account
for (int i = conversationInfo.participantInfos.size() - 1; i >= 0; i--) {
final ParticipantInfo participant = conversationInfo.participantInfos.get(i);
@@ -418,11 +417,9 @@
}
}
- // if we still don't have an avatar, the account is emailing itself; use the last sender
+ // if we still don't have an avatar, the account is emailing itself
if (senderAvatarModel.isNotPopulated()) {
- final int lastIndex = conversationInfo.participantInfos.size() - 1;
- final ParticipantInfo lastSender = conversationInfo.participantInfos.get(lastIndex);
- senderAvatarModel.populate(lastSender.name, lastSender.email);
+ senderAvatarModel.populate(account.getDisplayName(), account.getEmailAddress());
}
}
}
diff --git a/src/com/android/mail/utils/NotificationUtils.java b/src/com/android/mail/utils/NotificationUtils.java
index 3c61f78..31c61fa 100644
--- a/src/com/android/mail/utils/NotificationUtils.java
+++ b/src/com/android/mail/utils/NotificationUtils.java
@@ -90,7 +90,6 @@
public static final String EXTRA_UNREAD_COUNT = "unread-count";
public static final String EXTRA_UNSEEN_COUNT = "unseen-count";
public static final String EXTRA_GET_ATTENTION = "get-attention";
- private static final int PUBLIC_NOTIFICATIONS_VISIBLE_CHARS = 4;
/** Contains a list of <(account, label), unread conversations> */
private static NotificationMap sActiveNotificationMap = null;
@@ -954,7 +953,7 @@
Bitmap bg = sDefaultWearableBg.get();
if (bg == null) {
bg = BitmapFactory.decodeResource(context.getResources(), R.drawable.bg_email);
- sDefaultWearableBg = new WeakReference<Bitmap>(bg);
+ sDefaultWearableBg = new WeakReference<>(bg);
}
return bg;
}
@@ -969,8 +968,6 @@
final int unreadCount, final int unseenCount,
final Folder folder, final long when, final ContactFetcher contactFetcher) {
final Resources res = context.getResources();
- final String notificationAccountDisplayName = account.getDisplayName();
- final String notificationAccountEmail = account.getEmailAddress();
final boolean multipleUnseen = unseenCount > 1;
LogUtils.i(LOG_TAG, "Showing notification with unreadCount of %d and unseenCount of %d",
@@ -1002,7 +999,7 @@
// The body of the notification is the account name, or the label name.
notificationBuilder.setSubText(
- isInbox ? notificationAccountDisplayName : notificationLabelName);
+ isInbox ? account.getDisplayName() : notificationLabelName);
final NotificationCompat.InboxStyle digest =
new NotificationCompat.InboxStyle(notificationBuilder);
@@ -1057,7 +1054,7 @@
res.getInteger(R.integer.swipe_senders_length);
sendersBuilder = getStyledSenders(context, conversationCursor,
- sendersLength, notificationAccountEmail);
+ sendersLength, account);
} else {
sendersBuilder =
new SpannableStringBuilder(getWrappedFromString(from));
@@ -1108,7 +1105,6 @@
configureNotifForOneConversation(context, account,
folderPreferences, conversationNotif, conversationWearExtender,
conversationCursor, notificationIntent, folder, when, res,
- notificationAccountDisplayName, notificationAccountEmail,
isInbox, notificationLabelName, conversationNotificationId,
contactFetcher);
msgNotifications.put(conversationNotificationId,
@@ -1142,7 +1138,7 @@
} else {
// The body of the notification is the account name, or the label name.
notificationBuilder.setContentText(
- isInbox ? notificationAccountDisplayName : notificationLabelName);
+ isInbox ? account.getDisplayName() : notificationLabelName);
}
} else {
// For notifications for a single new conversation, we want to get the information
@@ -1153,8 +1149,7 @@
final ConfigResult result = configureNotifForOneConversation(context, account,
folderPreferences, notificationBuilder, wearableExtender, conversationCursor,
- notificationIntent, folder, when, res, notificationAccountDisplayName,
- notificationAccountEmail, isInbox, notificationLabelName,
+ notificationIntent, folder, when, res, isInbox, notificationLabelName,
summaryNotificationId, contactFetcher);
notificationTicker = result.notificationTicker;
@@ -1194,7 +1189,6 @@
NotificationCompat.Builder notificationBuilder,
NotificationCompat.WearableExtender wearExtender, Cursor conversationCursor,
Intent notificationIntent, Folder folder, long when, Resources res,
- String notificationAccountDisplayName, String notificationAccountEmail,
boolean isInbox, String notificationLabelName, int notificationId,
final ContactFetcher contactFetcher) {
@@ -1260,8 +1254,7 @@
int sendersLength = res.getInteger(R.integer.swipe_senders_length);
final SpannableStringBuilder sendersBuilder = getStyledSenders(
- context, conversationCursor, sendersLength,
- notificationAccountEmail);
+ context, conversationCursor, sendersLength, account);
notificationBuilder.setContentTitle(sendersBuilder);
// For a single new conversation, the ticker is based on the sender's name.
@@ -1281,7 +1274,7 @@
// notifications, or will based on the the label name for user label
// notifications.
notificationBuilder.setSubText(isInbox ?
- notificationAccountDisplayName : notificationLabelName);
+ account.getDisplayName() : notificationLabelName);
final NotificationCompat.BigTextStyle bigText =
new NotificationCompat.BigTextStyle(notificationBuilder);
@@ -1316,7 +1309,7 @@
// notifications, or will based on the the label name for user label
// notifications.
notificationBuilder.setContentText(
- isInbox ? notificationAccountDisplayName : notificationLabelName);
+ isInbox ? account.getDisplayName() : notificationLabelName);
// For a single new conversation, the ticker is based on the sender's name.
result.notificationTicker = from;
@@ -1427,11 +1420,11 @@
}
private static SpannableStringBuilder getStyledSenders(final Context context,
- final Cursor conversationCursor, final int maxLength, final String account) {
+ final Cursor conversationCursor, final int maxLength, final Account account) {
final Conversation conversation = new Conversation(conversationCursor);
final com.android.mail.providers.ConversationInfo conversationInfo =
conversation.conversationInfo;
- final ArrayList<SpannableString> senders = new ArrayList<SpannableString>();
+ final ArrayList<SpannableString> senders = new ArrayList<>();
if (sNotificationUnreadStyleSpan == null) {
sNotificationUnreadStyleSpan = new TextAppearanceSpan(
context, R.style.NotificationSendersUnreadTextAppearance);
diff --git a/src/com/android/mail/widget/WidgetService.java b/src/com/android/mail/widget/WidgetService.java
index 2f82e30..d8e9861 100644
--- a/src/com/android/mail/widget/WidgetService.java
+++ b/src/com/android/mail/widget/WidgetService.java
@@ -409,7 +409,7 @@
ArrayList<SpannableString> senders = new ArrayList<SpannableString>();
SendersView.format(mContext, conversation.conversationInfo, "",
- MAX_SENDERS_LENGTH, senders, null, null, mAccount.getEmailAddress(),
+ MAX_SENDERS_LENGTH, senders, null, null, mAccount,
Folder.shouldShowRecipients(mFolderCapabilities), true);
final SpannableStringBuilder senderBuilder = elideParticipants(senders);
diff --git a/tests/src/com/android/mail/browse/SendersFormattingTests.java b/tests/src/com/android/mail/browse/SendersFormattingTests.java
index c55e03b..142e04c 100644
--- a/tests/src/com/android/mail/browse/SendersFormattingTests.java
+++ b/tests/src/com/android/mail/browse/SendersFormattingTests.java
@@ -21,11 +21,18 @@
import android.test.suitebuilder.annotation.SmallTest;
import android.text.SpannableString;
+import com.android.mail.providers.Account;
import com.android.mail.providers.ConversationInfo;
import com.android.mail.providers.ParticipantInfo;
+import com.android.mail.providers.UIProvider;
import com.google.common.collect.Lists;
+import org.json.JSONException;
+import org.json.JSONObject;
+
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
@SmallTest
public class SendersFormattingTests extends AndroidTestCase {
@@ -40,7 +47,8 @@
final ArrayList<SpannableString> strings = Lists.newArrayList();
assertEquals(0, strings.size());
- SendersView.format(getContext(), conv, "", 100, strings, null, null, null, false, false);
+ final Account account = createAccount();
+ SendersView.format(getContext(), conv, "", 100, strings, null, null, account, false, false);
assertEquals(1, strings.size());
assertEquals("me", strings.get(0).toString());
}
@@ -51,7 +59,8 @@
final ArrayList<SpannableString> strings = Lists.newArrayList();
assertEquals(0, strings.size());
- SendersView.format(getContext(), conv, "", 100, strings, null, null, null, false, false);
+ final Account account = createAccount();
+ SendersView.format(getContext(), conv, "", 100, strings, null, null, account, false, false);
assertEquals(1, strings.size());
assertEquals("me", strings.get(0).toString());
}
@@ -63,7 +72,8 @@
final ArrayList<SpannableString> strings = Lists.newArrayList();
assertEquals(0, strings.size());
- SendersView.format(getContext(), conv, "", 100, strings, null, null, null, false, false);
+ final Account account = createAccount();
+ SendersView.format(getContext(), conv, "", 100, strings, null, null, account, false, false);
assertEquals(2, strings.size());
assertNull(strings.get(0));
assertEquals("me", strings.get(1).toString());
@@ -161,8 +171,9 @@
final ConversationItemViewModel.SenderAvatarModel senderAvatarModel =
new ConversationItemViewModel.SenderAvatarModel();
+ final Account account = createAccount();
SendersView.format(getContext(), conv, "", 100, styledSenders, displayableSenderNames,
- senderAvatarModel, null, false, false);
+ senderAvatarModel, account, false, false);
assertEquals("b@b.com", senderAvatarModel.getEmailAddress());
assertEquals("b", senderAvatarModel.getName());
@@ -178,11 +189,12 @@
final ConversationItemViewModel.SenderAvatarModel senderAvatarModel =
new ConversationItemViewModel.SenderAvatarModel();
+ final Account account = createAccount();
SendersView.format(getContext(), conv, "", 100, styledSenders, displayableSenderNames,
- senderAvatarModel, null, false, false);
+ senderAvatarModel, account, false, false);
- assertEquals("a@a.com", senderAvatarModel.getEmailAddress());
- assertEquals("", senderAvatarModel.getName());
+ assertEquals("fflinstone@example.com", senderAvatarModel.getEmailAddress());
+ assertEquals("Fred Flinstone", senderAvatarModel.getName());
}
/**
@@ -206,4 +218,21 @@
assertEquals("Andrew", displayableSenderNames.get(0));
assertEquals("Andrew", displayableSenderNames.get(1));
}
+
+ private static Account createAccount() {
+ try {
+ final Map<String, Object> map = new HashMap<>(2);
+ map.put(UIProvider.AccountColumns.NAME, "Fred Flinstone");
+ map.put(UIProvider.AccountColumns.ACCOUNT_MANAGER_NAME, "fflinstone@example.com");
+ map.put(UIProvider.AccountColumns.TYPE, "IMAP");
+ map.put(UIProvider.AccountColumns.PROVIDER_VERSION, 1);
+ map.put(UIProvider.AccountColumns.CAPABILITIES, 0);
+
+ final JSONObject json = new JSONObject(map);
+
+ return Account.builder().buildFrom(json);
+ } catch (JSONException je) {
+ throw new RuntimeException(je);
+ }
+ }
}
\ No newline at end of file