summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndrew Sapperstein <asapperstein@google.com>2013-05-29 16:41:13 -0700
committerAndrew Sapperstein <asapperstein@google.com>2013-05-29 18:10:59 -0700
commitbc7cd75e9a8652bfa873007bcd12db2a140c7d73 (patch)
tree66cf7dd19dfc0ec37531be61f2ced0eba57a7c69 /src
parentddca2a0dcbcd27d2d17b5d5273eee2004fbcdf7c (diff)
downloadandroid_packages_apps_Email-bc7cd75e9a8652bfa873007bcd12db2a140c7d73.tar.gz
android_packages_apps_Email-bc7cd75e9a8652bfa873007bcd12db2a140c7d73.tar.bz2
android_packages_apps_Email-bc7cd75e9a8652bfa873007bcd12db2a140c7d73.zip
Prevent duplicate inboxes after upgrade.
Previously, we were not properly handling the case-insensitive INBOX mailbox type. We are now upgrading properly. Fixes b/8701883. Change-Id: I61be5159e23dc3e9578e577e33bc00a63f56b525
Diffstat (limited to 'src')
-rw-r--r--src/com/android/email/mail/store/ImapStore.java22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/com/android/email/mail/store/ImapStore.java b/src/com/android/email/mail/store/ImapStore.java
index cc65d6632..b457af3d1 100644
--- a/src/com/android/email/mail/store/ImapStore.java
+++ b/src/com/android/email/mail/store/ImapStore.java
@@ -330,11 +330,14 @@ public class ImapStore extends Store {
* @param mailboxPath The path of the mailbox to add
* @param delimiter A path delimiter. May be {@code null} if there is no delimiter.
* @param selectable If {@code true}, the mailbox can be selected and used to store messages.
+ * @param mailbox If not null, mailbox is used instead of querying for the Mailbox.
*/
private ImapFolder addMailbox(Context context, long accountId, String mailboxPath,
- char delimiter, boolean selectable) {
+ char delimiter, boolean selectable, Mailbox mailbox) {
ImapFolder folder = (ImapFolder) getFolder(mailboxPath);
- Mailbox mailbox = Mailbox.getMailboxForPath(context, accountId, mailboxPath);
+ if (mailbox == null) {
+ mailbox = Mailbox.getMailboxForPath(context, accountId, mailboxPath);
+ }
if (mailbox.isSaved()) {
// existing mailbox
// mailbox retrieved from database; save hash _before_ updating fields
@@ -384,7 +387,7 @@ public class ImapStore extends Store {
if (encodedFolder.isEmpty()) continue;
String folderName = decodeFolderName(encodedFolder.getString(), mPathPrefix);
- // TODO: Can this special case be eliminated?
+
if (ImapConstants.INBOX.equalsIgnoreCase(folderName)) continue;
// Parse attributes.
@@ -395,17 +398,18 @@ public class ImapStore extends Store {
if (!TextUtils.isEmpty(delimiter)) {
delimiterChar = delimiter.charAt(0);
}
- ImapFolder folder =
- addMailbox(mContext, mAccount.mId, folderName, delimiterChar, selectable);
+ ImapFolder folder = addMailbox(
+ mContext, mAccount.mId, folderName, delimiterChar, selectable, null);
mailboxes.put(folderName, folder);
}
}
// In order to properly map INBOX -> Inbox, handle it as a special case.
- String inboxName = Mailbox.getSystemMailboxName(mContext, Mailbox.TYPE_INBOX);
- Folder newFolder =
- addMailbox(mContext, mAccount.mId, inboxName, '\0', true /*selectable*/);
- mailboxes.put(ImapConstants.INBOX, (ImapFolder)newFolder);
+ final Mailbox inbox =
+ Mailbox.restoreMailboxOfType(mContext, mAccount.mId, Mailbox.TYPE_INBOX);
+ final ImapFolder newFolder = addMailbox(
+ mContext, mAccount.mId, inbox.mServerId, '\0', true /*selectable*/, inbox);
+ mailboxes.put(ImapConstants.INBOX, newFolder);
createHierarchy(mailboxes);
saveMailboxList(mContext, mailboxes);