Don't move drafts to trash

Now deleted drafts are really deleted, rather than getting moved to trash.

Also rewrote the test to avoid creating AsyncTasks on the test thread.
In this case it seems to be running fine, but I've had problems doing this
before.

Bug 3099179

Change-Id: Ice5298bf94312ce764d90aa35c5a6c5262ec5b42
This commit is contained in:
Makoto Onuki 2010-10-15 11:45:00 -07:00
parent f8b30b776b
commit 77aabd9519
2 changed files with 103 additions and 61 deletions

View File

@ -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

View File

@ -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 =