mirror of
https://github.com/moparisthebest/k-9
synced 2024-11-24 02:12:15 -05:00
Fix copy/move when not in 'single folder mode'
This commit is contained in:
parent
65a5a73737
commit
7a1e52de48
@ -1199,8 +1199,9 @@ public class MessageListFragment extends SherlockFragment implements OnItemClick
|
||||
|
||||
mActiveMessages = null; // don't need it any more
|
||||
|
||||
final Account account = messages.get(0).getFolder().getAccount();
|
||||
account.setLastSelectedFolderName(destFolderName);
|
||||
// We currently only support copy/move in 'single account mode', so it's okay to
|
||||
// use mAccount.
|
||||
mAccount.setLastSelectedFolderName(destFolderName);
|
||||
|
||||
switch (requestCode) {
|
||||
case ACTIVITY_CHOOSE_FOLDER_MOVE:
|
||||
@ -2139,10 +2140,16 @@ public class MessageListFragment extends SherlockFragment implements OnItemClick
|
||||
return;
|
||||
}
|
||||
|
||||
final Folder folder = (messages.size() == 1) ?
|
||||
messages.get(0).getFolder() : mCurrentFolder.folder;
|
||||
final Folder folder;
|
||||
if (mIsThreadDisplay) {
|
||||
folder = messages.get(0).getFolder();
|
||||
} else if (mSingleFolderMode) {
|
||||
folder = mCurrentFolder.folder;
|
||||
} else {
|
||||
folder = null;
|
||||
}
|
||||
|
||||
displayFolderChoice(ACTIVITY_CHOOSE_FOLDER_MOVE, folder, messages);
|
||||
displayFolderChoice(ACTIVITY_CHOOSE_FOLDER_MOVE, mAccount, folder, messages);
|
||||
}
|
||||
|
||||
private void onCopy(Message message) {
|
||||
@ -2160,10 +2167,16 @@ public class MessageListFragment extends SherlockFragment implements OnItemClick
|
||||
return;
|
||||
}
|
||||
|
||||
final Folder folder = (messages.size() == 1) ?
|
||||
messages.get(0).getFolder() : mCurrentFolder.folder;
|
||||
final Folder folder;
|
||||
if (mIsThreadDisplay) {
|
||||
folder = messages.get(0).getFolder();
|
||||
} else if (mSingleFolderMode) {
|
||||
folder = mCurrentFolder.folder;
|
||||
} else {
|
||||
folder = null;
|
||||
}
|
||||
|
||||
displayFolderChoice(ACTIVITY_CHOOSE_FOLDER_COPY, folder, messages);
|
||||
displayFolderChoice(ACTIVITY_CHOOSE_FOLDER_COPY, mAccount, folder, messages);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2180,11 +2193,19 @@ public class MessageListFragment extends SherlockFragment implements OnItemClick
|
||||
*
|
||||
* @see #startActivityForResult(Intent, int)
|
||||
*/
|
||||
private void displayFolderChoice(final int requestCode, final Folder folder, final List<Message> messages) {
|
||||
final Intent intent = new Intent(getActivity(), ChooseFolder.class);
|
||||
intent.putExtra(ChooseFolder.EXTRA_ACCOUNT, folder.getAccount().getUuid());
|
||||
private void displayFolderChoice(int requestCode, Account account, Folder folder,
|
||||
List<Message> messages) {
|
||||
|
||||
Intent intent = new Intent(getActivity(), ChooseFolder.class);
|
||||
intent.putExtra(ChooseFolder.EXTRA_ACCOUNT, account.getUuid());
|
||||
intent.putExtra(ChooseFolder.EXTRA_SEL_FOLDER, account.getLastSelectedFolderName());
|
||||
|
||||
if (folder == null) {
|
||||
intent.putExtra(ChooseFolder.EXTRA_SHOW_CURRENT, "yes");
|
||||
} else {
|
||||
intent.putExtra(ChooseFolder.EXTRA_CUR_FOLDER, folder.getName());
|
||||
intent.putExtra(ChooseFolder.EXTRA_SEL_FOLDER, folder.getAccount().getLastSelectedFolderName());
|
||||
}
|
||||
|
||||
// remember the selected messages for #onActivityResult
|
||||
mActiveMessages = messages;
|
||||
startActivityForResult(intent, requestCode);
|
||||
@ -2339,37 +2360,14 @@ public class MessageListFragment extends SherlockFragment implements OnItemClick
|
||||
private void copyOrMove(List<Message> messages, final String destination,
|
||||
final FolderOperation operation) {
|
||||
|
||||
if (K9.FOLDER_NONE.equalsIgnoreCase(destination)) {
|
||||
if (K9.FOLDER_NONE.equalsIgnoreCase(destination) || !mSingleAccountMode) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean first = true;
|
||||
Account account = null;
|
||||
String folderName = null;
|
||||
|
||||
List<Message> outMessages = new ArrayList<Message>();
|
||||
Account account = mAccount;
|
||||
Map<String, List<Message>> folderMap = new HashMap<String, List<Message>>();
|
||||
|
||||
for (Message message : messages) {
|
||||
if (first) {
|
||||
first = false;
|
||||
|
||||
folderName = message.getFolder().getName();
|
||||
account = message.getFolder().getAccount();
|
||||
|
||||
if ((operation == FolderOperation.MOVE && !mController.isMoveCapable(account)) ||
|
||||
(operation == FolderOperation.COPY &&
|
||||
!mController.isCopyCapable(account))) {
|
||||
|
||||
// Account is not copy/move capable
|
||||
return;
|
||||
}
|
||||
} else if (!message.getFolder().getAccount().equals(account) ||
|
||||
!message.getFolder().getName().equals(folderName)) {
|
||||
|
||||
// Make sure all messages come from the same account/folder
|
||||
return;
|
||||
}
|
||||
|
||||
if ((operation == FolderOperation.MOVE && !mController.isMoveCapable(message)) ||
|
||||
(operation == FolderOperation.COPY && !mController.isCopyCapable(message))) {
|
||||
|
||||
@ -2382,9 +2380,24 @@ public class MessageListFragment extends SherlockFragment implements OnItemClick
|
||||
return;
|
||||
}
|
||||
|
||||
String folderName = message.getFolder().getName();
|
||||
if (folderName.equals(destination)) {
|
||||
// Skip messages already in the destination folder
|
||||
continue;
|
||||
}
|
||||
|
||||
List<Message> outMessages = folderMap.get(folderName);
|
||||
if (outMessages == null) {
|
||||
outMessages = new ArrayList<Message>();
|
||||
folderMap.put(folderName, outMessages);
|
||||
}
|
||||
|
||||
outMessages.add(message);
|
||||
}
|
||||
|
||||
for (String folderName : folderMap.keySet()) {
|
||||
List<Message> outMessages = folderMap.get(folderName);
|
||||
|
||||
if (operation == FolderOperation.MOVE) {
|
||||
if (mThreadedList) {
|
||||
mController.moveMessagesInThread(account, folderName, outMessages, destination);
|
||||
@ -2399,6 +2412,7 @@ public class MessageListFragment extends SherlockFragment implements OnItemClick
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class ActionModeCallback implements ActionMode.Callback {
|
||||
|
Loading…
Reference in New Issue
Block a user