summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorScott Kennedy <skennedy@google.com>2013-05-28 13:07:24 -0700
committerScott Kennedy <skennedy@google.com>2013-05-28 14:59:22 -0700
commitddca2a0dcbcd27d2d17b5d5273eee2004fbcdf7c (patch)
treeb9c801dc6d0817dda8e5cafce4b90b3604d4aaaf /src
parentd557e2b43058c05aa4e0e501767deaa3dcebfa07 (diff)
downloadandroid_packages_apps_Email-ddca2a0dcbcd27d2d17b5d5273eee2004fbcdf7c.tar.gz
android_packages_apps_Email-ddca2a0dcbcd27d2d17b5d5273eee2004fbcdf7c.tar.bz2
android_packages_apps_Email-ddca2a0dcbcd27d2d17b5d5273eee2004fbcdf7c.zip
Show unread count when virtual folder is selected
We were not populating the unread count for virtual folders in one of the two code paths, which resulted in the count disappearing from the folder list whenever that folder was selected. By moving the count code into getVirtualMailboxRow(), it will always be called, so the count will always show up. Change-Id: Ibb947ec6ed761babbcf162dbab38f44a6150d5e3
Diffstat (limited to 'src')
-rw-r--r--src/com/android/email/provider/EmailProvider.java92
1 files changed, 60 insertions, 32 deletions
diff --git a/src/com/android/email/provider/EmailProvider.java b/src/com/android/email/provider/EmailProvider.java
index 82f750b1e..71bc87c59 100644
--- a/src/com/android/email/provider/EmailProvider.java
+++ b/src/com/android/email/provider/EmailProvider.java
@@ -2848,9 +2848,10 @@ public class EmailProvider extends ContentProvider {
}
private Object[] getVirtualMailboxRow(long accountId, int mailboxType) {
- String idString = getVirtualMailboxIdString(accountId, mailboxType);
+ final long id = getVirtualMailboxId(accountId, mailboxType);
+ final String idString = Long.toString(id);
Object[] values = new Object[UIProvider.FOLDERS_PROJECTION.length];
- values[UIProvider.FOLDER_ID_COLUMN] = 0;
+ values[UIProvider.FOLDER_ID_COLUMN] = id;
values[UIProvider.FOLDER_URI_COLUMN] = combinedUriString("uifolder", idString);
values[UIProvider.FOLDER_NAME_COLUMN] =
Mailbox.getSystemMailboxName(getContext(), mailboxType);
@@ -2858,7 +2859,63 @@ public class EmailProvider extends ContentProvider {
values[UIProvider.FOLDER_CAPABILITIES_COLUMN] = UIProvider.FolderCapabilities.IS_VIRTUAL;
values[UIProvider.FOLDER_CONVERSATION_LIST_URI_COLUMN] = combinedUriString("uimessages",
idString);
- values[UIProvider.FOLDER_ID_COLUMN] = 0;
+
+ // Do any special handling
+ final String accountIdString = Long.toString(accountId);
+ switch (mailboxType) {
+ case Mailbox.TYPE_INBOX:
+ if (accountId == COMBINED_ACCOUNT_ID) {
+ // Add the unread count
+ final int unreadCount = EmailContent.count(getContext(), Message.CONTENT_URI,
+ MessageColumns.MAILBOX_KEY + " IN (SELECT " + MailboxColumns.ID
+ + " FROM " + Mailbox.TABLE_NAME + " WHERE " + MailboxColumns.TYPE
+ + "=" + Mailbox.TYPE_INBOX + ") AND " + MessageColumns.FLAG_READ + "=0",
+ null);
+ values[UIProvider.FOLDER_UNREAD_COUNT_COLUMN] = unreadCount;
+ }
+ // Add the icon
+ values[UIProvider.FOLDER_ICON_RES_ID_COLUMN] = R.drawable.ic_folder_inbox;
+ break;
+ case Mailbox.TYPE_ALL_UNREAD: {
+ // Add the unread count
+ final String accountKeyClause;
+ final String[] whereArgs;
+ if (accountId == COMBINED_ACCOUNT_ID) {
+ accountKeyClause = "";
+ whereArgs = null;
+ } else {
+ accountKeyClause = MessageColumns.ACCOUNT_KEY + "= ? AND ";
+ whereArgs = new String[] { accountIdString };
+ }
+ final int unreadCount = EmailContent.count(getContext(), Message.CONTENT_URI,
+ accountKeyClause + MessageColumns.FLAG_READ + "=0 AND "
+ + MessageColumns.MAILBOX_KEY + " NOT IN (SELECT " + MailboxColumns.ID
+ + " FROM " + Mailbox.TABLE_NAME + " WHERE " + MailboxColumns.TYPE + "="
+ + Mailbox.TYPE_TRASH + ")", whereArgs);
+ values[UIProvider.FOLDER_UNREAD_COUNT_COLUMN] = unreadCount;
+ // Add the icon
+ values[UIProvider.FOLDER_ICON_RES_ID_COLUMN] = R.drawable.ic_folder_mark_unread;
+ break;
+ } case Mailbox.TYPE_STARRED: {
+ // Add the starred count as the unread count
+ final String accountKeyClause;
+ final String[] whereArgs;
+ if (accountId == COMBINED_ACCOUNT_ID) {
+ accountKeyClause = "";
+ whereArgs = null;
+ } else {
+ accountKeyClause = MessageColumns.ACCOUNT_KEY + "= ? AND ";
+ whereArgs = new String[] { accountIdString };
+ }
+ final int starredCount = EmailContent.count(getContext(), Message.CONTENT_URI,
+ accountKeyClause + MessageColumns.FLAG_FAVORITE + "=1", whereArgs);
+ values[UIProvider.FOLDER_UNREAD_COUNT_COLUMN] = starredCount;
+ // Add the icon
+ values[UIProvider.FOLDER_ICON_RES_ID_COLUMN] = R.drawable.ic_folder_star;
+ break;
+ }
+ }
+
return values;
}
@@ -2987,53 +3044,24 @@ public class EmailProvider extends ContentProvider {
String id = uri.getPathSegments().get(1);
if (id.equals(COMBINED_ACCOUNT_ID_STRING)) {
MatrixCursor mc = new MatrixCursorWithCachedColumns(UIProvider.FOLDERS_PROJECTION, 3);
- int count;
Object[] row;
- count = EmailContent.count(context, Message.CONTENT_URI,
- MessageColumns.MAILBOX_KEY + " IN (SELECT " + MailboxColumns.ID +
- " FROM " + Mailbox.TABLE_NAME + " WHERE " + MailboxColumns.TYPE +
- "=" + Mailbox.TYPE_INBOX + ") AND " + MessageColumns.FLAG_READ + "=0", null);
row = getVirtualMailboxRow(COMBINED_ACCOUNT_ID, Mailbox.TYPE_INBOX);
- row[UIProvider.FOLDER_UNREAD_COUNT_COLUMN] = count;
- row[UIProvider.FOLDER_ICON_RES_ID_COLUMN] = R.drawable.ic_folder_inbox;
mc.addRow(row);
- count = EmailContent.count(context, Message.CONTENT_URI,
- MessageColumns.FLAG_FAVORITE + "=1", null);
row = getVirtualMailboxRow(COMBINED_ACCOUNT_ID, Mailbox.TYPE_STARRED);
- row[UIProvider.FOLDER_UNREAD_COUNT_COLUMN] = count;
- row[UIProvider.FOLDER_ICON_RES_ID_COLUMN] = R.drawable.ic_folder_star;
mc.addRow(row);
row = getVirtualMailboxRow(COMBINED_ACCOUNT_ID, Mailbox.TYPE_ALL_UNREAD);
- count = EmailContent.count(context, Message.CONTENT_URI,
- MessageColumns.FLAG_READ + "=0 AND " + MessageColumns.MAILBOX_KEY +
- " NOT IN (SELECT " + MailboxColumns.ID + " FROM " + Mailbox.TABLE_NAME +
- " WHERE " + MailboxColumns.TYPE + "=" + Mailbox.TYPE_TRASH + ")", null);
- row[UIProvider.FOLDER_UNREAD_COUNT_COLUMN] = count;
- row[UIProvider.FOLDER_ICON_RES_ID_COLUMN] = R.drawable.ic_folder_mark_unread;
mc.addRow(row);
return mc;
} else {
Cursor c = db.rawQuery(genQueryAccountMailboxes(uiProjection), new String[] {id});
c = getFolderListCursor(db, c, uiProjection);
- int numStarred = EmailContent.count(context, Message.CONTENT_URI,
- MessageColumns.ACCOUNT_KEY + "=? AND " + MessageColumns.FLAG_FAVORITE + "=1",
- new String[] {id});
// Add starred virtual folder to the cursor
// Show number of messages as unread count (for backward compatibility)
MatrixCursor mc = new MatrixCursorWithCachedColumns(uiProjection, 2);
final long acctId = Long.parseLong(id);
Object[] row = getVirtualMailboxRow(acctId, Mailbox.TYPE_STARRED);
- row[UIProvider.FOLDER_UNREAD_COUNT_COLUMN] = numStarred;
- row[UIProvider.FOLDER_ICON_RES_ID_COLUMN] = R.drawable.ic_folder_star;
mc.addRow(row);
row = getVirtualMailboxRow(acctId, Mailbox.TYPE_ALL_UNREAD);
- int numUnread = EmailContent.count(context, Message.CONTENT_URI,
- MessageColumns.ACCOUNT_KEY + "=" + id + " AND " +
- MessageColumns.FLAG_READ + "=0 AND " + MessageColumns.MAILBOX_KEY +
- " NOT IN (SELECT " + MailboxColumns.ID + " FROM " + Mailbox.TABLE_NAME +
- " WHERE " + MailboxColumns.TYPE + "=" + Mailbox.TYPE_TRASH + ")", null);
- row[UIProvider.FOLDER_UNREAD_COUNT_COLUMN] = numUnread;
- row[UIProvider.FOLDER_ICON_RES_ID_COLUMN] = R.drawable.ic_folder_mark_unread;
mc.addRow(row);
mc.setNotificationUri(context.getContentResolver(), uri);