Merge "Store the "Show pictures" state on rotation" into jb-ub-mail
diff --git a/src/com/android/mail/browse/ConversationViewAdapter.java b/src/com/android/mail/browse/ConversationViewAdapter.java
index be2ea91..c48a82d 100644
--- a/src/com/android/mail/browse/ConversationViewAdapter.java
+++ b/src/com/android/mail/browse/ConversationViewAdapter.java
@@ -123,15 +123,17 @@
// view state variables
private boolean mExpanded;
public boolean detailsExpanded;
+ private boolean mShowImages;
// cached values to speed up re-rendering during view recycling
public CharSequence timestampShort;
public CharSequence timestampLong;
public CharSequence recipientSummaryText;
- MessageHeaderItem(ConversationMessage message, boolean expanded) {
+ MessageHeaderItem(ConversationMessage message, boolean expanded, boolean showImages) {
mMessage = message;
mExpanded = expanded;
+ mShowImages = showImages;
detailsExpanded = false;
}
@@ -182,6 +184,14 @@
}
}
+ public boolean getShowImages() {
+ return mShowImages;
+ }
+
+ public void setShowImages(boolean showImages) {
+ mShowImages = showImages;
+ }
+
@Override
public boolean canBecomeSnapHeader() {
return isExpanded();
@@ -387,16 +397,17 @@
return addItem(new ConversationHeaderItem(conv));
}
- public int addMessageHeader(ConversationMessage msg, boolean expanded) {
- return addItem(new MessageHeaderItem(msg, expanded));
+ public int addMessageHeader(ConversationMessage msg, boolean expanded, boolean showImages) {
+ return addItem(new MessageHeaderItem(msg, expanded, showImages));
}
public int addMessageFooter(MessageHeaderItem headerItem) {
return addItem(new MessageFooterItem(headerItem));
}
- public MessageHeaderItem newMessageHeaderItem(ConversationMessage message, boolean expanded) {
- return new MessageHeaderItem(message, expanded);
+ public MessageHeaderItem newMessageHeaderItem(ConversationMessage message, boolean expanded,
+ boolean showImages) {
+ return new MessageHeaderItem(message, expanded, showImages);
}
public MessageFooterItem newMessageFooterItem(MessageHeaderItem headerItem) {
diff --git a/src/com/android/mail/browse/MessageHeaderView.java b/src/com/android/mail/browse/MessageHeaderView.java
index b842ad4..79fb2a9 100644
--- a/src/com/android/mail/browse/MessageHeaderView.java
+++ b/src/com/android/mail/browse/MessageHeaderView.java
@@ -561,6 +561,13 @@
}
}
+ private void setShowImages(final boolean showImages) {
+ // use View's 'show images' flag to store whether we are currently displaying images
+ if (mMessageHeaderItem != null) {
+ mMessageHeaderItem.setShowImages(showImages);
+ }
+ }
+
/**
* Update the visibility of the many child views based on expanded/collapsed
* and draft/normal state.
@@ -957,7 +964,11 @@
showSpamWarning();
}
if (mShowImagePrompt) {
- showImagePrompt();
+ if (mMessageHeaderItem.getShowImages()) {
+ showImagePromptAlways(true);
+ } else {
+ showImagePromptOnce();
+ }
} else {
hideShowImagePrompt();
}
@@ -1010,7 +1021,7 @@
}
}
- private void showImagePrompt() {
+ private void showImagePromptOnce() {
if (mImagePromptView == null) {
ViewGroup v = (ViewGroup) mInflater.inflate(R.layout.conversation_message_show_pics,
this, false);
@@ -1023,6 +1034,33 @@
mImagePromptView.setVisibility(VISIBLE);
}
+ /**
+ * Shows the "Always show pictures" message
+ *
+ * @param initialShowing <code>true</code> if this is the first time we are showing the prompt
+ * for "show images", <code>false</code> if we are transitioning from "Show pictures"
+ */
+ private void showImagePromptAlways(final boolean initialShowing) {
+ if (initialShowing) {
+ // Initialize the view
+ showImagePromptOnce();
+ }
+
+ ImageView descriptionViewIcon =
+ (ImageView) mImagePromptView.findViewById(R.id.show_pictures_icon);
+ descriptionViewIcon.setContentDescription(
+ getResources().getString(R.string.always_show_images));
+ TextView descriptionView =
+ (TextView) mImagePromptView.findViewById(R.id.show_pictures_text);
+ descriptionView.setText(R.string.always_show_images);
+ mImagePromptView.setTag(SHOW_IMAGE_PROMPT_ALWAYS);
+
+ if (!initialShowing) {
+ // the new text's line count may differ, so update the spacer height
+ updateSpacerHeight();
+ }
+ }
+
private void hideSpamWarning() {
if (mSpamWarningView != null) {
mSpamWarningView.setVisibility(GONE);
@@ -1049,14 +1087,7 @@
if (mCallbacks != null) {
mCallbacks.showExternalResources(mMessage);
}
- ImageView descriptionViewIcon = (ImageView) v.findViewById(R.id.show_pictures_icon);
- descriptionViewIcon.setContentDescription(getResources().getString(
- R.string.always_show_images));
- TextView descriptionView = (TextView) v.findViewById(R.id.show_pictures_text);
- descriptionView.setText(R.string.always_show_images);
- v.setTag(SHOW_IMAGE_PROMPT_ALWAYS);
- // the new text's line count may differ, so update the spacer height
- updateSpacerHeight();
+ showImagePromptAlways(false);
break;
case SHOW_IMAGE_PROMPT_ALWAYS:
mMessage.markAlwaysShowImages(getQueryHandler(), 0 /* token */, null /* cookie */);
diff --git a/src/com/android/mail/browse/SecureConversationViewFragment.java b/src/com/android/mail/browse/SecureConversationViewFragment.java
index 7f70ba6..5c765d7 100644
--- a/src/com/android/mail/browse/SecureConversationViewFragment.java
+++ b/src/com/android/mail/browse/SecureConversationViewFragment.java
@@ -228,7 +228,8 @@
mWebView.loadDataWithBaseURL(mBaseUri, convHtml.toString(), "text/html", "utf-8", null);
ConversationViewAdapter mAdapter = new ConversationViewAdapter(mActivity, null, null,
null, null, null, null, null, null);
- MessageHeaderItem item = mAdapter.newMessageHeaderItem(mMessage, true);
+ MessageHeaderItem item = mAdapter.newMessageHeaderItem(mMessage, true,
+ mMessage.alwaysShowImages);
mMessageHeaderView.initialize(mDateBuilder, this, mAddressCache);
mMessageHeaderView.setExpandMode(MessageHeaderView.POPUP_MODE);
mMessageHeaderView.bind(item, false);
diff --git a/src/com/android/mail/ui/ConversationViewFragment.java b/src/com/android/mail/ui/ConversationViewFragment.java
index 6fb683f..2f90339 100644
--- a/src/com/android/mail/ui/ConversationViewFragment.java
+++ b/src/com/android/mail/ui/ConversationViewFragment.java
@@ -606,8 +606,8 @@
while (messageCursor.moveToPosition(++pos)) {
final ConversationMessage msg = messageCursor.getMessage();
- // TODO: save/restore 'show pics' state
- final boolean safeForImages = msg.alwaysShowImages /* || savedStateSaysSafe */;
+ final boolean safeForImages =
+ msg.alwaysShowImages || prevState.getShouldShowImages(msg);
allowNetworkImages |= safeForImages;
final Integer savedExpanded = prevState.getExpansionState(msg);
@@ -625,6 +625,7 @@
expandedState = (!msg.read || msg.starred || messageCursor.isLast()) ?
ExpansionState.EXPANDED : ExpansionState.SUPER_COLLAPSED;
}
+ mViewState.setShouldShowImages(msg, prevState.getShouldShowImages(msg));
mViewState.setExpansionState(msg, expandedState);
// save off "read" state from the cursor
@@ -682,7 +683,8 @@
private void renderMessage(ConversationMessage msg, boolean expanded,
boolean safeForImages) {
- final int headerPos = mAdapter.addMessageHeader(msg, expanded);
+ final int headerPos = mAdapter.addMessageHeader(msg, expanded,
+ mViewState.getShouldShowImages(msg));
final MessageHeaderItem headerItem = (MessageHeaderItem) mAdapter.getItem(headerPos);
final int footerPos = mAdapter.addMessageFooter(headerItem);
@@ -710,7 +712,7 @@
cursor.moveToPosition(i);
final ConversationMessage msg = cursor.getMessage();
final MessageHeaderItem header = mAdapter.newMessageHeaderItem(msg,
- false /* expanded */);
+ false /* expanded */, mViewState.getShouldShowImages(msg));
final MessageFooterItem footer = mAdapter.newMessageFooterItem(header);
final int headerPx = measureOverlayHeight(header);
@@ -812,6 +814,7 @@
@Override
public void showExternalResources(Message msg) {
+ mViewState.setShouldShowImages(msg, true);
mWebView.getSettings().setBlockNetworkImage(false);
mWebView.loadUrl("javascript:unblockImages('" + mTemplates.getMessageDomId(msg) + "');");
}
diff --git a/src/com/android/mail/ui/ConversationViewState.java b/src/com/android/mail/ui/ConversationViewState.java
index b6cc288..76dcbdc 100644
--- a/src/com/android/mail/ui/ConversationViewState.java
+++ b/src/com/android/mail/ui/ConversationViewState.java
@@ -81,6 +81,20 @@
mMessageViewStates.put(m.uri, mvs);
}
+ public boolean getShouldShowImages(Message m) {
+ final MessageViewState mvs = mMessageViewStates.get(m.uri);
+ return (mvs != null && mvs.showImages);
+ }
+
+ public void setShouldShowImages(Message m, boolean showImages) {
+ MessageViewState mvs = mMessageViewStates.get(m.uri);
+ if (mvs == null) {
+ mvs = new MessageViewState();
+ }
+ mvs.showImages = showImages;
+ mMessageViewStates.put(m.uri, mvs);
+ }
+
/**
* Returns the expansion state of a message in a conversation view.
*
@@ -180,6 +194,7 @@
*
*/
public Integer expansionState;
+ public boolean showImages;
public MessageViewState() {}
@@ -192,12 +207,14 @@
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(read ? 1 : 0);
dest.writeInt(expansionState == null ? -1 : expansionState.intValue());
+ dest.writeInt(showImages ? 1 : 0);
}
private MessageViewState(Parcel source) {
read = (source.readInt() != 0);
final int expandedVal = source.readInt();
expansionState = (expandedVal == -1) ? null : expandedVal;
+ showImages = (source.readInt() != 0);
}
@SuppressWarnings("hiding")