diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/com/android/email/provider/EmailProvider.java | 46 | ||||
| -rw-r--r-- | src/com/android/email/provider/WidgetProvider.java | 23 |
2 files changed, 43 insertions, 26 deletions
diff --git a/src/com/android/email/provider/EmailProvider.java b/src/com/android/email/provider/EmailProvider.java index 4917e50b5..82f750b1e 100644 --- a/src/com/android/email/provider/EmailProvider.java +++ b/src/com/android/email/provider/EmailProvider.java @@ -102,6 +102,7 @@ import com.android.mail.widget.BaseWidgetProvider; import com.android.mail.widget.WidgetProvider; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; import java.io.File; import java.io.FileDescriptor; @@ -3089,15 +3090,17 @@ public class EmailProvider extends ContentProvider { * any pending notifications for the corresponding mailbox should be canceled). We also handle * getExtras() to provide a snapshot of the mailbox's status */ - static class VisibilityCursor extends CursorWrapper { + static class EmailConversationCursor extends CursorWrapper { private final long mMailboxId; private final Context mContext; + private final FolderList mFolderList; private final Bundle mExtras = new Bundle(); - public VisibilityCursor(Context context, Cursor cursor, long mailboxId) { + public EmailConversationCursor(Context context, Cursor cursor, long mailboxId) { super(cursor); mMailboxId = mailboxId; mContext = context; + mFolderList = FolderList.copyOf(Lists.newArrayList(getFolder(mContext, mMailboxId))); Mailbox mailbox = Mailbox.restoreMailboxWithId(context, mailboxId); // We assume that all message lists are complete @@ -3130,6 +3133,8 @@ public class EmailProvider extends ContentProvider { @Override public Bundle respond(Bundle params) { + final Bundle response = new Bundle(); + final String setVisibilityKey = UIProvider.ConversationCursorCommand.COMMAND_KEY_SET_VISIBILITY; if (params.containsKey(setVisibilityKey)) { @@ -3163,13 +3168,46 @@ public class EmailProvider extends ContentProvider { } } // Return success - Bundle response = new Bundle(); response.putString(setVisibilityKey, UIProvider.ConversationCursorCommand.COMMAND_RESPONSE_OK); + + final String rawFoldersKey = + UIProvider.ConversationCursorCommand.COMMAND_GET_RAW_FOLDERS; + if (params.containsKey(rawFoldersKey)) { + response.putParcelable(rawFoldersKey, mFolderList); + } + return response; } } + /** + * Convenience method to create a {@link Folder} + * @param context to get a {@ContentResolver} + * @param mailboxId id of the {@link Mailbox} that we want + * @return the {@link Folder} or null + */ + public static Folder getFolder(Context context, long mailboxId) { + final ContentResolver resolver = context.getContentResolver(); + final Cursor fc = resolver.query(EmailProvider.uiUri("uifolder", mailboxId), + UIProvider.FOLDERS_PROJECTION, null, null, null); + + if (fc == null) { + LogUtils.e(TAG, "Null folder cursor for mailboxId %d", mailboxId); + return null; + } + + Folder uiFolder = null; + try { + if (fc.moveToFirst()) { + uiFolder = new Folder(fc); + } + } finally { + fc.close(); + } + return uiFolder; + } + static class AttachmentsCursor extends CursorWrapper { private final int mContentUriIndex; private final int mUriIndex; @@ -3291,7 +3329,7 @@ public class EmailProvider extends ContentProvider { genQueryMailboxMessages(uiProjection, unseenOnly), new String[] {id}); } notifyUri = UIPROVIDER_CONVERSATION_NOTIFIER.buildUpon().appendPath(id).build(); - c = new VisibilityCursor(context, c, mailboxId); + c = new EmailConversationCursor(context, c, mailboxId); break; case UI_MESSAGE: MessageQuery qq = genQueryViewMessage(uiProjection, id); diff --git a/src/com/android/email/provider/WidgetProvider.java b/src/com/android/email/provider/WidgetProvider.java index 52b51cab7..1b30b1da8 100644 --- a/src/com/android/email/provider/WidgetProvider.java +++ b/src/com/android/email/provider/WidgetProvider.java @@ -103,7 +103,7 @@ public class WidgetProvider extends BaseWidgetProvider { // Get Account and folder objects for the account id and mailbox id final com.android.mail.providers.Account uiAccount = getAccount(context, accountId); - final Folder uiFolder = getFolder(context, mailboxId); + final Folder uiFolder = EmailProvider.getFolder(context, mailboxId); if (uiAccount != null && uiFolder != null) { WidgetService.saveWidgetInformation(context, widgetId, uiAccount, @@ -167,27 +167,6 @@ public class WidgetProvider extends BaseWidgetProvider { return uiAccount; } - private static Folder getFolder(Context context, long mailboxId) { - final ContentResolver resolver = context.getContentResolver(); - final Cursor fc = resolver.query(EmailProvider.uiUri("uifolder", mailboxId), - UIProvider.FOLDERS_PROJECTION, null, null, null); - - if (fc == null) { - LogUtils.e(LOG_TAG, "Null folder cursor for mailboxId %d", mailboxId); - return null; - } - - Folder uiFolder = null; - try { - if (fc.moveToFirst()) { - uiFolder = new Folder(fc); - } - } finally { - fc.close(); - } - return uiFolder; - } - /** * Returns the saved account ID for the given widget. Otherwise, * {@link com.android.emailcommon.provider.Account#NO_ACCOUNT} if |
