summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Mantler <nicoya@google.com>2013-09-24 12:03:24 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-09-24 12:03:24 -0700
commit2d8cc3de3d89fed154d7fed7102253c725cf8ce3 (patch)
tree5745c2d0f597031b207b214fbfab654d1fc8786c
parent0deee4f88c0ec28ceeb6c7d5226d918b227e56be (diff)
parentbab16f9161edb940f8a612846a2ff4ac50ffc58d (diff)
downloadandroid_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.java85
-rw-r--r--src/com/android/email/provider/FolderPickerActivity.java4
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);
}