Only show loaded messages in widget

The various selection strings were missing a test to only show messages that
have been loaded. This is only important for POP3 accounts.

bug 3377041

Change-Id: I3efe366d09dd547878dc0bf57dff58f76de5cca9
This commit is contained in:
Todd Kennedy 2011-01-24 14:11:20 -08:00
parent 24a81185d1
commit 543953ad87
4 changed files with 56 additions and 36 deletions

View File

@ -90,12 +90,6 @@ public class Utility {
private static final Pattern DATE_CLEANUP_PATTERN_WRONG_TIMEZONE = private static final Pattern DATE_CLEANUP_PATTERN_WRONG_TIMEZONE =
Pattern.compile("GMT([-+]\\d{4})$"); Pattern.compile("GMT([-+]\\d{4})$");
private static final String SELECTION_FLAG_LOADED_FOR_VISIBLE_MESSAGE =
" AND ("
+ MessageColumns.FLAG_LOADED + " IN ("
+ Message.FLAG_LOADED_PARTIAL + "," + Message.FLAG_LOADED_COMPLETE
+ "))";
public final static String readInputStream(InputStream in, String encoding) throws IOException { public final static String readInputStream(InputStream in, String encoding) throws IOException {
InputStreamReader reader = new InputStreamReader(in, encoding); InputStreamReader reader = new InputStreamReader(in, encoding);
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
@ -302,6 +296,9 @@ public class Utility {
/** /**
* Returns the where clause for a message list selection. * Returns the where clause for a message list selection.
* *
* TODO This method needs to be rewritten to use the _SELECTION constants defined in
* EmailContent.Message.
*
* MUST NOT be called on the UI thread. * MUST NOT be called on the UI thread.
*/ */
public static String buildMailboxIdSelection(Context context, long mailboxId) { public static String buildMailboxIdSelection(Context context, long mailboxId) {
@ -355,7 +352,7 @@ public class Utility {
// This makes sure they're not visible in the message list. // This makes sure they're not visible in the message list.
// This means unread counts on the mailbox list can be different from the // This means unread counts on the mailbox list can be different from the
// number of messages in the message list, but it should be transient... // number of messages in the message list, but it should be transient...
selection.append(SELECTION_FLAG_LOADED_FOR_VISIBLE_MESSAGE); selection.append(" AND ").append(Message.FLAG_LOADED_SELECTION);
} }
return selection.toString(); return selection.toString();

View File

@ -544,18 +544,26 @@ public abstract class EmailContent {
private static final String ACCOUNT_KEY_SELECTION = private static final String ACCOUNT_KEY_SELECTION =
MessageColumns.ACCOUNT_KEY + "=?"; MessageColumns.ACCOUNT_KEY + "=?";
/** Selection for messages that are loaded */
public static final String FLAG_LOADED_SELECTION =
MessageColumns.FLAG_LOADED + " IN ("
+ Message.FLAG_LOADED_PARTIAL + "," + Message.FLAG_LOADED_COMPLETE
+ ")";
public static final String ALL_FAVORITE_SELECTION = public static final String ALL_FAVORITE_SELECTION =
MessageColumns.FLAG_FAVORITE + "=1 AND " MessageColumns.FLAG_FAVORITE + "=1 AND "
+ MessageColumns.MAILBOX_KEY + " NOT IN (" + MessageColumns.MAILBOX_KEY + " NOT IN ("
+ "SELECT " + MailboxColumns.ID + " FROM " + Mailbox.TABLE_NAME + "" + "SELECT " + MailboxColumns.ID + " FROM " + Mailbox.TABLE_NAME + ""
+ " WHERE " + MailboxColumns.TYPE + " = " + Mailbox.TYPE_TRASH + " WHERE " + MailboxColumns.TYPE + " = " + Mailbox.TYPE_TRASH
+ ")"; + ")"
+ " AND " + FLAG_LOADED_SELECTION;
/** Selection to retrieve all messages in "inbox" for any account */ /** Selection to retrieve all messages in "inbox" for any account */
public static final String INBOX_SELECTION = public static final String INBOX_SELECTION =
MessageColumns.MAILBOX_KEY + " IN (" MessageColumns.MAILBOX_KEY + " IN ("
+ "SELECT " + MailboxColumns.ID + " FROM " + Mailbox.TABLE_NAME + "SELECT " + MailboxColumns.ID + " FROM " + Mailbox.TABLE_NAME
+ " WHERE " + MailboxColumns.TYPE + " = " + Mailbox.TYPE_INBOX + " WHERE " + MailboxColumns.TYPE + " = " + Mailbox.TYPE_INBOX
+ ")"; + ")"
+ " AND " + FLAG_LOADED_SELECTION;
/** Selection to retrieve unread messages in "inbox" for any account */ /** Selection to retrieve unread messages in "inbox" for any account */
public static final String UNREAD_SELECTION = public static final String UNREAD_SELECTION =
MessageColumns.FLAG_READ + "=0 AND " + INBOX_SELECTION; MessageColumns.FLAG_READ + "=0 AND " + INBOX_SELECTION;

View File

@ -1964,23 +1964,23 @@ public class ProviderTests extends ProviderTestCase2<EmailProvider> {
// Create some messages // Create some messages
// b1 (account 1, inbox): 1 message, including 1 starred // b1 (account 1, inbox): 1 message, including 1 starred
Message m11 = createMessage(c, b1, true, false); Message m11 = createMessage(c, b1, true, false, Message.FLAG_LOADED_COMPLETE);
// b2 (account 1, outbox): 2 message, including 1 starred // b2 (account 1, outbox): 2 message, including 1 starred
Message m21 = createMessage(c, b2, false, false); Message m21 = createMessage(c, b2, false, false, Message.FLAG_LOADED_COMPLETE);
Message m22 = createMessage(c, b2, true, true); Message m22 = createMessage(c, b2, true, true, Message.FLAG_LOADED_COMPLETE);
// b3 (account 2, inbox): 3 message, including 1 starred // b3 (account 2, inbox): 3 message, including 1 starred
Message m31 = createMessage(c, b3, false, false); Message m31 = createMessage(c, b3, false, false, Message.FLAG_LOADED_COMPLETE);
Message m32 = createMessage(c, b3, false, false); Message m32 = createMessage(c, b3, false, false, Message.FLAG_LOADED_COMPLETE);
Message m33 = createMessage(c, b3, true, true); Message m33 = createMessage(c, b3, true, true, Message.FLAG_LOADED_COMPLETE);
// b4 (account 2, outbox) has no messages. // b4 (account 2, outbox) has no messages.
// bt (account 2, trash) has 3 messages, including 2 starred // bt (account 2, trash) has 3 messages, including 2 starred
Message mt1 = createMessage(c, bt, true, false); Message mt1 = createMessage(c, bt, true, false, Message.FLAG_LOADED_COMPLETE);
Message mt2 = createMessage(c, bt, true, false); Message mt2 = createMessage(c, bt, true, false, Message.FLAG_LOADED_COMPLETE);
Message mt3 = createMessage(c, bt, false, false); Message mt3 = createMessage(c, bt, false, false, Message.FLAG_LOADED_COMPLETE);
// Check message counts // Check message counts
assertEquals(1, getMessageCount(b1.mId)); assertEquals(1, getMessageCount(b1.mId));
@ -2072,8 +2072,17 @@ public class ProviderTests extends ProviderTestCase2<EmailProvider> {
} }
private static Message createMessage(Context c, Mailbox b, boolean starred, boolean read) { private static Message createMessage(Context c, Mailbox b, boolean starred, boolean read) {
return ProviderTestUtils.setupMessage("1", b.mAccountKey, b.mId, true, true, c, starred, return ProviderTestUtils.setupMessage(
read); "1", b.mAccountKey, b.mId, true, true, c, starred, read);
}
private static Message createMessage(Context c, Mailbox b, boolean starred, boolean read,
int flagLoaded) {
Message message = ProviderTestUtils.setupMessage(
"1", b.mAccountKey, b.mId, true, false, c, starred, read);
message.mFlagLoaded = flagLoaded;
message.save(c);
return message;
} }
public void testAccountIsEasAccount() { public void testAccountIsEasAccount() {

View File

@ -80,9 +80,13 @@ public class WidgetProviderTests extends ProviderTestCase2<EmailProvider> {
return messageCount; return messageCount;
} }
private static Message createMessage(Context c, Mailbox b, boolean starred, boolean read) { private static Message createMessage(Context c, Mailbox b, boolean starred, boolean read,
return ProviderTestUtils.setupMessage("1", b.mAccountKey, b.mId, true, true, c, starred, int flagLoaded) {
read); Message message = ProviderTestUtils.setupMessage(
"1", b.mAccountKey, b.mId, true, false, c, starred, read);
message.mFlagLoaded = flagLoaded;
message.save(c);
return message;
} }
public void testWidgetSwitcher() { public void testWidgetSwitcher() {
@ -136,24 +140,26 @@ public class WidgetProviderTests extends ProviderTestCase2<EmailProvider> {
"boxT", a2.mId, true, mMockContext, Mailbox.TYPE_TRASH); "boxT", a2.mId, true, mMockContext, Mailbox.TYPE_TRASH);
// Create some messages // Create some messages
// b1 (account 1, inbox): 1 message, including 1 starred // b1 (account 1, inbox): 2 messages, including 1 starred, 1 unloaded
Message m11 = createMessage(mMockContext, b1, true, false); Message m11 = createMessage(mMockContext, b1, true, false, Message.FLAG_LOADED_COMPLETE);
Message m12 = createMessage(mMockContext, b1, false, false, Message.FLAG_LOADED_UNLOADED);
// b2 (account 1, outbox): 2 message, including 1 starred // b2 (account 1, outbox): 2 messages, including 1 starred
Message m21 = createMessage(mMockContext, b2, false, false); Message m21 = createMessage(mMockContext, b2, false, false, Message.FLAG_LOADED_COMPLETE);
Message m22 = createMessage(mMockContext, b2, true, true); Message m22 = createMessage(mMockContext, b2, true, true, Message.FLAG_LOADED_COMPLETE);
// b3 (account 2, inbox): 3 message, including 1 starred // b3 (account 2, inbox): 4 messages, including 1 starred, 1 unloaded
Message m31 = createMessage(mMockContext, b3, false, false); Message m31 = createMessage(mMockContext, b3, false, false, Message.FLAG_LOADED_COMPLETE);
Message m32 = createMessage(mMockContext, b3, false, true); Message m32 = createMessage(mMockContext, b3, false, true, Message.FLAG_LOADED_COMPLETE);
Message m33 = createMessage(mMockContext, b3, true, true); Message m33 = createMessage(mMockContext, b3, true, true, Message.FLAG_LOADED_COMPLETE);
Message m34 = createMessage(mMockContext, b3, true, true, Message.FLAG_LOADED_UNLOADED);
// b4 (account 2, outbox) has no messages. // b4 (account 2, outbox) has no messages.
// bt (account 2, trash) has 3 messages, including 2 starred // bt (account 2, trash): 3 messages, including 2 starred
Message mt1 = createMessage(mMockContext, bt, true, false); Message mt1 = createMessage(mMockContext, bt, true, false, Message.FLAG_LOADED_COMPLETE);
Message mt2 = createMessage(mMockContext, bt, true, true); Message mt2 = createMessage(mMockContext, bt, true, true, Message.FLAG_LOADED_COMPLETE);
Message mt3 = createMessage(mMockContext, bt, false, false); Message mt3 = createMessage(mMockContext, bt, false, false, Message.FLAG_LOADED_COMPLETE);
assertEquals(4, getMessageCount(ViewType.ALL_INBOX)); assertEquals(4, getMessageCount(ViewType.ALL_INBOX));
assertEquals(3, getMessageCount(ViewType.STARRED)); assertEquals(3, getMessageCount(ViewType.STARRED));