diff options
author | Danny Baumann <dannybaumann@web.de> | 2017-05-29 12:07:19 +0200 |
---|---|---|
committer | Danny Baumann <dannybaumann@web.de> | 2017-05-29 12:08:49 +0200 |
commit | b76ada5c52890087d42258d80e664ccbedeeb116 (patch) | |
tree | 93db8b68ad461da1536d2ed622bde5d914e4785c | |
parent | 70ccb25cd8109f9f4473fc7ea32ec9d83e2d4036 (diff) | |
download | android_packages_apps_Email-b76ada5c52890087d42258d80e664ccbedeeb116.tar.gz android_packages_apps_Email-b76ada5c52890087d42258d80e664ccbedeeb116.tar.bz2 android_packages_apps_Email-b76ada5c52890087d42258d80e664ccbedeeb116.zip |
Fix check for deleted messages.
If we deleted a message locally, there won't be a local message map
entry for the DELETED flag update case, so we need to remove the message
from the unsynced message list before checking the local map entry.
Change-Id: Ib83703dde85ce65d2f292fb37241e3be23eeb5d8
-rwxr-xr-x | provider_src/com/android/email/service/ImapService.java | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/provider_src/com/android/email/service/ImapService.java b/provider_src/com/android/email/service/ImapService.java index 8d8dbd41f..bef3c8f6b 100755 --- a/provider_src/com/android/email/service/ImapService.java +++ b/provider_src/com/android/email/service/ImapService.java @@ -1868,32 +1868,35 @@ public class ImapService extends Service { // 8.- Remove remote deleted messages for (final Message remoteMessage : remoteMessages) { - if (remoteMessage.isSet(Flag.DELETED)) { - LocalMessageInfo info = localMessageMap.get(remoteMessage.getUid()); - if (info == null) { - continue; - } + if (!remoteMessage.isSet(Flag.DELETED)) { + continue; + } - // Delete associated data (attachment files) - // Attachment & Body records are auto-deleted when we delete the Message record - AttachmentUtilities.deleteAllAttachmentFiles(ctx, acct.mId, info.mId); + // Make sure we don't sync messages (again) that we deleted locally + // before and now get a flag update (DELETED being set) for now. + unsyncedMessages.remove(remoteMessage); - // Make sure we don't sync deleted messages we just got a flag update for - unsyncedMessages.remove(remoteMessage); + LocalMessageInfo info = localMessageMap.get(remoteMessage.getUid()); + if (info == null) { + continue; + } - // Delete the message itself - final Uri uriToDelete = ContentUris.withAppendedId( - EmailContent.Message.CONTENT_URI, info.mId); - resolver.delete(uriToDelete, null, null); + // Delete associated data (attachment files) + // Attachment & Body records are auto-deleted when we delete the Message record + AttachmentUtilities.deleteAllAttachmentFiles(ctx, acct.mId, info.mId); - // Delete extra rows (e.g. updated or deleted) - final Uri updateRowToDelete = ContentUris.withAppendedId( - EmailContent.Message.UPDATED_CONTENT_URI, info.mId); - resolver.delete(updateRowToDelete, null, null); - final Uri deleteRowToDelete = ContentUris.withAppendedId( - EmailContent.Message.DELETED_CONTENT_URI, info.mId); - resolver.delete(deleteRowToDelete, null, null); - } + // Delete the message itself + final Uri uriToDelete = ContentUris.withAppendedId( + EmailContent.Message.CONTENT_URI, info.mId); + resolver.delete(uriToDelete, null, null); + + // Delete extra rows (e.g. updated or deleted) + final Uri updateRowToDelete = ContentUris.withAppendedId( + EmailContent.Message.UPDATED_CONTENT_URI, info.mId); + resolver.delete(updateRowToDelete, null, null); + final Uri deleteRowToDelete = ContentUris.withAppendedId( + EmailContent.Message.DELETED_CONTENT_URI, info.mId); + resolver.delete(deleteRowToDelete, null, null); } // 9.- Load unsynced messages |