diff options
author | Jin Cao <jinyan@google.com> | 2014-09-12 20:31:06 +0000 |
---|---|---|
committer | James Lemieux <jplemieux@google.com> | 2014-09-15 13:01:11 -0700 |
commit | 3dbfbc210a607382ba9c150d7ae373ca0508267c (patch) | |
tree | 4e29fe8f60c834d74f83a5bfb0b90b5b2c391f6e /tests | |
parent | 406ae08b92f78f26fe83830897570c9db1ab23aa (diff) | |
parent | ea7a5dbc54ccaaf858e63177f1c1b66bdc361d54 (diff) | |
download | android_packages_apps_UnifiedEmail-3dbfbc210a607382ba9c150d7ae373ca0508267c.tar.gz android_packages_apps_UnifiedEmail-3dbfbc210a607382ba9c150d7ae373ca0508267c.tar.bz2 android_packages_apps_UnifiedEmail-3dbfbc210a607382ba9c150d7ae373ca0508267c.zip |
Choose thread icon more carefully
b/17298161
Choosing the avatar to draw as the thread icon follows this algorithm:
1) Prefer the sender of the first unread message.
2) If all messages are read, prefer the last sender that is not the
current account.
3) If all messages were sent from the current account (e.g. user is
emailing themselves), use the last sender (aka current account).
In the process of doing this work the last remaining dependency on
DividedImageCanvas was broken, so it could be removed at this time.
Tests confirming the new behavior have been added to SendersFormattingTests.
Change-Id: If8e066de8cb98f2f95b019a88a2fdadc2f9f5090
Diffstat (limited to 'tests')
-rw-r--r-- | tests/src/com/android/mail/browse/SendersFormattingTests.java | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/tests/src/com/android/mail/browse/SendersFormattingTests.java b/tests/src/com/android/mail/browse/SendersFormattingTests.java index ecec4dfac..c55e03b06 100644 --- a/tests/src/com/android/mail/browse/SendersFormattingTests.java +++ b/tests/src/com/android/mail/browse/SendersFormattingTests.java @@ -112,4 +112,98 @@ public class SendersFormattingTests extends AndroidTestCase { assertEquals(before.firstUnreadSnippet, after.firstUnreadSnippet); assertEquals(before.lastSnippet, after.lastSnippet); } + + public void testSenderAvatarIsSenderOfFirstUnreadMessage() { + final ConversationInfo conv = createConversationInfo(); + conv.addParticipant(new ParticipantInfo("a", "a@a.com", 0, true)); + conv.addParticipant(new ParticipantInfo("b", "b@b.com", 0, false)); + conv.addParticipant(new ParticipantInfo("c", "c@c.com", 0, false)); + + final ArrayList<SpannableString> styledSenders = Lists.newArrayList(); + final ArrayList<String> displayableSenderNames = Lists.newArrayList(); + final ConversationItemViewModel.SenderAvatarModel senderAvatarModel = + new ConversationItemViewModel.SenderAvatarModel(); + + SendersView.format(getContext(), conv, "", 100, styledSenders, displayableSenderNames, + senderAvatarModel, null, false, false); + + assertEquals("b@b.com", senderAvatarModel.getEmailAddress()); + assertEquals("b", senderAvatarModel.getName()); + } + + public void testSenderAvatarIsLastSenderIfAllMessagesAreRead() { + final ConversationInfo conv = createConversationInfo(); + conv.addParticipant(new ParticipantInfo("a", "a@a.com", 0, true)); + conv.addParticipant(new ParticipantInfo("b", "b@b.com", 0, true)); + conv.addParticipant(new ParticipantInfo("c", "c@c.com", 0, true)); + + final ArrayList<SpannableString> styledSenders = Lists.newArrayList(); + final ArrayList<String> displayableSenderNames = Lists.newArrayList(); + final ConversationItemViewModel.SenderAvatarModel senderAvatarModel = + new ConversationItemViewModel.SenderAvatarModel(); + + SendersView.format(getContext(), conv, "", 100, styledSenders, displayableSenderNames, + senderAvatarModel, null, false, false); + + assertEquals("c@c.com", senderAvatarModel.getEmailAddress()); + assertEquals("c", senderAvatarModel.getName()); + } + + public void testSenderAvatarIsLastSenderThatIsNotTheCurrentAccountIfAllMessagesAreRead() { + final ConversationInfo conv = createConversationInfo(); + conv.addParticipant(new ParticipantInfo("a", "a@a.com", 0, true)); + conv.addParticipant(new ParticipantInfo("b", "b@b.com", 0, true)); + // empty name indicates it is the current account + conv.addParticipant(new ParticipantInfo("", "c@c.com", 0, true)); + + final ArrayList<SpannableString> styledSenders = Lists.newArrayList(); + final ArrayList<String> displayableSenderNames = Lists.newArrayList(); + final ConversationItemViewModel.SenderAvatarModel senderAvatarModel = + new ConversationItemViewModel.SenderAvatarModel(); + + SendersView.format(getContext(), conv, "", 100, styledSenders, displayableSenderNames, + senderAvatarModel, null, false, false); + + assertEquals("b@b.com", senderAvatarModel.getEmailAddress()); + assertEquals("b", senderAvatarModel.getName()); + } + + public void testSenderAvatarIsCurrentAccountIfAllSendersAreCurrentAccount() { + final ConversationInfo conv = createConversationInfo(); + // empty name indicates it is the current account + conv.addParticipant(new ParticipantInfo("", "a@a.com", 0, true)); + + final ArrayList<SpannableString> styledSenders = Lists.newArrayList(); + final ArrayList<String> displayableSenderNames = Lists.newArrayList(); + final ConversationItemViewModel.SenderAvatarModel senderAvatarModel = + new ConversationItemViewModel.SenderAvatarModel(); + + SendersView.format(getContext(), conv, "", 100, styledSenders, displayableSenderNames, + senderAvatarModel, null, false, false); + + assertEquals("a@a.com", senderAvatarModel.getEmailAddress()); + assertEquals("", senderAvatarModel.getName()); + } + + /** + * Two senders in a thread should be kept distinct if they have unique email addresses, even if + * they happen to share the same name. + */ + public void testSenderNamesWhenNamesMatchButEmailAddressesDiffer() { + final ConversationInfo conv = createConversationInfo(); + conv.addParticipant(new ParticipantInfo("Andrew", "aholmes@awesome.com", 0, true)); + conv.addParticipant(new ParticipantInfo("Andrew", "ajohnson@wicked.com", 0, true)); + + final ArrayList<SpannableString> styledSenders = Lists.newArrayList(); + final ArrayList<String> displayableSenderNames = Lists.newArrayList(); + final ConversationItemViewModel.SenderAvatarModel senderAvatarModel = + new ConversationItemViewModel.SenderAvatarModel(); + + SendersView.format(getContext(), conv, "", 100, styledSenders, displayableSenderNames, + senderAvatarModel, null, false, false); + + assertEquals(2, displayableSenderNames.size()); + assertEquals("Andrew", displayableSenderNames.get(0)); + assertEquals("Andrew", displayableSenderNames.get(1)); + } }
\ No newline at end of file |