diff options
33 files changed, 172 insertions, 21 deletions
diff --git a/assets/script.js b/assets/script.js index c6695522c..d56a1f374 100644 --- a/assets/script.js +++ b/assets/script.js @@ -660,6 +660,16 @@ function setConversationHeaderSpacerHeight(spacerHeight) { measurePositions(); } +function setConversationFooterSpacerHeight(spacerHeight) { + var spacer = document.getElementById("conversation-footer"); + if (!spacer) { + console.log("can't set spacer for conversation footer"); + return; + } + spacer.style.height = spacerHeight + "px"; + measurePositions(); +} + function setMessageHeaderSpacerHeight(messageDomId, spacerHeight) { var spacer = document.querySelector("#" + messageDomId + " > .mail-message-header"); setSpacerHeight(spacer, spacerHeight); diff --git a/res/drawable-hdpi/ic_draft.png b/res/drawable-hdpi/ic_draft.png Binary files differdeleted file mode 100644 index a0fa5cebf..000000000 --- a/res/drawable-hdpi/ic_draft.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_drafts_wht_24dp.png b/res/drawable-hdpi/ic_drafts_wht_24dp.png Binary files differnew file mode 100644 index 000000000..2d27488a4 --- /dev/null +++ b/res/drawable-hdpi/ic_drafts_wht_24dp.png diff --git a/res/drawable-hdpi/ic_edit_24dp.png b/res/drawable-hdpi/ic_edit_24dp.png Binary files differnew file mode 100644 index 000000000..854bc54da --- /dev/null +++ b/res/drawable-hdpi/ic_edit_24dp.png diff --git a/res/drawable-hdpi/ic_edit_holo_light.png b/res/drawable-hdpi/ic_edit_holo_light.png Binary files differdeleted file mode 100644 index 75141ab78..000000000 --- a/res/drawable-hdpi/ic_edit_holo_light.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_draft.png b/res/drawable-mdpi/ic_draft.png Binary files differdeleted file mode 100644 index 0336fe736..000000000 --- a/res/drawable-mdpi/ic_draft.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_drafts_wht_24dp.png b/res/drawable-mdpi/ic_drafts_wht_24dp.png Binary files differnew file mode 100644 index 000000000..4d54b082f --- /dev/null +++ b/res/drawable-mdpi/ic_drafts_wht_24dp.png diff --git a/res/drawable-mdpi/ic_edit_24dp.png b/res/drawable-mdpi/ic_edit_24dp.png Binary files differnew file mode 100644 index 000000000..315f28685 --- /dev/null +++ b/res/drawable-mdpi/ic_edit_24dp.png diff --git a/res/drawable-mdpi/ic_edit_holo_light.png b/res/drawable-mdpi/ic_edit_holo_light.png Binary files differdeleted file mode 100644 index d344424b0..000000000 --- a/res/drawable-mdpi/ic_edit_holo_light.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_draft.png b/res/drawable-xhdpi/ic_draft.png Binary files differdeleted file mode 100644 index 2ec98990d..000000000 --- a/res/drawable-xhdpi/ic_draft.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_drafts_wht_24dp.png b/res/drawable-xhdpi/ic_drafts_wht_24dp.png Binary files differnew file mode 100644 index 000000000..a06fc2dfa --- /dev/null +++ b/res/drawable-xhdpi/ic_drafts_wht_24dp.png diff --git a/res/drawable-xhdpi/ic_edit_24dp.png b/res/drawable-xhdpi/ic_edit_24dp.png Binary files differnew file mode 100644 index 000000000..da4f769cb --- /dev/null +++ b/res/drawable-xhdpi/ic_edit_24dp.png diff --git a/res/drawable-xhdpi/ic_edit_holo_light.png b/res/drawable-xhdpi/ic_edit_holo_light.png Binary files differdeleted file mode 100644 index 88c7fc9ca..000000000 --- a/res/drawable-xhdpi/ic_edit_holo_light.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_draft.png b/res/drawable-xxhdpi/ic_draft.png Binary files differdeleted file mode 100644 index 576e4347f..000000000 --- a/res/drawable-xxhdpi/ic_draft.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_drafts_wht_24dp.png b/res/drawable-xxhdpi/ic_drafts_wht_24dp.png Binary files differnew file mode 100644 index 000000000..f5addffa8 --- /dev/null +++ b/res/drawable-xxhdpi/ic_drafts_wht_24dp.png diff --git a/res/drawable-xxhdpi/ic_edit_24dp.png b/res/drawable-xxhdpi/ic_edit_24dp.png Binary files differnew file mode 100644 index 000000000..142e8135a --- /dev/null +++ b/res/drawable-xxhdpi/ic_edit_24dp.png diff --git a/res/drawable-xxhdpi/ic_edit_holo_light.png b/res/drawable-xxhdpi/ic_edit_holo_light.png Binary files differdeleted file mode 100644 index 41ccb3ec6..000000000 --- a/res/drawable-xxhdpi/ic_edit_holo_light.png +++ /dev/null diff --git a/res/drawable/draft_background_circle.xml b/res/drawable/draft_background_circle.xml new file mode 100644 index 000000000..92ba6f5ed --- /dev/null +++ b/res/drawable/draft_background_circle.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2014 Google Inc. + Licensed to The Android Open Source Project. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="oval"> + <solid android:color="@color/light_gray" /> +</shape>
\ No newline at end of file diff --git a/res/layout-v19/conversation_message_upper_header_actions_land_or_tablet.xml b/res/layout-v19/conversation_message_upper_header_actions_land_or_tablet.xml index 479712736..165ff77fc 100644 --- a/res/layout-v19/conversation_message_upper_header_actions_land_or_tablet.xml +++ b/res/layout-v19/conversation_message_upper_header_actions_land_or_tablet.xml @@ -20,7 +20,7 @@ android:id="@+id/edit_draft" style="@style/MessageHeaderActionButtonStyle" android:visibility="gone" - android:src="@drawable/ic_edit_holo_light" + android:src="@drawable/ic_edit_24dp" android:contentDescription="@string/resume_draft" /> <ImageView android:id="@+id/reply" diff --git a/res/layout/conversation_footer.xml b/res/layout/conversation_footer.xml index 25c970eb1..49b3e2bc0 100644 --- a/res/layout/conversation_footer.xml +++ b/res/layout/conversation_footer.xml @@ -28,6 +28,7 @@ android:background="@color/conversation_view_border_color"/> <LinearLayout + android:id="@+id/footer_buttons" android:layout_width="match_parent" android:layout_height="wrap_content" > diff --git a/res/layout/conversation_message_upper_header.xml b/res/layout/conversation_message_upper_header.xml index a57b8188d..5422851ee 100644 --- a/res/layout/conversation_message_upper_header.xml +++ b/res/layout/conversation_message_upper_header.xml @@ -46,9 +46,10 @@ android:layout_height="@dimen/contact_image_height" android:layout_marginTop="@dimen/message_header_contact_photo_margin" android:layout_marginBottom="@dimen/message_header_contact_photo_margin" - android:visibility="gone" + android:background="@drawable/draft_background_circle" android:scaleType="center" - android:src="@drawable/ic_draft" + android:src="@drawable/ic_drafts_wht_24dp" + android:visibility="gone" style="@style/ConversationViewMarginStyle" /> <include layout="@layout/conversation_message_upper_header_text" /> <include layout="@layout/conversation_message_upper_header_actions" /> diff --git a/res/layout/conversation_message_upper_header_actions.xml b/res/layout/conversation_message_upper_header_actions.xml index d5a04c040..ab98ec3ec 100644 --- a/res/layout/conversation_message_upper_header_actions.xml +++ b/res/layout/conversation_message_upper_header_actions.xml @@ -20,7 +20,7 @@ android:id="@+id/edit_draft" style="@style/MessageHeaderActionButtonStyle" android:visibility="gone" - android:src="@drawable/ic_edit_holo_light" + android:src="@drawable/ic_edit_24dp" android:contentDescription="@string/resume_draft" /> <ImageView android:id="@+id/reply" diff --git a/res/layout/conversation_message_upper_header_actions_land_or_tablet.xml b/res/layout/conversation_message_upper_header_actions_land_or_tablet.xml index d42c0f2f7..e9ab53c5e 100644 --- a/res/layout/conversation_message_upper_header_actions_land_or_tablet.xml +++ b/res/layout/conversation_message_upper_header_actions_land_or_tablet.xml @@ -20,7 +20,7 @@ android:id="@+id/edit_draft" style="@style/MessageHeaderActionButtonStyle" android:visibility="gone" - android:src="@drawable/ic_edit_holo_light" + android:src="@drawable/ic_edit_24dp" android:contentDescription="@string/resume_draft" /> <ImageView android:id="@+id/reply" diff --git a/res/layout/super_collapsed_block.xml b/res/layout/super_collapsed_block.xml index a0995a36d..f686ef9b3 100644 --- a/res/layout/super_collapsed_block.xml +++ b/res/layout/super_collapsed_block.xml @@ -50,7 +50,6 @@ android:background="@drawable/super_collapse_circle" android:contentDescription="@null" android:gravity="center" - android:textSize="@dimen/super_collapsed_text_size" - android:textColor="@color/conversation_view_text_color_light" /> + android:textSize="@dimen/super_collapsed_text_size" /> </com.android.mail.browse.SuperCollapsedBlock> diff --git a/res/values/colors.xml b/res/values/colors.xml index 8a060db8d..77c97616b 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -20,6 +20,7 @@ <color name="text_color_black">#212121</color> <color name="accent_blue">#00bfd8</color> <color name="text_color_blue">@color/accent_blue</color> + <color name="text_color_draft_red">#da4336</color> <color name="gray_text_color">#777777</color> <color name="dark_gray_text_color">#58585b</color> <color name="light_gray">#cccccc</color> @@ -36,7 +37,6 @@ <color name="ap_overflow_badge_color">#cceeeeee</color> <color name="ap_overflow_text_color">#ff4f4c4c</color> - <color name="drafts">#ff990000</color> <color name="attachment_bg_color">#ffdddddd</color> <color name="swiped_bg_color">#ff999999</color> <color name="holo_light_background_color">#ffe8e8e8</color> diff --git a/res/values/styles.xml b/res/values/styles.xml index f20f6655d..8fdc31d6d 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -531,7 +531,7 @@ </style> <style name="DraftTextAppearance"> - <item name="android:textColor">@color/drafts</item> + <item name="android:textColor">@color/text_color_draft_red</item> </style> <style name="SendingTextAppearance" parent="@style/DraftTextAppearance"> diff --git a/src/com/android/mail/browse/ConversationFooterView.java b/src/com/android/mail/browse/ConversationFooterView.java index b37d564e8..9a3e1dd60 100644 --- a/src/com/android/mail/browse/ConversationFooterView.java +++ b/src/com/android/mail/browse/ConversationFooterView.java @@ -3,6 +3,7 @@ package com.android.mail.browse; import android.content.Context; import android.util.AttributeSet; import android.view.View; +import android.view.ViewGroup; import android.widget.LinearLayout; import com.android.mail.R; @@ -13,6 +14,7 @@ import com.android.mail.providers.Account; import com.android.mail.providers.Message; import com.android.mail.utils.LogTag; import com.android.mail.utils.LogUtils; +import com.android.mail.utils.Utils; /** * A view placed at the bottom of the conversation view that allows the user to @@ -20,10 +22,21 @@ import com.android.mail.utils.LogUtils; */ public class ConversationFooterView extends LinearLayout implements View.OnClickListener { + public interface ConversationFooterCallbacks { + /** + * Called when the height of the {@link ConversationFooterView} changes. + * + * @param newHeight the new height in px + */ + void onConversationFooterHeightChange(int newHeight); + } private static final String LOG_TAG = LogTag.getLogTag(); private ConversationFooterItem mFooterItem; private ConversationAccountController mAccountController; + private ConversationFooterCallbacks mCallbacks; + + private View mFooterButtons; public ConversationFooterView(Context context) { super(context); @@ -41,6 +54,8 @@ public class ConversationFooterView extends LinearLayout implements View.OnClick protected void onFinishInflate() { super.onFinishInflate(); + mFooterButtons = findViewById(R.id.footer_buttons); + findViewById(R.id.reply_button).setOnClickListener(this); findViewById(R.id.reply_all_button).setOnClickListener(this); findViewById(R.id.forward_button).setOnClickListener(this); @@ -74,12 +89,55 @@ public class ConversationFooterView extends LinearLayout implements View.OnClick public void bind(ConversationFooterItem footerItem) { mFooterItem = footerItem; + + if (mFooterItem == null) { + LogUtils.i(LOG_TAG, "ignoring conversation footer tap on unbound view"); + return; + } + final MessageHeaderItem headerItem = mFooterItem.getLastMessageHeaderItem(); + if (headerItem == null) { + LogUtils.i(LOG_TAG, "ignoring conversation footer tap on null header item"); + return; + } + final Message message = headerItem.getMessage(); + if (message == null) { + LogUtils.i(LOG_TAG, "ignoring conversation footer tap on null message"); + return; + } + + // hide the footer icons + mFooterButtons.setVisibility(message.isDraft() ? GONE : VISIBLE); + } + + public void rebind(ConversationFooterItem footerItem) { + bind(footerItem); + + if (mFooterItem != null) { + final int h = measureHeight(); + if (mFooterItem.setHeight(h)) { + mCallbacks.onConversationFooterHeightChange(h); + } + } + } + + private int measureHeight() { + ViewGroup parent = (ViewGroup) getParent(); + if (parent == null) { + LogUtils.e(LOG_TAG, "Unable to measure height of conversation header"); + return getHeight(); + } + final int h = Utils.measureViewHeight(this, parent); + return h; } public void setAccountController(ConversationAccountController accountController) { mAccountController = accountController; } + public void setConversationFooterCallbacks(ConversationFooterCallbacks callbacks) { + mCallbacks = callbacks; + } + private Account getAccount() { return mAccountController != null ? mAccountController.getAccount() : null; } diff --git a/src/com/android/mail/browse/ConversationViewAdapter.java b/src/com/android/mail/browse/ConversationViewAdapter.java index 50a90d26d..bc953de1d 100644 --- a/src/com/android/mail/browse/ConversationViewAdapter.java +++ b/src/com/android/mail/browse/ConversationViewAdapter.java @@ -32,6 +32,7 @@ import com.android.emailcommon.mail.Address; import com.android.mail.ContactInfoSource; import com.android.mail.FormattedDateBuilder; import com.android.mail.R; +import com.android.mail.browse.ConversationFooterView.ConversationFooterCallbacks; import com.android.mail.browse.ConversationViewHeader.ConversationViewHeaderCallbacks; import com.android.mail.browse.MessageFooterView.MessageFooterCallbacks; import com.android.mail.browse.MessageHeaderView.MessageHeaderViewCallbacks; @@ -76,6 +77,7 @@ public class ConversationViewAdapter extends BaseAdapter { private final MessageFooterCallbacks mFooterCallbacks; private final ContactInfoSource mContactInfoSource; private final ConversationViewHeaderCallbacks mConversationCallbacks; + private final ConversationFooterCallbacks mConversationFooterCallbacks; private final ConversationUpdater mConversationUpdater; private final OnClickListener mSuperCollapsedListener; private final Map<String, Address> mAddressCache; @@ -170,6 +172,7 @@ public class ConversationViewAdapter extends BaseAdapter { final ConversationFooterView view = (ConversationFooterView) inflater.inflate(R.layout.conversation_footer, parent, false); view.setAccountController(mAccountController); + view.setConversationFooterCallbacks(mConversationFooterCallbacks); return view; } @@ -179,6 +182,11 @@ public class ConversationViewAdapter extends BaseAdapter { } @Override + public void rebindView(View view) { + ((ConversationFooterView) view).rebind(this); + } + + @Override public boolean isContiguous() { return true; } @@ -421,11 +429,13 @@ public class ConversationViewAdapter extends BaseAdapter { public class SuperCollapsedBlockItem extends ConversationOverlayItem { private final int mStart; - private int mEnd; + private final int mEnd; + private final boolean mHasDraft; - private SuperCollapsedBlockItem(int start, int end) { + private SuperCollapsedBlockItem(int start, int end, boolean hasDraft) { mStart = start; mEnd = end; + mHasDraft = hasDraft; } @Override @@ -465,6 +475,10 @@ public class ConversationViewAdapter extends BaseAdapter { return mEnd; } + public boolean hasDraft() { + return mHasDraft; + } + @Override public boolean canPushSnapHeader() { return true; @@ -478,6 +492,7 @@ public class ConversationViewAdapter extends BaseAdapter { MessageFooterCallbacks footerCallbacks, ContactInfoSource contactInfoSource, ConversationViewHeaderCallbacks convCallbacks, + ConversationFooterCallbacks convFooterCallbacks, ConversationUpdater conversationUpdater, OnClickListener scbListener, Map<String, Address> addressCache, @@ -492,6 +507,7 @@ public class ConversationViewAdapter extends BaseAdapter { mFooterCallbacks = footerCallbacks; mContactInfoSource = contactInfoSource; mConversationCallbacks = convCallbacks; + mConversationFooterCallbacks = convFooterCallbacks; mConversationUpdater = conversationUpdater; mSuperCollapsedListener = scbListener; mAddressCache = addressCache; @@ -594,8 +610,8 @@ public class ConversationViewAdapter extends BaseAdapter { return new MessageFooterItem(adapter, headerItem); } - public int addSuperCollapsedBlock(int start, int end) { - return addItem(new SuperCollapsedBlockItem(start, end)); + public int addSuperCollapsedBlock(int start, int end, boolean hasDraft) { + return addItem(new SuperCollapsedBlockItem(start, end, hasDraft)); } public void replaceSuperCollapsedBlock(SuperCollapsedBlockItem blockToRemove, @@ -643,6 +659,15 @@ public class ConversationViewAdapter extends BaseAdapter { return item; } + public ConversationFooterItem getFooterItem() { + final int count = mItems.size(); + if (count < 4) { + LogUtils.wtf(LOG_TAG, "not enough items in the adapter. count: %s", count); + return null; + } + return (ConversationFooterItem) mItems.get(count - 1); + } + /** * Returns true if the item before this one is of type * {@link #VIEW_TYPE_SUPER_COLLAPSED_BLOCK}. diff --git a/src/com/android/mail/browse/MessageHeaderView.java b/src/com/android/mail/browse/MessageHeaderView.java index ab1c95076..6173a276e 100644 --- a/src/com/android/mail/browse/MessageHeaderView.java +++ b/src/com/android/mail/browse/MessageHeaderView.java @@ -539,7 +539,7 @@ public class MessageHeaderView extends SnapHeader implements OnClickListener, break; default: if (mIsDraft) { - title = getResources().getQuantityText(R.plurals.draft, 1); + title = SendersView.getSingularDraftString(); } else { title = getBidiFormatter().unicodeWrap( getSenderName(mSender)); diff --git a/src/com/android/mail/browse/SendersView.java b/src/com/android/mail/browse/SendersView.java index 889e733a6..4bbdb4f4a 100644 --- a/src/com/android/mail/browse/SendersView.java +++ b/src/com/android/mail/browse/SendersView.java @@ -404,6 +404,13 @@ public class SendersView { return formattedToHeader; } + public static SpannableString getSingularDraftString() { + final SpannableString formattedDraftString = new SpannableString(sDraftSingularString); + final CharacterStyle readStyle = CharacterStyle.wrap(sDraftsStyleSpan); + formattedDraftString.setSpan(readStyle, 0, formattedDraftString.length(), 0); + return formattedDraftString; + } + private static void clearResourceCache() { sDraftSingularString = null; } diff --git a/src/com/android/mail/browse/SuperCollapsedBlock.java b/src/com/android/mail/browse/SuperCollapsedBlock.java index a8f89f83a..41e3c2d0d 100644 --- a/src/com/android/mail/browse/SuperCollapsedBlock.java +++ b/src/com/android/mail/browse/SuperCollapsedBlock.java @@ -18,6 +18,7 @@ package com.android.mail.browse; import android.content.Context; +import android.content.res.Resources; import android.util.AttributeSet; import android.view.View; import android.widget.FrameLayout; @@ -72,8 +73,12 @@ public class SuperCollapsedBlock extends FrameLayout implements View.OnClickList public void setCount(int count) { mSuperCollapsedText.setText(String.valueOf(count)); + final Resources res = getResources(); + final int colorId = mModel.hasDraft() ? + R.color.text_color_draft_red : R.color.conversation_view_text_color_light; + mSuperCollapsedText.setTextColor(res.getColor(colorId)); setContentDescription( - getResources().getQuantityString(R.plurals.show_messages_read, count, count)); + res.getQuantityString(R.plurals.show_messages_read, count, count)); } @Override diff --git a/src/com/android/mail/providers/Message.java b/src/com/android/mail/providers/Message.java index 70b91e71b..64ecf3c24 100644 --- a/src/com/android/mail/providers/Message.java +++ b/src/com/android/mail/providers/Message.java @@ -723,4 +723,8 @@ public class Message implements Parcelable, HtmlMessage { public long getId() { return id; } + + public boolean isDraft() { + return draftType != UIProvider.DraftType.NOT_A_DRAFT; + } } diff --git a/src/com/android/mail/ui/ConversationViewFragment.java b/src/com/android/mail/ui/ConversationViewFragment.java index fdb38fd69..e0389d806 100644 --- a/src/com/android/mail/ui/ConversationViewFragment.java +++ b/src/com/android/mail/ui/ConversationViewFragment.java @@ -51,6 +51,7 @@ import com.android.mail.analytics.AnalyticsTimer; import com.android.mail.browse.AttachmentActionHandler; import com.android.mail.browse.ConversationContainer; import com.android.mail.browse.ConversationContainer.OverlayPosition; +import com.android.mail.browse.ConversationFooterView.ConversationFooterCallbacks; import com.android.mail.browse.ConversationMessage; import com.android.mail.browse.ConversationOverlayItem; import com.android.mail.browse.ConversationViewAdapter; @@ -96,8 +97,8 @@ import java.util.Set; */ public class ConversationViewFragment extends AbstractConversationViewFragment implements SuperCollapsedBlock.OnClickListener, OnLayoutChangeListener, - MessageHeaderView.MessageHeaderViewCallbacks, - MessageFooterView.MessageFooterCallbacks, WebViewContextMenu.Callbacks { + MessageHeaderView.MessageHeaderViewCallbacks, MessageFooterView.MessageFooterCallbacks, + WebViewContextMenu.Callbacks, ConversationFooterCallbacks { private static final String LOG_TAG = LogTag.getLogTag(); public static final String LAYOUT_TAG = "ConvLayout"; @@ -275,7 +276,7 @@ public class ConversationViewFragment extends AbstractConversationViewFragment i final FormattedDateBuilder dateBuilder = new FormattedDateBuilder(context); mAdapter = new ConversationViewAdapter(mActivity, this, - getLoaderManager(), this, this, getContactInfoSource(), this, + getLoaderManager(), this, this, getContactInfoSource(), this, this, getListController(), this, mAddressCache, dateBuilder, mBidiFormatter); mConversationContainer.setOverlayAdapter(mAdapter); @@ -722,6 +723,7 @@ public class ConversationViewFragment extends AbstractConversationViewFragment i boolean prevSafeForImages = alwaysShowImages; + boolean hasDraft = false; while (messageCursor.moveToPosition(++pos)) { final ConversationMessage msg = messageCursor.getMessage(); @@ -747,6 +749,7 @@ public class ConversationViewFragment extends AbstractConversationViewFragment i expandedState = ExpansionState.COLLAPSED; } else { expandedState = ExpansionState.SUPER_COLLAPSED; + hasDraft |= msg.isDraft(); } } mViewState.setShouldShowImages(msg, prevState.getShouldShowImages(msg)); @@ -784,8 +787,9 @@ public class ConversationViewFragment extends AbstractConversationViewFragment i // Special-case for a single collapsed message: no need to super-collapse it. renderMessage(prevCollapsedMsg, false /* expanded */, prevSafeForImages); } else { - renderSuperCollapsedBlock(collapsedStart, pos - 1); + renderSuperCollapsedBlock(collapsedStart, pos - 1, hasDraft); } + hasDraft = false; // reset hasDraft prevCollapsedMsg = null; collapsedStart = -1; } @@ -818,8 +822,8 @@ public class ConversationViewFragment extends AbstractConversationViewFragment i return (MessageHeaderItem) mAdapter.getItem(count - 2); } - private void renderSuperCollapsedBlock(int start, int end) { - final int blockPos = mAdapter.addSuperCollapsedBlock(start, end); + private void renderSuperCollapsedBlock(int start, int end, boolean hasDraft) { + final int blockPos = mAdapter.addSuperCollapsedBlock(start, end, hasDraft); final int blockPx = measureOverlayHeight(blockPos); mTemplates.appendSuperCollapsedHtml(start, mWebView.screenPxToWebPx(blockPx)); } @@ -935,6 +939,17 @@ public class ConversationViewFragment extends AbstractConversationViewFragment i // END conversation header callbacks + // START conversation footer callbacks + + @Override + public void onConversationFooterHeightChange(int newHeight) { + final int h = mWebView.screenPxToWebPx(newHeight); + + mWebView.loadUrl(String.format("javascript:setConversationFooterSpacerHeight(%s);", h)); + } + + // END conversation footer callbacks + // START message header callbacks @Override public void setMessageSpacerHeight(MessageHeaderItem item, int newSpacerHeightPx) { @@ -1492,6 +1507,10 @@ public class ConversationViewFragment extends AbstractConversationViewFragment i changed = true; } + final ConversationFooterItem footerItem = mAdapter.getFooterItem(); + if (footerItem != null) { + footerItem.invalidateMeasurement(); + } if (!idsOfChangedBodies.isEmpty()) { mWebView.loadUrl(String.format("javascript:replaceMessageBodies([%s]);", TextUtils.join(",", idsOfChangedBodies))); @@ -1515,6 +1534,7 @@ public class ConversationViewFragment extends AbstractConversationViewFragment i if (footerItem != null) { footerItem.setLastMessageHeaderItem(getLastMessageHeaderItem()); + footerItem.invalidateMeasurement(); mAdapter.addItem(footerItem); } |