From a730e675144755b0efaea4fdd8a4b2c3b63c6cb4 Mon Sep 17 00:00:00 2001 From: Sander Bogaert Date: Fri, 20 Jul 2012 13:30:23 -0400 Subject: [PATCH] Have a dynamic context actionbar filled with options that are supported by the current selection of mails. Also works for unified inbox. --- src/com/fsck/k9/activity/MessageList.java | 56 ++++++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) 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();