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 =
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 {
InputStreamReader reader = new InputStreamReader(in, encoding);
StringBuffer sb = new StringBuffer();
@ -302,6 +296,9 @@ public class Utility {
/**
* 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.
*/
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 means unread counts on the mailbox list can be different from the
// 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();

View File

@ -544,18 +544,26 @@ public abstract class EmailContent {
private static final String ACCOUNT_KEY_SELECTION =
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 =
MessageColumns.FLAG_FAVORITE + "=1 AND "
+ MessageColumns.MAILBOX_KEY + " NOT IN ("
+ "SELECT " + MailboxColumns.ID + " FROM " + Mailbox.TABLE_NAME + ""
+ " WHERE " + MailboxColumns.TYPE + " = " + Mailbox.TYPE_TRASH
+ ")";
+ ")"
+ " AND " + FLAG_LOADED_SELECTION;
/** Selection to retrieve all messages in "inbox" for any account */
public static final String INBOX_SELECTION =
MessageColumns.MAILBOX_KEY + " IN ("
+ "SELECT " + MailboxColumns.ID + " FROM " + Mailbox.TABLE_NAME
+ " WHERE " + MailboxColumns.TYPE + " = " + Mailbox.TYPE_INBOX
+ ")";
+ ")"
+ " AND " + FLAG_LOADED_SELECTION;
/** Selection to retrieve unread messages in "inbox" for any account */
public static final String UNREAD_SELECTION =
MessageColumns.FLAG_READ + "=0 AND " + INBOX_SELECTION;

View File

@ -1964,23 +1964,23 @@ public class ProviderTests extends ProviderTestCase2<EmailProvider> {
// Create some messages
// 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
Message m21 = createMessage(c, b2, false, false);
Message m22 = createMessage(c, b2, true, true);
Message m21 = createMessage(c, b2, false, false, Message.FLAG_LOADED_COMPLETE);
Message m22 = createMessage(c, b2, true, true, Message.FLAG_LOADED_COMPLETE);
// b3 (account 2, inbox): 3 message, including 1 starred
Message m31 = createMessage(c, b3, false, false);
Message m32 = createMessage(c, b3, false, false);
Message m33 = createMessage(c, b3, true, true);
Message m31 = createMessage(c, b3, false, false, Message.FLAG_LOADED_COMPLETE);
Message m32 = createMessage(c, b3, false, false, Message.FLAG_LOADED_COMPLETE);
Message m33 = createMessage(c, b3, true, true, Message.FLAG_LOADED_COMPLETE);
// b4 (account 2, outbox) has no messages.
// bt (account 2, trash) has 3 messages, including 2 starred
Message mt1 = createMessage(c, bt, true, false);
Message mt2 = createMessage(c, bt, true, false);
Message mt3 = createMessage(c, bt, false, false);
Message mt1 = createMessage(c, bt, true, false, Message.FLAG_LOADED_COMPLETE);
Message mt2 = createMessage(c, bt, true, false, Message.FLAG_LOADED_COMPLETE);
Message mt3 = createMessage(c, bt, false, false, Message.FLAG_LOADED_COMPLETE);
// Check message counts
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) {
return ProviderTestUtils.setupMessage("1", b.mAccountKey, b.mId, true, true, c, starred,
read);
return ProviderTestUtils.setupMessage(
"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() {

View File

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