diff --git a/src/com/fsck/k9/activity/MessageList.java b/src/com/fsck/k9/activity/MessageList.java index da75e5b11..62907dbf0 100644 --- a/src/com/fsck/k9/activity/MessageList.java +++ b/src/com/fsck/k9/activity/MessageList.java @@ -2336,6 +2336,11 @@ public class MessageList extends K9ListActivity implements } mAdapter.notifyDataSetChanged(); mActionMode.setTitle(mSelectedCount+" "+getString(R.string.actionbar_selected)); + + if (mQueryString != null) { + // we might have to disable some options + mActionMode.invalidate(); + } } /** @@ -2678,8 +2683,28 @@ public class MessageList extends K9ListActivity implements @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - // TODO Auto-generated method stub - return false; + if (mQueryString != null) { + // show all + menu.findItem(R.id.move).setVisible(true); + menu.findItem(R.id.archive).setVisible(true); + menu.findItem(R.id.spam).setVisible(true); + menu.findItem(R.id.copy).setVisible(true); + + // hide uncapable + /* + * TODO think of a better way then looping over all + * messages. + */ + final List selection = getSelectionFromCheckboxes(); + Account account; + + for (MessageInfoHolder holder : selection) { + account = holder.message.getFolder().getAccount(); + setContextCapabilities(account, menu); + } + + } + return true; } @Override @@ -2692,9 +2717,36 @@ public class MessageList extends K9ListActivity implements public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.message_list_context, menu); + + // check capabilities + if (mQueryString == null) { + setContextCapabilities(mAccount, menu); + } + return true; } + private void setContextCapabilities(Account mAccount, Menu menu) { + // hide unsupported + if (!mController.isCopyCapable(mAccount)) { + menu.findItem(R.id.copy).setVisible(false); + } + + if (!mController.isMoveCapable(mAccount)) { + menu.findItem(R.id.move).setVisible(false); + menu.findItem(R.id.archive).setVisible(false); + menu.findItem(R.id.spam).setVisible(false); + } + + if (!mAccount.hasArchiveFolder()) { + menu.findItem(R.id.archive).setVisible(false); + } + + if (!mAccount.hasSpamFolder()) { + menu.findItem(R.id.spam).setVisible(false); + } + } + @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { final List selection = getSelectionFromCheckboxes();