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
diff --git a/src/com/android/mail/compose/ComposeActivity.java b/src/com/android/mail/compose/ComposeActivity.java
index fbd2e86..cd478ef 100644
--- a/src/com/android/mail/compose/ComposeActivity.java
+++ b/src/com/android/mail/compose/ComposeActivity.java
@@ -658,6 +658,9 @@
case R.id.send:
doSend();
break;
+ case R.id.discard:
+ doDiscard();
+ break;
default:
handled = false;
break;
@@ -1408,6 +1411,12 @@
}
+ private void doDiscard() {
+ new AlertDialog.Builder(this).setMessage(R.string.confirm_discard_text)
+ .setPositiveButton(R.string.ok, this)
+ .setNegativeButton(R.string.cancel, null)
+ .create().show();
+ }
/**
* Effectively discard the current message.
*
diff --git a/src/com/android/mail/ui/AbstractActivityController.java b/src/com/android/mail/ui/AbstractActivityController.java
index 67f066f..76feb78 100644
--- a/src/com/android/mail/ui/AbstractActivityController.java
+++ b/src/com/android/mail/ui/AbstractActivityController.java
@@ -275,6 +275,11 @@
resetActionBarIcon();
}
+ @Override
+ public Settings getSettings() {
+ return mCachedSettings;
+ }
+
private void fetchAccountFolderInfo() {
if (mFetchAccountFolderTask != null) {
mFetchAccountFolderTask.cancel(true);
diff --git a/src/com/android/mail/ui/ActivityController.java b/src/com/android/mail/ui/ActivityController.java
index baf396b..f4cc093 100644
--- a/src/com/android/mail/ui/ActivityController.java
+++ b/src/com/android/mail/ui/ActivityController.java
@@ -31,6 +31,7 @@
import com.android.mail.ConversationListContext;
import com.android.mail.browse.ConversationItemView.StarHandler;
import com.android.mail.providers.Conversation;
+import com.android.mail.providers.Settings;
import com.android.mail.ui.ViewMode.ModeChangeListener;
/**
@@ -250,4 +251,10 @@
* Handle a touch event.
*/
void onTouchEvent(MotionEvent event);
+
+ /**
+ * Return the settings currently being used by this activity.
+ * @return
+ */
+ Settings getSettings();
}
diff --git a/src/com/android/mail/ui/FolderSelectionActivity.java b/src/com/android/mail/ui/FolderSelectionActivity.java
index 36f7d7d..f1b7cf5 100644
--- a/src/com/android/mail/ui/FolderSelectionActivity.java
+++ b/src/com/android/mail/ui/FolderSelectionActivity.java
@@ -35,6 +35,7 @@
import com.android.mail.browse.ConversationItemView.StarHandler;
import com.android.mail.providers.Account;
import com.android.mail.providers.Folder;
+import com.android.mail.providers.Settings;
import com.android.mail.providers.UIProvider;
import com.android.mail.ui.ViewMode.ModeChangeListener;
import com.android.mail.utils.LogUtils;
@@ -260,4 +261,9 @@
public FolderChangeListener getFolderChangeListener() {
return this;
}
+
+ @Override
+ public Settings getSettings() {
+ return null;
+ }
}
diff --git a/src/com/android/mail/ui/MailActivity.java b/src/com/android/mail/ui/MailActivity.java
index 720e522..8cd285f 100644
--- a/src/com/android/mail/ui/MailActivity.java
+++ b/src/com/android/mail/ui/MailActivity.java
@@ -28,6 +28,7 @@
import android.view.MotionEvent;
import com.android.mail.browse.ConversationItemView.StarHandler;
+import com.android.mail.providers.Settings;
import com.android.mail.ui.ViewMode.ModeChangeListener;
import com.android.mail.utils.Utils;
@@ -251,4 +252,9 @@
public FolderChangeListener getFolderChangeListener() {
return mController;
}
+
+ @Override
+ public Settings getSettings() {
+ return mController.getSettings();
+ }
}
diff --git a/src/com/android/mail/ui/RestrictedActivity.java b/src/com/android/mail/ui/RestrictedActivity.java
index b9863e9..7fbedfc 100644
--- a/src/com/android/mail/ui/RestrictedActivity.java
+++ b/src/com/android/mail/ui/RestrictedActivity.java
@@ -32,6 +32,8 @@
import android.view.View;
import android.view.Window;
+import com.android.mail.providers.Settings;
+
/**
* {@link RestrictedActivity} gives access to a subset of {@link Activity} methods. These methods
* match the signatures from {@link Activity}.
@@ -181,4 +183,10 @@
* @return the context associated with this activity.
*/
Context getActivityContext();
+
+ /**
+ * Return the settings currently being used by this activity.
+ * @return
+ */
+ Settings getSettings();
}