From 08f068c9cef4370c8ca6e21d5e7d3aaca1f22f25 Mon Sep 17 00:00:00 2001 From: Ben Komalo Date: Thu, 14 Jul 2011 17:23:21 -0700 Subject: [PATCH] Update message header actions for phones. - This creates a "more" icon in portrait and shows all three actions (reply/replyall/forward) in landscape. - also makes the star visible by default (hiding it in EML view) Change-Id: Iefff7c0717cfda4dc91218b0d490775294c96103 --- .../message_view_header_actions.xml | 49 +++++++++++++++ res/layout-sw600dp/message_view_fragment.xml | 1 - res/layout/message_view_fragment.xml | 20 +------ res/layout/message_view_header_actions.xml | 47 +++++++++++++++ res/menu/message_header_overflow_menu.xml | 27 +++++++++ res/values/colors.xml | 1 + .../activity/MessageFileViewFragment.java | 25 ++++++-- .../email/activity/MessageViewFragment.java | 60 ++++++++++++++----- 8 files changed, 192 insertions(+), 38 deletions(-) create mode 100644 res/layout-land/message_view_header_actions.xml create mode 100644 res/layout/message_view_header_actions.xml create mode 100644 res/menu/message_header_overflow_menu.xml diff --git a/res/layout-land/message_view_header_actions.xml b/res/layout-land/message_view_header_actions.xml new file mode 100644 index 000000000..df668e734 --- /dev/null +++ b/res/layout-land/message_view_header_actions.xml @@ -0,0 +1,49 @@ + + + + + + + + + diff --git a/res/layout-sw600dp/message_view_fragment.xml b/res/layout-sw600dp/message_view_fragment.xml index 99c03a618..9162a9365 100644 --- a/res/layout-sw600dp/message_view_fragment.xml +++ b/res/layout-sw600dp/message_view_fragment.xml @@ -117,7 +117,6 @@ android:id="@+id/favorite" android:layout_marginRight="16dip" android:src="@drawable/btn_star_off_normal_email_holo_light" - android:visibility="gone" style="@style/message_view_action_buttons" /> diff --git a/res/layout/message_view_fragment.xml b/res/layout/message_view_fragment.xml index d9770fa45..b99aa572d 100644 --- a/res/layout/message_view_fragment.xml +++ b/res/layout/message_view_fragment.xml @@ -62,7 +62,7 @@ android:layout_width="match_parent" android:layout_height="48dip" android:baselineAligned="true" - android:background="#3cb8e6" + android:background="@color/message_view_header_color" android:gravity="center_vertical" > - - - + diff --git a/res/layout/message_view_header_actions.xml b/res/layout/message_view_header_actions.xml new file mode 100644 index 000000000..e95d43a95 --- /dev/null +++ b/res/layout/message_view_header_actions.xml @@ -0,0 +1,47 @@ + + + + + + + + + diff --git a/res/menu/message_header_overflow_menu.xml b/res/menu/message_header_overflow_menu.xml new file mode 100644 index 000000000..71a19727f --- /dev/null +++ b/res/menu/message_header_overflow_menu.xml @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/res/values/colors.xml b/res/values/colors.xml index 0faf47183..9df6d4e51 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -60,6 +60,7 @@ #ff666666 #deecfa + #3cb8e6 #ffff66 diff --git a/src/com/android/email/activity/MessageFileViewFragment.java b/src/com/android/email/activity/MessageFileViewFragment.java index 5df57611d..a017b182e 100644 --- a/src/com/android/email/activity/MessageFileViewFragment.java +++ b/src/com/android/email/activity/MessageFileViewFragment.java @@ -16,17 +16,20 @@ package com.android.email.activity; +import android.app.Activity; +import android.net.Uri; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + import com.android.email.Email; import com.android.email.R; import com.android.emailcommon.Logging; import com.android.emailcommon.provider.EmailContent.Message; import com.android.emailcommon.utility.Utility; -import android.app.Activity; -import android.net.Uri; -import android.os.Bundle; -import android.util.Log; - /** * A {@link MessageViewFragmentBase} subclass for file based messages. (aka EML files) */ @@ -48,6 +51,18 @@ public class MessageFileViewFragment extends MessageViewFragmentBase { sFragmentCount++; } + @Override + public View onCreateView( + LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View result = super.onCreateView(inflater, container, savedInstanceState); + + // Star is not visible in this view. + UiUtilities.getView(result, R.id.favorite).setVisibility(View.GONE); + + return result; + } + + @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); diff --git a/src/com/android/email/activity/MessageViewFragment.java b/src/com/android/email/activity/MessageViewFragment.java index 40ca1cf28..5e8706331 100644 --- a/src/com/android/email/activity/MessageViewFragment.java +++ b/src/com/android/email/activity/MessageViewFragment.java @@ -16,16 +16,6 @@ package com.android.email.activity; -import com.android.email.Email; -import com.android.email.R; -import com.android.emailcommon.mail.MeetingInfo; -import com.android.emailcommon.mail.PackedString; -import com.android.emailcommon.provider.Account; -import com.android.emailcommon.provider.EmailContent.Message; -import com.android.emailcommon.provider.Mailbox; -import com.android.emailcommon.service.EmailServiceConstants; -import com.android.emailcommon.utility.Utility; - import android.app.Activity; import android.content.res.Resources; import android.graphics.drawable.Drawable; @@ -39,13 +29,26 @@ import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ImageView; +import android.widget.PopupMenu; +import android.widget.PopupMenu.OnMenuItemClickListener; + +import com.android.email.Email; +import com.android.email.R; +import com.android.emailcommon.mail.MeetingInfo; +import com.android.emailcommon.mail.PackedString; +import com.android.emailcommon.provider.EmailContent.Message; +import com.android.emailcommon.provider.Mailbox; +import com.android.emailcommon.service.EmailServiceConstants; +import com.android.emailcommon.utility.Utility; /** * A {@link MessageViewFragmentBase} subclass for regular email messages. (regular as in "not eml * files"). */ public class MessageViewFragment extends MessageViewFragmentBase - implements CheckBox.OnCheckedChangeListener, MoveMessageToDialog.Callback { + implements CheckBox.OnCheckedChangeListener, + MoveMessageToDialog.Callback, + OnMenuItemClickListener { /** Argument name(s) */ private static final String ARG_MESSAGE_ID = "messageId"; @@ -59,6 +62,9 @@ public class MessageViewFragment extends MessageViewFragmentBase /* Nullable - not available on phone. */ private View mForwardButton; + + private View mMoreButton; + // calendar meeting invite answers private CheckBox mMeetingYes; private CheckBox mMeetingMaybe; @@ -188,14 +194,14 @@ public class MessageViewFragment extends MessageViewFragmentBase mMeetingMaybe = (CheckBox) UiUtilities.getView(view, R.id.maybe); mMeetingNo = (CheckBox) UiUtilities.getView(view, R.id.decline); - // Star is only visible on this fragment (as opposed to MessageFileViewFragment.) - UiUtilities.getView(view, R.id.favorite).setVisibility(View.VISIBLE); - mFavoriteIcon.setOnClickListener(this); mReplyButton.setOnClickListener(this); if (mReplyAllButton != null) { mReplyAllButton.setOnClickListener(this); mForwardButton.setOnClickListener(this); + } else { + mMoreButton = UiUtilities.getView(view, R.id.more); + mMoreButton.setOnClickListener(this); } mMeetingYes.setOnCheckedChangeListener(this); mMeetingMaybe.setOnCheckedChangeListener(this); @@ -333,10 +339,36 @@ public class MessageViewFragment extends MessageViewFragmentBase case R.id.invite_link: onInviteLinkClicked(); return; + + case R.id.more: { + PopupMenu popup = new PopupMenu(getActivity(), mMoreButton); + popup.getMenuInflater().inflate(R.menu.message_header_overflow_menu, + popup.getMenu()); + popup.setOnMenuItemClickListener(this); + popup.show(); + break; + } + } super.onClick(view); } + @Override + public boolean onMenuItemClick(MenuItem item) { + if (isMessageOpen()) { + switch (item.getItemId()) { + case R.id.reply_all: + mCallback.onReplyAll(); + return true; + case R.id.forward: + mCallback.onForward(); + return true; + } + } + return false; + } + + @Override public void onCheckedChanged(CompoundButton view, boolean isChecked) { if (!isChecked) return;