diff options
author | Tony Mantler <nicoya@google.com> | 2013-09-24 12:03:24 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-09-24 12:03:24 -0700 |
commit | 2d8cc3de3d89fed154d7fed7102253c725cf8ce3 (patch) | |
tree | 5745c2d0f597031b207b214fbfab654d1fc8786c | |
parent | 0deee4f88c0ec28ceeb6c7d5226d918b227e56be (diff) | |
parent | bab16f9161edb940f8a612846a2ff4ac50ffc58d (diff) | |
download | android_packages_apps_Email-2d8cc3de3d89fed154d7fed7102253c725cf8ce3.tar.gz android_packages_apps_Email-2d8cc3de3d89fed154d7fed7102253c725cf8ce3.tar.bz2 android_packages_apps_Email-2d8cc3de3d89fed154d7fed7102253c725cf8ce3.zip |
am bab16f91: Merge "Virtual folders are valid folders, don\'t kick back to the inbox when we\'re viewing them" into jb-ub-mail-ur10
* commit 'bab16f9161edb940f8a612846a2ff4ac50ffc58d':
Virtual folders are valid folders, don't kick back to the inbox when we're viewing them
-rw-r--r-- | src/com/android/email/provider/EmailProvider.java | 85 | ||||
-rw-r--r-- | src/com/android/email/provider/FolderPickerActivity.java | 4 |
2 files changed, 54 insertions, 35 deletions
diff --git a/src/com/android/email/provider/EmailProvider.java b/src/com/android/email/provider/EmailProvider.java index 2d7e2d2a6..103ac6749 100644 --- a/src/com/android/email/provider/EmailProvider.java +++ b/src/com/android/email/provider/EmailProvider.java @@ -238,7 +238,8 @@ public class EmailProvider extends ContentProvider { private static final int UI_CONVERSATION = UI_BASE + 14; private static final int UI_RECENT_FOLDERS = UI_BASE + 15; private static final int UI_DEFAULT_RECENT_FOLDERS = UI_BASE + 16; - private static final int UI_ALL_FOLDERS = UI_BASE + 17; + private static final int UI_FULL_FOLDERS = UI_BASE + 17; + private static final int UI_ALL_FOLDERS = UI_BASE + 18; private static final int BODY_BASE = 0xA000; private static final int BODY = BODY_BASE; @@ -991,6 +992,7 @@ public class EmailProvider extends ContentProvider { QUICK_RESPONSE_ACCOUNT_ID); sURIMatcher.addURI(EmailContent.AUTHORITY, "uifolders/#", UI_FOLDERS); + sURIMatcher.addURI(EmailContent.AUTHORITY, "uifullfolders/#", UI_FULL_FOLDERS); sURIMatcher.addURI(EmailContent.AUTHORITY, "uiallfolders/#", UI_ALL_FOLDERS); sURIMatcher.addURI(EmailContent.AUTHORITY, "uisubfolders/#", UI_SUBFOLDERS); sURIMatcher.addURI(EmailContent.AUTHORITY, "uimessages/#", UI_MESSAGES); @@ -1106,6 +1108,7 @@ public class EmailProvider extends ContentProvider { case UI_ATTACHMENTS: case UI_CONVERSATION: case UI_RECENT_FOLDERS: + case UI_FULL_FOLDERS: case UI_ALL_FOLDERS: // For now, we don't allow selection criteria within these queries if (selection != null || selectionArgs != null) { @@ -2149,7 +2152,8 @@ public class EmailProvider extends ContentProvider { final ProjectionMap.Builder builder = ProjectionMap.builder() .add(BaseColumns._ID, AccountColumns.ID) .add(UIProvider.AccountColumns.FOLDER_LIST_URI, uriWithId("uifolders")) - .add(UIProvider.AccountColumns.FULL_FOLDER_LIST_URI, uriWithId("uiallfolders")) + .add(UIProvider.AccountColumns.FULL_FOLDER_LIST_URI, uriWithId("uifullfolders")) + .add(UIProvider.AccountColumns.ALL_FOLDER_LIST_URI, uriWithId("uiallfolders")) .add(UIProvider.AccountColumns.NAME, AccountColumns.DISPLAY_NAME) .add(UIProvider.AccountColumns.UNDO_URI, ("'content://" + EmailContent.AUTHORITY + "/uiundo'")) @@ -3038,6 +3042,7 @@ public class EmailProvider extends ContentProvider { UIProvider.ConversationListIcon.NONE; } + // TODO: Pass in projection b/10912870 private Cursor getVirtualMailboxCursor(long mailboxId) { MatrixCursor mc = new MatrixCursorWithCachedColumns(UIProvider.FOLDERS_PROJECTION, 1); mc.addRow(getVirtualMailboxRow(getVirtualMailboxAccountId(mailboxId), @@ -3045,6 +3050,7 @@ public class EmailProvider extends ContentProvider { return mc; } + // TODO: Pass in projection b/10912870 private Object[] getVirtualMailboxRow(long accountId, int mailboxType) { final long id = getVirtualMailboxId(accountId, mailboxType); final String idString = Long.toString(id); @@ -3280,45 +3286,43 @@ public class EmailProvider extends ContentProvider { * @param uiProjection projection * @return query result cursor */ - private Cursor uiFolders(Uri uri, String[] uiProjection) { - Context context = getContext(); - SQLiteDatabase db = getDatabase(context); - String id = uri.getPathSegments().get(1); + private Cursor uiFolders(final Uri uri, final String[] uiProjection) { + final Context context = getContext(); + final SQLiteDatabase db = getDatabase(context); + final String id = uri.getPathSegments().get(1); + + final Uri notifyUri = + UIPROVIDER_FOLDERLIST_NOTIFIER.buildUpon().appendEncodedPath(id).build(); + + final Cursor vc = uiVirtualMailboxes(id, uiProjection); + vc.setNotificationUri(context.getContentResolver(), notifyUri); if (id.equals(COMBINED_ACCOUNT_ID_STRING)) { - MatrixCursor mc = new MatrixCursorWithCachedColumns(UIProvider.FOLDERS_PROJECTION, 3); - Object[] row; - row = getVirtualMailboxRow(COMBINED_ACCOUNT_ID, Mailbox.TYPE_INBOX); - mc.addRow(row); - row = getVirtualMailboxRow(COMBINED_ACCOUNT_ID, Mailbox.TYPE_STARRED); - mc.addRow(row); - row = getVirtualMailboxRow(COMBINED_ACCOUNT_ID, Mailbox.TYPE_UNREAD); - mc.addRow(row); - - final Uri notifyUri = - UIPROVIDER_FOLDERLIST_NOTIFIER.buildUpon().appendEncodedPath(id).build(); - mc.setNotificationUri(context.getContentResolver(), notifyUri); - return mc; + return vc; } else { Cursor c = db.rawQuery(genQueryAccountMailboxes(uiProjection), new String[] {id}); c = getFolderListCursor(db, c, uiProjection); - // 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); - mc.addRow(row); - row = getVirtualMailboxRow(acctId, Mailbox.TYPE_UNREAD); - mc.addRow(row); - - final Uri notifyUri = - UIPROVIDER_FOLDERLIST_NOTIFIER.buildUpon().appendEncodedPath(id).build(); - mc.setNotificationUri(context.getContentResolver(), notifyUri); c.setNotificationUri(context.getContentResolver(), notifyUri); - Cursor[] cursors = new Cursor[] {mc, c}; + Cursor[] cursors = new Cursor[] {vc, c}; return new MergeCursor(cursors); } } + private Cursor uiVirtualMailboxes(final String id, final String[] uiProjection) { + final MatrixCursor mc = new MatrixCursorWithCachedColumns(uiProjection); + + if (id.equals(COMBINED_ACCOUNT_ID_STRING)) { + mc.addRow(getVirtualMailboxRow(COMBINED_ACCOUNT_ID, Mailbox.TYPE_INBOX)); + mc.addRow(getVirtualMailboxRow(COMBINED_ACCOUNT_ID, Mailbox.TYPE_STARRED)); + mc.addRow(getVirtualMailboxRow(COMBINED_ACCOUNT_ID, Mailbox.TYPE_UNREAD)); + } else { + final long acctId = Long.parseLong(id); + mc.addRow(getVirtualMailboxRow(acctId, Mailbox.TYPE_STARRED)); + mc.addRow(getVirtualMailboxRow(acctId, Mailbox.TYPE_UNREAD)); + } + + return mc; + } + /** * Returns an array of the default recent folders for a given URI which is unique for an * account. Some accounts might not have default recent folders, in which case an empty array @@ -3748,7 +3752,22 @@ public class EmailProvider extends ContentProvider { Uri notifyUri = null; switch(match) { case UI_ALL_FOLDERS: - // TODO: Should this just do uiFolders()? + notifyUri = + UIPROVIDER_FOLDERLIST_NOTIFIER.buildUpon().appendEncodedPath(id).build(); + final Cursor vc = uiVirtualMailboxes(id, uiProjection); + if (id.equals(COMBINED_ACCOUNT_ID_STRING)) { + // There's no real mailboxes, so just return the virtual ones + c = vc; + } else { + // Return real and virtual mailboxes alike + final Cursor rawc = db.rawQuery(genQueryAccountAllMailboxes(uiProjection), + new String[] {id}); + rawc.setNotificationUri(context.getContentResolver(), notifyUri); + vc.setNotificationUri(context.getContentResolver(), notifyUri); + c = new MergeCursor(new Cursor[] {rawc, vc}); + } + break; + case UI_FULL_FOLDERS: c = db.rawQuery(genQueryAccountAllMailboxes(uiProjection), new String[] {id}); c = getFolderListCursor(db, c, uiProjection); notifyUri = diff --git a/src/com/android/email/provider/FolderPickerActivity.java b/src/com/android/email/provider/FolderPickerActivity.java index f45ce3bfd..2ec625be6 100644 --- a/src/com/android/email/provider/FolderPickerActivity.java +++ b/src/com/android/email/provider/FolderPickerActivity.java @@ -53,7 +53,7 @@ public class FolderPickerActivity extends Activity implements FolderPickerCallba Intent i = getIntent(); Uri uri = i.getData(); int headerId; - com.android.mail.providers.Account uiAccount = null; + final com.android.mail.providers.Account uiAccount; // If we've gotten a Uri, then this is a call from the UI in response to setupIntentUri // in an account (meaning the account requires setup) if (uri != null) { @@ -167,7 +167,7 @@ public class FolderPickerActivity extends Activity implements FolderPickerCallba private void startPickerForAccount() { int headerId = R.string.trash_folder_selection_title; - Uri uri = Uri.parse("content://" + EmailContent.AUTHORITY + "/uiallfolders/" + mAccountId); + Uri uri = Uri.parse("content://" + EmailContent.AUTHORITY + "/uifullfolders/" + mAccountId); startPicker(uri, headerId); } |