Restore sender snippet for nested folder teaser.
It's a bit ugly, but it's much better than firing up a new loader for each subfolder.
b/11288044
Change-Id: Ia568f82ccd615ee950944d411c30f9470a55aea9
diff --git a/src/com/android/email/provider/EmailProvider.java b/src/com/android/email/provider/EmailProvider.java
index 110ffeb..5aff682 100644
--- a/src/com/android/email/provider/EmailProvider.java
+++ b/src/com/android/email/provider/EmailProvider.java
@@ -2378,6 +2378,18 @@
.add(UIProvider.FolderColumns.PARENT_URI, "case when " + MailboxColumns.PARENT_KEY
+ "=" + Mailbox.NO_MAILBOX + " then NULL else " +
uriWithColumn("uifolder", MailboxColumns.PARENT_KEY) + " end")
+ /**
+ * SELECT group_concat(fromList) FROM
+ * (SELECT fromList FROM message WHERE mailboxKey=? AND flagRead=0
+ * GROUP BY fromList ORDER BY timestamp DESC)
+ */
+ .add(UIProvider.FolderColumns.UNREAD_SENDERS,
+ "(SELECT group_concat(" + MessageColumns.FROM_LIST + ") FROM " +
+ "(SELECT " + MessageColumns.FROM_LIST + " FROM " + Message.TABLE_NAME +
+ " WHERE " + MessageColumns.MAILBOX_KEY + "=" + Mailbox.TABLE_NAME + "." +
+ MailboxColumns.ID + " AND " + MessageColumns.FLAG_READ + "=0" +
+ " GROUP BY " + MessageColumns.FROM_LIST + " ORDER BY " +
+ MessageColumns.TIMESTAMP + " DESC))")
.build();
}
return sFolderListMap;
@@ -4128,6 +4140,22 @@
}
/**
+ * We need a reasonably full projection for getFolderListCursor to work, but don't always want
+ * to do the subquery needed for FolderColumns.UNREAD_SENDERS
+ * @param uiProjection The projection we actually want
+ * @return Full projection, possibly with or without FolderColumns.UNREAD_SENDERS
+ */
+ private String[] folderProjectionFromUiProjection(final String[] uiProjection) {
+ final Set<String> columns = ImmutableSet.copyOf(uiProjection);
+ final String[] folderProjection;
+ if (columns.contains(UIProvider.FolderColumns.UNREAD_SENDERS)) {
+ return UIProvider.FOLDERS_PROJECTION_WITH_UNREAD_SENDERS;
+ } else {
+ return UIProvider.FOLDERS_PROJECTION;
+ }
+ }
+
+ /**
* Handle UnifiedEmail queries here (dispatched from query())
*
* @param match the UriMatcher match for the original uri passed in from UnifiedEmail
@@ -4161,20 +4189,23 @@
c = new MergeCursor(new Cursor[] {rawc, vc});
}
break;
- case UI_FULL_FOLDERS:
- c = db.rawQuery(genQueryAccountAllMailboxes(UIProvider.FOLDERS_PROJECTION),
- new String[] {id});
+ case UI_FULL_FOLDERS: {
+ // We need a full projection for getFolderListCursor
+ final String[] folderProjection = folderProjectionFromUiProjection(uiProjection);
+ c = db.rawQuery(genQueryAccountAllMailboxes(folderProjection), new String[] {id});
c = getFolderListCursor(c, Long.valueOf(id), uiProjection);
notifyUri =
UIPROVIDER_FOLDERLIST_NOTIFIER.buildUpon().appendEncodedPath(id).build();
break;
+ }
case UI_RECENT_FOLDERS:
c = db.rawQuery(genQueryRecentMailboxes(uiProjection), new String[] {id});
notifyUri = UIPROVIDER_RECENT_FOLDERS_NOTIFIER.buildUpon().appendPath(id).build();
break;
- case UI_SUBFOLDERS:
- c = db.rawQuery(genQuerySubfolders(UIProvider.FOLDERS_PROJECTION),
- new String[] {id});
+ case UI_SUBFOLDERS: {
+ // We need a full projection for getFolderListCursor
+ final String[] folderProjection = folderProjectionFromUiProjection(uiProjection);
+ c = db.rawQuery(genQuerySubfolders(folderProjection), new String[] {id});
c = getFolderListCursor(c, Mailbox.getAccountIdForMailbox(context, id),
uiProjection);
// Get notifications for any folder changes on this account. This is broader than
@@ -4183,6 +4214,7 @@
final long accountId = Mailbox.getAccountIdForMailbox(context, id);
notifyUri = ContentUris.withAppendedId(UIPROVIDER_FOLDERLIST_NOTIFIER, accountId);
break;
+ }
case UI_MESSAGES:
long mailboxId = Long.parseLong(id);
final Folder folder = getFolder(context, mailboxId);