diff --git a/src/com/android/email/widget/EmailWidgetLoader.java b/src/com/android/email/widget/EmailWidgetLoader.java index 96cb39e0f..b145f910b 100644 --- a/src/com/android/email/widget/EmailWidgetLoader.java +++ b/src/com/android/email/widget/EmailWidgetLoader.java @@ -103,8 +103,13 @@ import android.database.CursorWrapper; final int accountCount = EmailContent.count(mContext, Account.CONTENT_URI); - // TODO Use correct count -- e.g. unread count for inboxes, not total count. - final int messageCount = messagesCursor.getCount(); + final int messageCount; + if (mLoadingWidgetView.useUnreadCount()) { + messageCount = mLoadingWidgetView.getUnreadCount(mContext); + } else { + // Just use the number of all messages shown. + messageCount = messagesCursor.getCount(); + } return new CursorWithCounts(messagesCursor, accountCount, messageCount); } @@ -119,7 +124,7 @@ import android.database.CursorWrapper; public void load(WidgetView view) { reset(); mLoadingWidgetView = view; - setSelection(view.getSelection(mContext)); + setSelection(view.getSelection()); setSelectionArgs(view.getSelectionArgs()); startLoading(); } diff --git a/src/com/android/email/widget/WidgetView.java b/src/com/android/email/widget/WidgetView.java index e50f8974e..8e9dfdf95 100644 --- a/src/com/android/email/widget/WidgetView.java +++ b/src/com/android/email/widget/WidgetView.java @@ -21,6 +21,7 @@ import com.android.emailcommon.provider.EmailContent; import com.android.emailcommon.provider.EmailContent.Account; import com.android.emailcommon.provider.EmailContent.AccountColumns; import com.android.emailcommon.provider.EmailContent.Message; +import com.android.emailcommon.provider.EmailContent.MessageColumns; import com.android.emailcommon.utility.Utility; import android.content.ContentUris; @@ -40,10 +41,10 @@ import android.net.Uri; private static final int ID_NAME_COLUMN_NAME = 1; private static enum ViewType { - TYPE_ALL_UNREAD(false, Message.UNREAD_SELECTION, R.string.widget_unread), - TYPE_ALL_STARRED(false, Message.ALL_FAVORITE_SELECTION, R.string.widget_starred), - TYPE_ALL_INBOX(false, Message.INBOX_SELECTION, R.string.widget_all_mail), - TYPE_ACCOUNT_INBOX(true, Message.PER_ACCOUNT_INBOX_SELECTION, 0) { + TYPE_ALL_UNREAD(false, Message.UNREAD_SELECTION, R.string.widget_unread, false), + TYPE_ALL_STARRED(false, Message.ALL_FAVORITE_SELECTION, R.string.widget_starred, false), + TYPE_ALL_INBOX(false, Message.INBOX_SELECTION, R.string.widget_all_mail, true), + TYPE_ACCOUNT_INBOX(true, Message.PER_ACCOUNT_INBOX_SELECTION, 0, true) { @Override public String getTitle(Context context, String accountName) { return accountName; } @@ -56,11 +57,14 @@ import android.net.Uri; private final boolean mIsPerAccount; private final String mSelection; private final int mTitleResource; + private final boolean mUseUnreadCount; - ViewType(boolean isPerAccount, String selection, int titleResource) { + ViewType(boolean isPerAccount, String selection, int titleResource, + boolean useUnreadCount) { mIsPerAccount = isPerAccount; mSelection = selection; mTitleResource = titleResource; + mUseUnreadCount = useUnreadCount; } public String getTitle(Context context, String accountName) { @@ -109,7 +113,11 @@ import android.net.Uri; return mViewType.getTitle(context, mAccountName); } - public String getSelection(Context context) { + public boolean useUnreadCount() { + return mViewType.mUseUnreadCount; + } + + public String getSelection() { return mViewType.getSelection(); } @@ -190,6 +198,15 @@ import android.net.Uri; return true; } + /** + * @return unread message count using the selection. + */ + public int getUnreadCount(Context context) { + String selection = "(" + getSelection() + " ) AND " + MessageColumns.FLAG_READ + " = 0"; + return EmailContent.count(context, Message.CONTENT_URI, selection, + getSelectionArgs()); + } + @Override public String toString() { StringBuilder sb = new StringBuilder("WidgetView:type="); diff --git a/tests/src/com/android/email/widget/WidgetViewTests.java b/tests/src/com/android/email/widget/WidgetViewTests.java index 827c5e9c1..3a7e8969e 100644 --- a/tests/src/com/android/email/widget/WidgetViewTests.java +++ b/tests/src/com/android/email/widget/WidgetViewTests.java @@ -51,7 +51,11 @@ public class WidgetViewTests extends ProviderTestCase2 { private int getMessageCount(WidgetView view) { return EmailContent.count(mMockContext, Message.CONTENT_URI, - view.getSelection(mMockContext), view.getSelectionArgs()); + view.getSelection(), view.getSelectionArgs()); + } + + private int getUnreadCount(WidgetView view) { + return view.getUnreadCount(mMockContext); } private static Message createMessage(Context c, Mailbox b, boolean starred, boolean read, @@ -179,15 +183,16 @@ public class WidgetViewTests extends ProviderTestCase2 { "box2T", a2.mId, true, mMockContext, Mailbox.TYPE_TRASH); // Create some messages - // b11 (account 1, inbox): 2 messages, including 1 starred, 1 unloaded + // b11 (account 1, inbox): 2 messages + // star read Message m11a = createMessage(mMockContext, b11, true, false, Message.FLAG_LOADED_COMPLETE); Message m11b = createMessage(mMockContext, b11, false, false, Message.FLAG_LOADED_UNLOADED); - // b12 (account 1, outbox): 2 messages, including 1 starred + // b12 (account 1, outbox): 2 messages Message m12a = createMessage(mMockContext, b12, false, false, Message.FLAG_LOADED_COMPLETE); Message m12b = createMessage(mMockContext, b12, true, true, Message.FLAG_LOADED_COMPLETE); - // b21 (account 2, inbox): 4 messages, including 1 starred, 1 unloaded + // b21 (account 2, inbox): 4 messages Message m21a = createMessage(mMockContext, b21, false, false, Message.FLAG_LOADED_COMPLETE); Message m21b = createMessage(mMockContext, b21, false, true, Message.FLAG_LOADED_COMPLETE); Message m21c = createMessage(mMockContext, b21, true, true, Message.FLAG_LOADED_COMPLETE); @@ -195,21 +200,28 @@ public class WidgetViewTests extends ProviderTestCase2 { // b22 (account 2, outbox) has no messages. - // bt (account 2, trash): 3 messages, including 2 starred + // bt (account 2, trash): 3 messages Message mt1 = createMessage(mMockContext, b2t, true, false, Message.FLAG_LOADED_COMPLETE); Message mt2 = createMessage(mMockContext, b2t, true, true, Message.FLAG_LOADED_COMPLETE); Message mt3 = createMessage(mMockContext, b2t, false, false, Message.FLAG_LOADED_COMPLETE); assertEquals(4, getMessageCount(WidgetView.ALL_INBOX)); + assertEquals(2, getUnreadCount(WidgetView.ALL_INBOX)); + assertEquals(3, getMessageCount(WidgetView.ALL_STARRED)); + assertEquals(1, getUnreadCount(WidgetView.ALL_STARRED)); + assertEquals(2, getMessageCount(WidgetView.ALL_UNREAD)); + assertEquals(2, getUnreadCount(WidgetView.ALL_UNREAD)); final WidgetView account1View = WidgetView.ALL_INBOX.getNext(mMockContext); assertEquals(Long.toString(a1.mId), account1View.getSelectionArgs()[0]); assertEquals(1, getMessageCount(account1View)); + assertEquals(1, getUnreadCount(account1View)); final WidgetView account2View = account1View.getNext(mMockContext); assertEquals(Long.toString(a2.mId), account2View.getSelectionArgs()[0]); assertEquals(3, getMessageCount(account2View)); + assertEquals(1, getUnreadCount(account2View)); } }