Remove Print/Print All from conversation view in Email.
b/12245916 A secondary change in this defect is to dynamically show either Print or Print All in
GMail conversation menus depending on whether the conversation includes 1 or many messages.
Change-Id: If78dced66893c0ae619850f2272c007747e98e26
diff --git a/src/com/android/mail/providers/ConversationInfo.java b/src/com/android/mail/providers/ConversationInfo.java
index c6c66de..03a9597 100644
--- a/src/com/android/mail/providers/ConversationInfo.java
+++ b/src/com/android/mail/providers/ConversationInfo.java
@@ -42,6 +42,7 @@
*/
public ConversationInfo(int count) {
messageInfos = new ArrayList<MessageInfo>(count);
+ messageCount = count;
}
public ConversationInfo(int count, int draft, String first, String firstUnread, String last) {
diff --git a/src/com/android/mail/ui/AbstractConversationViewFragment.java b/src/com/android/mail/ui/AbstractConversationViewFragment.java
index d70305b..51d071c 100644
--- a/src/com/android/mail/ui/AbstractConversationViewFragment.java
+++ b/src/com/android/mail/ui/AbstractConversationViewFragment.java
@@ -58,7 +58,6 @@
import java.util.HashMap;
import java.util.Map;
-
public abstract class AbstractConversationViewFragment extends Fragment implements
ConversationController, ConversationAccountController,
ConversationViewHeaderCallbacks {
@@ -352,7 +351,19 @@
// Only show option if we support message transforms and message has been transformed.
Utils.setMenuItemVisibility(menu, R.id.show_original, supportsMessageTransforms() &&
mHasConversationBeenTransformed && !mHasConversationTransformBeenReverted);
- Utils.setMenuItemVisibility(menu, R.id.print_all, Utils.isRunningKitkatOrLater());
+
+ final MenuItem printMenuItem = menu.findItem(R.id.print_all);
+ if (printMenuItem != null) {
+ // compute the visibility of the print menu item
+ printMenuItem.setVisible(Utils.isRunningKitkatOrLater() && shouldShowPrintInOverflow());
+
+ // compute the text displayed on the print menu item
+ if (mConversation.getNumMessages() == 1) {
+ printMenuItem.setTitle(R.string.print);
+ } else {
+ printMenuItem.setTitle(R.string.print_all);
+ }
+ }
}
abstract boolean supportsMessageTransforms();
@@ -687,6 +698,17 @@
!mHasConversationTransformBeenReverted;
}
+ /**
+ * The Print item in the overflow menu of the Conversation view is shown based on the return
+ * from this method.
+ *
+ * @return {@code true} if the conversation can be printed; {@code false} otherwise.
+ */
+ protected abstract boolean shouldShowPrintInOverflow();
+
+ /**
+ * Prints all messages in the conversation.
+ */
protected abstract void printConversation();
public boolean shouldAlwaysShowImages() {
diff --git a/src/com/android/mail/ui/ConversationViewFragment.java b/src/com/android/mail/ui/ConversationViewFragment.java
index 2b12a61..f018b18 100644
--- a/src/com/android/mail/ui/ConversationViewFragment.java
+++ b/src/com/android/mail/ui/ConversationViewFragment.java
@@ -1605,11 +1605,19 @@
}
@Override
- public void setMessageDetailsExpanded(MessageHeaderItem i, boolean expanded,
- int heightBefore) {
+ public void setMessageDetailsExpanded(MessageHeaderItem i, boolean expanded, int heightBefore) {
mDiff = (expanded ? 1 : -1) * Math.abs(i.getHeight() - heightBefore);
}
+ /**
+ * @return {@code true} because either the Print or Print All menu item is shown in GMail
+ */
+ @Override
+ protected boolean shouldShowPrintInOverflow() {
+ return true;
+ }
+
+ @Override
protected void printConversation() {
PrintUtils.printConversation(mActivity.getActivityContext(), getMessageCursor(),
mAddressCache, mConversation.getBaseUri(mBaseUri), true /* useJavascript */);
diff --git a/src/com/android/mail/ui/SecureConversationViewFragment.java b/src/com/android/mail/ui/SecureConversationViewFragment.java
index 8762b0c..31c1d4c 100644
--- a/src/com/android/mail/ui/SecureConversationViewFragment.java
+++ b/src/com/android/mail/ui/SecureConversationViewFragment.java
@@ -266,6 +266,18 @@
return false;
}
+ /**
+ * Users are expected to use the Print item in the Message overflow menu to print the single
+ * message.
+ *
+ * @return {@code false} because Print and Print All menu items are never shown in EMail.
+ */
+ @Override
+ protected boolean shouldShowPrintInOverflow() {
+ return false;
+ }
+
+ @Override
protected void printConversation() {
mViewController.printMessage();
}