Widget: Use unread count for inbox views.
Bug 3431240 Change-Id: I61a91462cdd864604f5ddc06ff93c0ecf3001e20
This commit is contained in:
parent
a08fa43b85
commit
fc4006b276
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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=");
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue