Support "Move to" functionality alongside "Change labels"

Cherry-picking Rohan's original change since I messed something up
while fixing conflicts.

User cannot move an email from one defined label to another.
Change label is a hassle to use to only select one and a
menu item for moving is preferable.

This change introduces the "Move to" as part of the overflow
menu. It allows for users to move emails from folders, excluding
Starred/Important.

Bug: 8157593
Change-Id: Iaf8660fb01f731f5cbcb2253a3768b0d7b429132
diff --git a/src/com/android/mail/browse/SelectedConversationsActionMenu.java b/src/com/android/mail/browse/SelectedConversationsActionMenu.java
index 5fd1414..43efc86 100644
--- a/src/com/android/mail/browse/SelectedConversationsActionMenu.java
+++ b/src/com/android/mail/browse/SelectedConversationsActionMenu.java
@@ -163,6 +163,8 @@
                     starConversations(false);
                 }
                 break;
+            case R.id.move_to:
+                /* fall through */
             case R.id.change_folder:
                 boolean cantMove = false;
                 Account acct = mAccount;
@@ -187,7 +189,8 @@
                 }
                 if (!cantMove) {
                     final FolderSelectionDialog dialog = FolderSelectionDialog.getInstance(
-                            mContext, acct, mUpdater, mSelectionSet.values(), true, mFolder);
+                            mContext, acct, mUpdater, mSelectionSet.values(), true, mFolder,
+                            item.getItemId() == R.id.move_to);
                     if (dialog != null) {
                         dialog.show();
                     }
@@ -369,10 +372,14 @@
         // 3) If we show neither archive or remove folder, then show a disabled
         // archive icon if the setting for that is true.
         final MenuItem removeFolder = menu.findItem(R.id.remove_folder);
+        final MenuItem moveTo = menu.findItem(R.id.move_to);
         final boolean showRemoveFolder = mFolder != null && mFolder.type == FolderType.DEFAULT
                 && mFolder.supportsCapability(FolderCapabilities.CAN_ACCEPT_MOVED_MESSAGES)
                 && !mFolder.isProviderFolder();
+        final boolean showMoveTo = mFolder != null
+                && mFolder.supportsCapability(FolderCapabilities.ALLOWS_REMOVE_CONVERSATION);
         removeFolder.setVisible(showRemoveFolder);
+        moveTo.setVisible(showMoveTo);
         if (mFolder != null && showRemoveFolder) {
             removeFolder.setTitle(mActivity.getActivityContext().getString(R.string.remove_folder,
                     mFolder.name));