diff options
3 files changed, 21 insertions, 12 deletions
diff --git a/src/com/android/mail/browse/SelectedConversationsActionMenu.java b/src/com/android/mail/browse/SelectedConversationsActionMenu.java index 1e7bf04b2..b3a9488ac 100644 --- a/src/com/android/mail/browse/SelectedConversationsActionMenu.java +++ b/src/com/android/mail/browse/SelectedConversationsActionMenu.java @@ -158,8 +158,8 @@ public class SelectedConversationsActionMenu implements ActionMode.Callback, } break; case R.id.change_folder: - new FoldersSelectionDialog(mContext, mAccount, mController, mSelectionSet.values()) - .show(); + new FoldersSelectionDialog(mContext, mAccount, mController, mSelectionSet.values(), + true).show(); break; case R.id.mark_important: markConversationsImportant(true); diff --git a/src/com/android/mail/ui/AbstractActivityController.java b/src/com/android/mail/ui/AbstractActivityController.java index 07efd27ba..55a5d0ba6 100644 --- a/src/com/android/mail/ui/AbstractActivityController.java +++ b/src/com/android/mail/ui/AbstractActivityController.java @@ -675,7 +675,7 @@ public abstract class AbstractActivityController implements ActivityController, break; case R.id.change_folder: new FoldersSelectionDialog(mActivity.getActivityContext(), mAccount, this, - Conversation.listOf(mCurrentConversation)).show(); + Conversation.listOf(mCurrentConversation), false).show(); break; default: handled = false; @@ -1585,7 +1585,7 @@ public abstract class AbstractActivityController implements ActivityController, // conversations to. @Override public final void onFolderChangesCommit( - Collection<Folder> folders, Collection<Conversation> target) { + Collection<Folder> folders, Collection<Conversation> target, boolean batch) { final boolean isDestructive = !Folder.containerIncludes(folders, mFolder); LogUtils.d(LOG_TAG, "onFolderChangesCommit: isDestructive = %b", isDestructive); if (isDestructive) { @@ -1593,7 +1593,8 @@ public abstract class AbstractActivityController implements ActivityController, c.localDeleteOnUpdate = true; } } - final DestructiveAction folderChange = getFolderChange(target, folders, isDestructive); + final DestructiveAction folderChange = getFolderChange(target, folders, isDestructive, + batch); // Update the UI elements depending no their visibility and availability // TODO(viki): Consolidate this into a single method requestDelete. if (isDestructive) { @@ -1798,7 +1799,7 @@ public abstract class AbstractActivityController implements ActivityController, final Collection<Conversation> conversations = mSelectedSet.values(); final Collection<Folder> dropTarget = Folder.listOf(folder); // Drag and drop is destructive: we remove conversations from the current folder. - final DestructiveAction action = getFolderChange(conversations, dropTarget, true); + final DestructiveAction action = getFolderChange(conversations, dropTarget, true, true); requestDelete(conversations, action); } @@ -1961,16 +1962,18 @@ public abstract class AbstractActivityController implements ActivityController, private final boolean mIsDestructive; /** Whether this destructive action has already been performed */ private boolean mCompleted; + private boolean mIsSelectedSet; /** * Create a new folder destruction object to act on the given conversations. * @param target */ private FolderDestruction(final Collection<Conversation> target, - final Collection<Folder> folders, boolean isDestructive) { + final Collection<Folder> folders, boolean isDestructive, boolean isBatch) { mTarget.addAll(target); mFolderList.addAll(folders); mIsDestructive = isDestructive; + mIsSelectedSet = isBatch; } @Override @@ -1988,6 +1991,9 @@ public abstract class AbstractActivityController implements ActivityController, ConversationColumns.RAW_FOLDERS, Folder.getSerializedFolderString(mFolder, mFolderList)); refreshConversationList(); + if (mIsSelectedSet) { + mSelectedSet.clear(); + } } /** * Returns true if this action has been performed, false otherwise. @@ -2003,8 +2009,8 @@ public abstract class AbstractActivityController implements ActivityController, } private final DestructiveAction getFolderChange(Collection<Conversation> target, - Collection<Folder> folders, boolean isDestructive){ - final DestructiveAction da = new FolderDestruction(target, folders, isDestructive); + Collection<Folder> folders, boolean isDestructive, boolean isBatch){ + final DestructiveAction da = new FolderDestruction(target, folders, isDestructive, isBatch); registerDestructiveAction(da); return da; } diff --git a/src/com/android/mail/ui/FoldersSelectionDialog.java b/src/com/android/mail/ui/FoldersSelectionDialog.java index 6ae279aa0..b971c4c62 100644 --- a/src/com/android/mail/ui/FoldersSelectionDialog.java +++ b/src/com/android/mail/ui/FoldersSelectionDialog.java @@ -47,6 +47,7 @@ public class FoldersSelectionDialog implements OnClickListener, OnMultiChoiceCli private boolean mSingle = false; private FolderSelectorAdapter mAdapter; private final Collection<Conversation> mTarget; + private boolean mBatch; public interface FolderChangeCommitListener { /** @@ -54,16 +55,18 @@ public class FoldersSelectionDialog implements OnClickListener, OnMultiChoiceCli * folders that they might be assigned to. * @param folders the folders to assign the conversations to. * @param target the conversations to act upon. + * @param batch whether this is a batch operation */ public void onFolderChangesCommit( - Collection<Folder> folders, Collection<Conversation> target); + Collection<Folder> folders, Collection<Conversation> target, boolean batch); } public FoldersSelectionDialog(final Context context, Account account, final FolderChangeCommitListener commitListener, - Collection<Conversation> target) { + Collection<Conversation> target, boolean isBatch) { mCommitListener = commitListener; mTarget = target; + mBatch = isBatch; // Mapping of a folder's uri to its checked state mCheckedState = new HashMap<Folder, Boolean>(); @@ -150,7 +153,7 @@ public class FoldersSelectionDialog implements OnClickListener, OnMultiChoiceCli } } if (mCommitListener != null) { - mCommitListener.onFolderChangesCommit(folders, mTarget); + mCommitListener.onFolderChangesCommit(folders, mTarget, mBatch); } break; case DialogInterface.BUTTON_NEGATIVE: |