diff options
| author | Scott Kennedy <skennedy@google.com> | 2013-05-28 13:07:24 -0700 |
|---|---|---|
| committer | Scott Kennedy <skennedy@google.com> | 2013-05-28 14:59:22 -0700 |
| commit | ddca2a0dcbcd27d2d17b5d5273eee2004fbcdf7c (patch) | |
| tree | b9c801dc6d0817dda8e5cafce4b90b3604d4aaaf /src | |
| parent | d557e2b43058c05aa4e0e501767deaa3dcebfa07 (diff) | |
| download | android_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.java | 92 |
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); |
