Widget: Use unread count for inbox views.

Bug 3431240

Change-Id: I61a91462cdd864604f5ddc06ff93c0ecf3001e20
This commit is contained in:
Makoto Onuki 2011-02-23 17:25:07 -08:00
parent a08fa43b85
commit fc4006b276
3 changed files with 48 additions and 14 deletions

View File

@ -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();
}

View File

@ -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=");

View File

@ -51,7 +51,11 @@ public class WidgetViewTests extends ProviderTestCase2<EmailProvider> {
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<EmailProvider> {
"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<EmailProvider> {
// 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));
}
}