diff --git a/src/com/fsck/k9/activity/MessageView.java b/src/com/fsck/k9/activity/MessageView.java index 8c120ca9a..49d6243b0 100644 --- a/src/com/fsck/k9/activity/MessageView.java +++ b/src/com/fsck/k9/activity/MessageView.java @@ -61,6 +61,12 @@ public class MessageView extends K9Activity implements OnClickListener { private MessageViewHandler mHandler = new MessageViewHandler(); private StorageManager.StorageListener mStorageListener = new StorageListenerImplementation(); + /** + * Used to temporarily store the destination folder for refile operations if a confirmation + * dialog is shown. + */ + private String mDstFolder; + private final class StorageListenerImplementation implements StorageManager.StorageListener { @Override public void onUnmount(String providerId) { @@ -581,17 +587,26 @@ public class MessageView extends K9Activity implements OnClickListener { toast.show(); return; } - String srcFolder = mMessageReference.folderName; - Message messageToMove = mMessage; + if (K9.FOLDER_NONE.equalsIgnoreCase(dstFolder)) { return; } + + if (mAccount.getSpamFolderName().equals(dstFolder) && K9.confirmSpam()) { + mDstFolder = dstFolder; + showDialog(R.id.dialog_confirm_spam); + } else { + refileMessage(dstFolder); + } + } + + private void refileMessage(String dstFolder) { + String srcFolder = mMessageReference.folderName; + Message messageToMove = mMessage; showNextMessageOrReturn(); mController.moveMessage(mAccount, srcFolder, messageToMove, dstFolder, null); } - - private void showNextMessageOrReturn() { if (K9.messageViewReturnToList()) { finish(); @@ -927,6 +942,19 @@ public class MessageView extends K9Activity implements OnClickListener { delete(); } }); + case R.id.dialog_confirm_spam: + return ConfirmationDialog.create(this, id, + R.string.dialog_confirm_spam_title, + R.string.dialog_confirm_spam_message, + R.string.dialog_confirm_spam_confirm_button, + R.string.dialog_confirm_spam_cancel_button, + new Runnable() { + @Override + public void run() { + refileMessage(mDstFolder); + mDstFolder = null; + } + }); case R.id.dialog_attachment_progress: ProgressDialog d = new ProgressDialog(this); d.setIndeterminate(true);