From ad2a6d7a9bf5f7a2c5dd1effa51ecc93b34e7766 Mon Sep 17 00:00:00 2001
From: cketti
Date: Tue, 29 Jan 2013 01:19:53 +0100
Subject: [PATCH] Add message view menu items to MessageList
---
res/menu/message_list_option.xml | 108 +++++++++-
src/com/fsck/k9/activity/MessageList.java | 181 +++++++++++++++--
src/com/fsck/k9/activity/MessageView.java | 26 +--
.../fsck/k9/fragment/MessageListFragment.java | 8 +
.../fsck/k9/fragment/MessageViewFragment.java | 186 ++++--------------
5 files changed, 318 insertions(+), 191 deletions(-)
diff --git a/res/menu/message_list_option.xml b/res/menu/message_list_option.xml
index 18bdd61c1..ebbbff1c4 100644
--- a/res/menu/message_list_option.xml
+++ b/res/menu/message_list_option.xml
@@ -1,28 +1,106 @@
+ *
+ * @param menu
+ * The {@link Menu} instance that should be modified. May be {@code null}; in that case
+ * the method does nothing and immediately returns.
+ */
private void configureMenu(Menu menu) {
if (menu == null) {
return;
}
+ // Set visibility of account/folder settings menu items
+ if (mMessageListFragment == null) {
+ menu.findItem(R.id.account_settings).setVisible(false);
+ menu.findItem(R.id.folder_settings).setVisible(false);
+ } else {
+ menu.findItem(R.id.account_settings).setVisible(
+ mMessageListFragment.isSingleAccountMode());
+ menu.findItem(R.id.folder_settings).setVisible(
+ mMessageListFragment.isSingleFolderMode());
+ }
+
+ /*
+ * Set visibility of menu items related to the message view
+ */
+
+ if (mMessageViewFragment == null) {
+ menu.findItem(R.id.delete).setVisible(false);
+ menu.findItem(R.id.single_message_options).setVisible(false);
+ menu.findItem(R.id.archive).setVisible(false);
+ menu.findItem(R.id.spam).setVisible(false);
+ menu.findItem(R.id.move).setVisible(false);
+ menu.findItem(R.id.copy).setVisible(false);
+ menu.findItem(R.id.toggle_unread).setVisible(false);
+ menu.findItem(R.id.select_text).setVisible(false);
+ menu.findItem(R.id.toggle_message_view_theme).setVisible(false);
+ } else {
+ // Set title of menu item to switch to dark/light theme
+ MenuItem toggleTheme = menu.findItem(R.id.toggle_message_view_theme);
+ if (K9.getK9MessageViewTheme() == K9.THEME_DARK) {
+ toggleTheme.setTitle(R.string.message_view_theme_action_light);
+ } else {
+ toggleTheme.setTitle(R.string.message_view_theme_action_dark);
+ }
+ toggleTheme.setVisible(true);
+
+ // Set title of menu item to toggle the read state of the currently displayed message
+ if (mMessageViewFragment.isMessageRead()) {
+ menu.findItem(R.id.toggle_unread).setTitle(R.string.mark_as_unread_action);
+ } else {
+ menu.findItem(R.id.toggle_unread).setTitle(R.string.mark_as_read_action);
+ }
+
+ menu.findItem(R.id.copy).setVisible(mMessageViewFragment.isCopyCapable());
+
+ if (mMessageViewFragment.isMoveCapable()) {
+ menu.findItem(R.id.move).setVisible(true);
+ menu.findItem(R.id.archive).setVisible(mMessageViewFragment.canMessageBeArchived());
+ menu.findItem(R.id.spam).setVisible(mMessageViewFragment.canMessageBeMovedToSpam());
+ } else {
+ menu.findItem(R.id.move).setVisible(false);
+ menu.findItem(R.id.archive).setVisible(false);
+ menu.findItem(R.id.spam).setVisible(false);
+ }
+ }
+
+
+ /*
+ * Set visibility of menu items related to the message list
+ */
+
+ // Hide both search menu items by default and enable one when appropriate
menu.findItem(R.id.search).setVisible(false);
menu.findItem(R.id.search_remote).setVisible(false);
- if (mMessageListFragment == null) {
- // Hide everything (except "compose") if no MessageListFragment instance is available
+ if (mDisplayMode == DisplayMode.MESSAGE_VIEW || mMessageListFragment == null) {
menu.findItem(R.id.check_mail).setVisible(false);
menu.findItem(R.id.set_sort).setVisible(false);
menu.findItem(R.id.select_all).setVisible(false);
menu.findItem(R.id.send_messages).setVisible(false);
menu.findItem(R.id.expunge).setVisible(false);
- menu.findItem(R.id.settings).setVisible(false);
} else {
menu.findItem(R.id.set_sort).setVisible(true);
menu.findItem(R.id.select_all).setVisible(true);
- menu.findItem(R.id.settings).setVisible(true);
- if (!mSingleAccountMode) {
+ if (!mMessageListFragment.isSingleAccountMode()) {
menu.findItem(R.id.expunge).setVisible(false);
menu.findItem(R.id.check_mail).setVisible(false);
menu.findItem(R.id.send_messages).setVisible(false);
- menu.findItem(R.id.folder_settings).setVisible(false);
- menu.findItem(R.id.account_settings).setVisible(false);
} else {
- menu.findItem(R.id.folder_settings).setVisible(mSingleFolderMode);
- menu.findItem(R.id.account_settings).setVisible(true);
-
- if (mMessageListFragment.isOutbox()) {
- menu.findItem(R.id.send_messages).setVisible(true);
- } else {
- menu.findItem(R.id.send_messages).setVisible(false);
- }
+ menu.findItem(R.id.send_messages).setVisible(mMessageListFragment.isOutbox());
if (mMessageListFragment.isRemoteFolder()) {
menu.findItem(R.id.check_mail).setVisible(true);
- menu.findItem(R.id.expunge).setVisible(mMessageListFragment.isAccountExpungeCapable());
+ menu.findItem(R.id.expunge).setVisible(
+ mMessageListFragment.isAccountExpungeCapable());
} else {
menu.findItem(R.id.check_mail).setVisible(false);
menu.findItem(R.id.expunge).setVisible(false);
}
}
- // If this is an explicit local search, show the option to search the cloud.
+ // If this is an explicit local search, show the option to search on the server
if (!mMessageListFragment.isRemoteSearch() &&
mMessageListFragment.isRemoteSearchAllowed()) {
menu.findItem(R.id.search_remote).setVisible(true);
@@ -993,8 +1106,7 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme
}
}
- @Override
- public void restartActivity() {
+ private void restartActivity() {
// restart the current activity, so that the theme change can be applied
if (Build.VERSION.SDK_INT < 11) {
Intent intent = getIntent();
@@ -1069,4 +1181,35 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme
mMessageListContainer.setVisibility(View.GONE);
mMessageViewContainer.setVisibility(View.VISIBLE);
}
+
+ @Override
+ public void updateMenu() {
+ configureMenu(mMenu);
+ }
+
+ @Override
+ public void disableDeleteAction() {
+ mMenu.findItem(R.id.delete).setEnabled(false);
+ }
+
+ private void onToggleTheme() {
+ if (K9.getK9MessageViewTheme() == K9.THEME_DARK) {
+ K9.setK9MessageViewTheme(K9.THEME_LIGHT);
+ } else {
+ K9.setK9MessageViewTheme(K9.THEME_DARK);
+ }
+
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ Context appContext = getApplicationContext();
+ Preferences prefs = Preferences.getPreferences(appContext);
+ Editor editor = prefs.getPreferences().edit();
+ K9.save(editor);
+ editor.commit();
+ }
+ }).start();
+
+ restartActivity();
+ }
}
diff --git a/src/com/fsck/k9/activity/MessageView.java b/src/com/fsck/k9/activity/MessageView.java
index 469286162..ecb339751 100644
--- a/src/com/fsck/k9/activity/MessageView.java
+++ b/src/com/fsck/k9/activity/MessageView.java
@@ -539,22 +539,6 @@ public class MessageView extends K9FragmentActivity implements MessageViewFragme
public void onMount(String providerId) { /* no-op */ }
}
-
- @Override
- public void restartActivity() {
- // restart the current activity, so that the theme change can be applied
- if (Build.VERSION.SDK_INT < 11) {
- Intent intent = getIntent();
- intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
- finish();
- overridePendingTransition(0, 0); // disable animations to speed up the switch
- startActivity(intent);
- overridePendingTransition(0, 0);
- } else {
- recreate();
- }
- }
-
@Override
public void displayMessageSubject(String subject) {
setTitle(subject);
@@ -577,4 +561,14 @@ public class MessageView extends K9FragmentActivity implements MessageViewFragme
MessageCompose.actionForward(this, mAccount, mMessage, mPgpData.getDecryptedData());
finish();
}
+
+ @Override
+ public void updateMenu() {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ public void disableDeleteAction() {
+ // TODO Auto-generated method stub
+ }
}
diff --git a/src/com/fsck/k9/fragment/MessageListFragment.java b/src/com/fsck/k9/fragment/MessageListFragment.java
index 43b9931d9..9bb64a3a8 100644
--- a/src/com/fsck/k9/fragment/MessageListFragment.java
+++ b/src/com/fsck/k9/fragment/MessageListFragment.java
@@ -3245,4 +3245,12 @@ public class MessageListFragment extends SherlockFragment implements OnItemClick
mAdapter.notifyDataSetChanged();
}
}
+
+ public boolean isSingleAccountMode() {
+ return mSingleAccountMode;
+ }
+
+ public boolean isSingleFolderMode() {
+ return mSingleFolderMode;
+ }
}
diff --git a/src/com/fsck/k9/fragment/MessageViewFragment.java b/src/com/fsck/k9/fragment/MessageViewFragment.java
index 4d02dd07e..caf5a62db 100644
--- a/src/com/fsck/k9/fragment/MessageViewFragment.java
+++ b/src/com/fsck/k9/fragment/MessageViewFragment.java
@@ -6,9 +6,7 @@ import java.util.Collections;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
-import android.content.SharedPreferences.Editor;
import android.net.Uri;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.DialogFragment;
@@ -22,9 +20,6 @@ import android.view.ViewGroup;
import android.widget.Toast;
import com.actionbarsherlock.app.SherlockFragment;
-import com.actionbarsherlock.view.Menu;
-import com.actionbarsherlock.view.MenuInflater;
-import com.actionbarsherlock.view.MenuItem;
import com.fsck.k9.Account;
import com.fsck.k9.K9;
import com.fsck.k9.Preferences;
@@ -75,7 +70,6 @@ public class MessageViewFragment extends SherlockFragment implements OnClickList
private SingleMessageView mMessageView;
private PgpData mPgpData;
- private Menu mMenu;
private Account mAccount;
private MessageReference mMessageReference;
private Message mMessage;
@@ -83,8 +77,6 @@ public class MessageViewFragment extends SherlockFragment implements OnClickList
private Listener mListener = new Listener();
private MessageViewHandler mHandler = new MessageViewHandler();
- private MenuItem mToggleMessageViewMenu;
-
/** this variable is used to save the calling AttachmentView
* until the onActivityResult is called.
* => with this reference we can identity the caller
@@ -254,7 +246,8 @@ public class MessageViewFragment extends SherlockFragment implements OnClickList
mMessageView.resetHeaderView();
mController.loadMessageForView(mAccount, mMessageReference.folderName, mMessageReference.uid, mListener);
- configureMenu(mMenu);
+
+ mFragmentListener.updateMenu();
}
/**
@@ -272,7 +265,7 @@ public class MessageViewFragment extends SherlockFragment implements OnClickList
if (mMessage != null) {
// Disable the delete button after it's tapped (to try to prevent
// accidental clicks)
- mMenu.findItem(R.id.delete).setEnabled(false);
+ mFragmentListener.disableDeleteAction();
Message messageToDelete = mMessage;
mFragmentListener.showNextMessageOrReturn();
mController.deleteMessages(Collections.singletonList(messageToDelete), null);
@@ -368,26 +361,12 @@ public class MessageViewFragment extends SherlockFragment implements OnClickList
onRefile(mAccount.getArchiveFolderName());
}
- private void onToggleColors() {
- if (K9.getK9MessageViewTheme() == K9.THEME_DARK) {
- K9.setK9MessageViewTheme(K9.THEME_LIGHT);
- } else {
- K9.setK9MessageViewTheme(K9.THEME_DARK);
- }
+ public void onSpam() {
+ onRefile(mAccount.getSpamFolderName());
+ }
- new AsyncTask