Destructive action dialogs.

Use delete/ archive settings to determine if we should show a confirmation dialog.
Show confirm discard dialog in Compose and actually discard.

Change-Id: I992bdf598af72a62deadfdfe695a64b89fad5c24
diff --git a/src/com/android/mail/browse/SelectedConversationsActionMenu.java b/src/com/android/mail/browse/SelectedConversationsActionMenu.java
index 0695965..c11ab0e 100644
--- a/src/com/android/mail/browse/SelectedConversationsActionMenu.java
+++ b/src/com/android/mail/browse/SelectedConversationsActionMenu.java
@@ -21,6 +21,7 @@
 import com.android.mail.providers.Account;
 import com.android.mail.providers.Conversation;
 import com.android.mail.providers.Folder;
+import com.android.mail.providers.Settings;
 import com.android.mail.providers.UIProvider;
 import com.android.mail.providers.UIProvider.FolderCapabilities;
 import com.android.mail.providers.UIProvider.ConversationColumns;
@@ -34,6 +35,7 @@
 import com.android.mail.ui.UndoBarView.UndoListener;
 import com.android.mail.ui.UndoOperation;
 import com.android.mail.utils.LogUtils;
+import com.android.mail.utils.Utils;
 import com.google.common.annotations.VisibleForTesting;
 
 import java.util.ArrayList;
@@ -41,7 +43,9 @@
 import java.util.Collection;
 import java.util.HashSet;
 
+import android.app.AlertDialog;
 import android.content.Context;
+import android.content.DialogInterface;
 import android.text.TextUtils;
 import android.view.ActionMode;
 import android.view.Menu;
@@ -123,10 +127,10 @@
         Collection<Conversation> conversations = mSelectionSet.values();
         switch (item.getItemId()) {
             case R.id.delete:
-                mListAdapter.delete(conversations, mDeleteListener);
+                performDestructiveAction(R.id.delete, mDeleteListener);
                 break;
             case R.id.archive:
-                mListAdapter.delete(conversations, mArchiveListener);
+                performDestructiveAction(R.id.archive, mArchiveListener);
                 break;
             case R.id.mute:
                 mListAdapter.delete(conversations, mMuteListener);
@@ -162,9 +166,32 @@
         return handled;
     }
 
+    private void performDestructiveAction(int id, final ActionCompleteListener listener) {
+        Settings settings = mActivity.getSettings();
+        final Collection<Conversation> conversations = mSelectionSet.values();
+        boolean showDialog = false;
+        if (settings != null) {
+            showDialog = (id == R.id.delete) ? settings.confirmDelete : settings.confirmArchive;
+        }
+        if (showDialog) {
+            int resId = id == R.id.delete ? R.plurals.confirm_delete_conversation
+                    : R.plurals.confirm_archive_conversation;
+            CharSequence message = Utils.formatPlural(mContext, resId, conversations.size());
+            new AlertDialog.Builder(mContext).setMessage(message)
+                    .setPositiveButton(R.string.ok, new AlertDialog.OnClickListener() {
+                        @Override
+                        public void onClick(DialogInterface dialog, int which) {
+                            mListAdapter.delete(conversations, listener);
+                        }
+
+                    }).setNegativeButton(R.string.cancel, null).create().show();
+        } else {
+            mListAdapter.delete(conversations, listener);
+        }
+    }
+
     private void markConversationsRead(boolean read) {
         Collection<Conversation> conversations = mSelectionSet.values();
-        // TODO: Interpret properly (rather than as "mark read")
         Conversation.updateBoolean(mContext, conversations, ConversationColumns.READ, read);
         mSelectionSet.clear();
         // Redraw with changes