Merge "Don't move drafts to trash"
This commit is contained in:
commit
a44c0349fa
|
@ -677,18 +677,27 @@ public class Controller {
|
|||
}
|
||||
|
||||
/**
|
||||
* Delete a single message by moving it to the trash, or deleting it from the trash
|
||||
* Delete a single message by moving it to the trash, or really delete it if it's already in
|
||||
* trash or a draft message.
|
||||
*
|
||||
* This function has no callback, no result reporting, because the desired outcome
|
||||
* is reflected entirely by changes to one or more cursors.
|
||||
*
|
||||
* @param messageId The id of the message to "delete".
|
||||
* @param accountId The id of the message's account, or -1 if not known by caller
|
||||
* @return the AsyncTask used to execute the deletion
|
||||
*/
|
||||
public AsyncTask<Void, Void, Void> deleteMessage(final long messageId, long accountId) {
|
||||
return Utility.runAsync(new Runnable() {
|
||||
public void deleteMessage(final long messageId, final long accountId) {
|
||||
Utility.runAsync(new Runnable() {
|
||||
public void run() {
|
||||
deleteMessageSync(messageId, accountId);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Synchronous version of {@link #deleteMessage} for tests.
|
||||
*/
|
||||
/* package */ void deleteMessageSync(long messageId, long accountId) {
|
||||
// 1. Get the message's account
|
||||
Account account = Account.getAccountForMessageId(mProviderContext, messageId);
|
||||
|
||||
|
@ -707,8 +716,8 @@ public class Controller {
|
|||
ContentResolver resolver = mProviderContext.getContentResolver();
|
||||
|
||||
// 5. Perform "delete" as appropriate
|
||||
if (mailbox.mId == trashMailboxId) {
|
||||
// 5a. Delete from trash
|
||||
if ((mailbox.mId == trashMailboxId) || (mailbox.mType == Mailbox.TYPE_DRAFTS)) {
|
||||
// 5a. Really delete it
|
||||
resolver.delete(uri, null, null);
|
||||
} else {
|
||||
// 5b. Move to trash
|
||||
|
@ -721,8 +730,6 @@ public class Controller {
|
|||
mLegacyController.processPendingActions(account.mId);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Moving messages to another folder
|
||||
|
|
|
@ -199,36 +199,72 @@ public class ControllerProviderOpsTests extends ProviderTestCase2<EmailProvider>
|
|||
public void testDeleteMessage() throws InterruptedException, ExecutionException {
|
||||
Account account1 = ProviderTestUtils.setupAccount("message-delete", true, mProviderContext);
|
||||
long account1Id = account1.mId;
|
||||
Mailbox box1 = ProviderTestUtils.setupMailbox("box1", account1Id, true, mProviderContext);
|
||||
long box1Id = box1.mId;
|
||||
Mailbox box2 = ProviderTestUtils.setupMailbox("box2", account1Id, false, mProviderContext);
|
||||
box2.mType = EmailContent.Mailbox.TYPE_TRASH;
|
||||
box2.save(mProviderContext);
|
||||
long box2Id = box2.mId;
|
||||
Mailbox box = ProviderTestUtils.setupMailbox("box1", account1Id, true, mProviderContext);
|
||||
long boxId = box.mId;
|
||||
|
||||
Message message1 = ProviderTestUtils.setupMessage("message1", account1Id, box1Id, false,
|
||||
Mailbox trashBox = ProviderTestUtils.setupMailbox("box2", account1Id, false,
|
||||
mProviderContext);
|
||||
trashBox.mType = EmailContent.Mailbox.TYPE_TRASH;
|
||||
trashBox.save(mProviderContext);
|
||||
long trashBoxId = trashBox.mId;
|
||||
|
||||
Mailbox draftBox = ProviderTestUtils.setupMailbox("box3", account1Id, false,
|
||||
mProviderContext);
|
||||
draftBox.mType = EmailContent.Mailbox.TYPE_DRAFTS;
|
||||
draftBox.save(mProviderContext);
|
||||
long draftBoxId = draftBox.mId;
|
||||
|
||||
{
|
||||
// Case 1: Message in a regular mailbox, account known.
|
||||
Message message = ProviderTestUtils.setupMessage("message1", account1Id, boxId, false,
|
||||
true, mProviderContext);
|
||||
long message1Id = message1.mId;
|
||||
long messageId = message.mId;
|
||||
|
||||
// Because deleteMessage now runs asynchronously, call get() to force it to complete
|
||||
mTestController.deleteMessage(message1Id, account1Id).get();
|
||||
mTestController.deleteMessageSync(messageId, account1Id);
|
||||
|
||||
// now read back a fresh copy and confirm it's in the trash
|
||||
Message message1get = EmailContent.Message.restoreMessageWithId(mProviderContext,
|
||||
message1Id);
|
||||
assertEquals(box2Id, message1get.mMailboxKey);
|
||||
Message restored = EmailContent.Message.restoreMessageWithId(mProviderContext,
|
||||
messageId);
|
||||
assertEquals(trashBoxId, restored.mMailboxKey);
|
||||
}
|
||||
|
||||
// Now repeat test with accountId "unknown"
|
||||
Message message2 = ProviderTestUtils.setupMessage("message2", account1Id, box1Id, false,
|
||||
{
|
||||
// Case 2: Message in a regular mailbox, account *un*known.
|
||||
Message message = ProviderTestUtils.setupMessage("message2", account1Id, boxId, false,
|
||||
true, mProviderContext);
|
||||
long message2Id = message2.mId;
|
||||
long messageId = message.mId;
|
||||
|
||||
mTestController.deleteMessage(message2Id, -1).get();
|
||||
mTestController.deleteMessageSync(messageId, -1);
|
||||
|
||||
// now read back a fresh copy and confirm it's in the trash
|
||||
Message message2get = EmailContent.Message.restoreMessageWithId(mProviderContext,
|
||||
message2Id);
|
||||
assertEquals(box2Id, message2get.mMailboxKey);
|
||||
Message restored = EmailContent.Message.restoreMessageWithId(mProviderContext,
|
||||
messageId);
|
||||
assertEquals(trashBoxId, restored.mMailboxKey);
|
||||
}
|
||||
|
||||
{
|
||||
// Case 3: Already in trash
|
||||
Message message = ProviderTestUtils.setupMessage("message3", account1Id, trashBoxId,
|
||||
false, true, mProviderContext);
|
||||
long messageId = message.mId;
|
||||
|
||||
mTestController.deleteMessageSync(messageId, account1Id);
|
||||
|
||||
// Message should be deleted.
|
||||
assertNull(EmailContent.Message.restoreMessageWithId(mProviderContext, messageId));
|
||||
}
|
||||
|
||||
{
|
||||
// Case 4: Draft
|
||||
Message message = ProviderTestUtils.setupMessage("message3", account1Id, draftBoxId,
|
||||
false, true, mProviderContext);
|
||||
long messageId = message.mId;
|
||||
|
||||
mTestController.deleteMessageSync(messageId, account1Id);
|
||||
|
||||
// Message should be deleted.
|
||||
assertNull(EmailContent.Message.restoreMessageWithId(mProviderContext, messageId));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -248,8 +284,7 @@ public class ControllerProviderOpsTests extends ProviderTestCase2<EmailProvider>
|
|||
mProviderContext);
|
||||
long message1Id = message1.mId;
|
||||
|
||||
// Because deleteMessage now runs asynchronously, call get() to force it to complete
|
||||
mTestController.deleteMessage(message1Id, account1Id).get();
|
||||
mTestController.deleteMessageSync(message1Id, account1Id);
|
||||
|
||||
// now read back a fresh copy and confirm it's in the trash
|
||||
Message message1get =
|
||||
|
|
Loading…
Reference in New Issue