From 1f5ca9eeaa6cd90ffc8c76e31c5e058832091bf1 Mon Sep 17 00:00:00 2001 From: cketti Date: Sat, 2 Feb 2013 02:35:48 +0100 Subject: [PATCH] Don't use MessageViewFragment before it's initialized The previous code worked fine on Android 4.2. But the lifecycle on older Android versions (tested with 2.2) seems to be slightly different. This should fix the problem. --- src/com/fsck/k9/activity/MessageList.java | 2 +- src/com/fsck/k9/fragment/MessageViewFragment.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/com/fsck/k9/activity/MessageList.java b/src/com/fsck/k9/activity/MessageList.java index 8924313e3..7dc1a15e4 100644 --- a/src/com/fsck/k9/activity/MessageList.java +++ b/src/com/fsck/k9/activity/MessageList.java @@ -889,7 +889,7 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme * Set visibility of menu items related to the message view */ - if (mMessageViewFragment == null) { + if (mMessageViewFragment == null || !mMessageViewFragment.isInitialized()) { menu.findItem(R.id.delete).setVisible(false); menu.findItem(R.id.single_message_options).setVisible(false); menu.findItem(R.id.archive).setVisible(false); diff --git a/src/com/fsck/k9/fragment/MessageViewFragment.java b/src/com/fsck/k9/fragment/MessageViewFragment.java index 524d40501..151d445a4 100644 --- a/src/com/fsck/k9/fragment/MessageViewFragment.java +++ b/src/com/fsck/k9/fragment/MessageViewFragment.java @@ -91,6 +91,13 @@ public class MessageViewFragment extends SherlockFragment implements OnClickList private MessageViewFragmentListener mFragmentListener; + /** + * {@code true} after {@link #onCreate(Bundle)} has been executed. This is used by + * {@code MessageList.configureMenu()} to make sure the fragment has been initialized before + * it is used. + */ + private boolean mInitialized = false; + class MessageViewHandler extends Handler { @@ -153,6 +160,7 @@ public class MessageViewFragment extends SherlockFragment implements OnClickList setHasOptionsMenu(true); mController = MessagingController.getInstance(getActivity().getApplication()); + mInitialized = true; } @Override @@ -808,4 +816,8 @@ public class MessageViewFragment extends SherlockFragment implements OnClickList public void messageHeaderViewAvailable(MessageHeader messageHeaderView); public void updateMenu(); } + + public boolean isInitialized() { + return mInitialized ; + } }