Merge "Removed PhotoLayout and made actionbar an overlay." into jb-ub-mail
diff --git a/src/com/android/mail/browse/SelectedConversationsActionMenu.java b/src/com/android/mail/browse/SelectedConversationsActionMenu.java
index 1e7bf04..b3a9488 100644
--- a/src/com/android/mail/browse/SelectedConversationsActionMenu.java
+++ b/src/com/android/mail/browse/SelectedConversationsActionMenu.java
@@ -158,8 +158,8 @@
                 }
                 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 07efd27..55a5d0b 100644
--- a/src/com/android/mail/ui/AbstractActivityController.java
+++ b/src/com/android/mail/ui/AbstractActivityController.java
@@ -675,7 +675,7 @@
                 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 @@
     // 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 @@
                 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 @@
         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 @@
         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 @@
                     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 @@
     }
 
     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 6ae279a..b971c4c 100644
--- a/src/com/android/mail/ui/FoldersSelectionDialog.java
+++ b/src/com/android/mail/ui/FoldersSelectionDialog.java
@@ -47,6 +47,7 @@
     private boolean mSingle = false;
     private FolderSelectorAdapter mAdapter;
     private final Collection<Conversation> mTarget;
+    private boolean mBatch;
 
     public interface FolderChangeCommitListener {
         /**
@@ -54,16 +55,18 @@
          * 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 @@
                     }
                 }
                 if (mCommitListener != null) {
-                    mCommitListener.onFolderChangesCommit(folders, mTarget);
+                    mCommitListener.onFolderChangesCommit(folders, mTarget, mBatch);
                 }
                 break;
             case DialogInterface.BUTTON_NEGATIVE: