summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--assets/script.js10
-rw-r--r--res/drawable-hdpi/ic_draft.pngbin1471 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_drafts_wht_24dp.pngbin0 -> 478 bytes
-rw-r--r--res/drawable-hdpi/ic_edit_24dp.pngbin0 -> 3198 bytes
-rw-r--r--res/drawable-hdpi/ic_edit_holo_light.pngbin1478 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_draft.pngbin1048 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_drafts_wht_24dp.pngbin0 -> 371 bytes
-rw-r--r--res/drawable-mdpi/ic_edit_24dp.pngbin0 -> 2948 bytes
-rw-r--r--res/drawable-mdpi/ic_edit_holo_light.pngbin1002 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_draft.pngbin1909 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_drafts_wht_24dp.pngbin0 -> 591 bytes
-rw-r--r--res/drawable-xhdpi/ic_edit_24dp.pngbin0 -> 3145 bytes
-rw-r--r--res/drawable-xhdpi/ic_edit_holo_light.pngbin2009 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_draft.pngbin2694 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_drafts_wht_24dp.pngbin0 -> 842 bytes
-rw-r--r--res/drawable-xxhdpi/ic_edit_24dp.pngbin0 -> 3292 bytes
-rw-r--r--res/drawable-xxhdpi/ic_edit_holo_light.pngbin2942 -> 0 bytes
-rw-r--r--res/drawable/draft_background_circle.xml21
-rw-r--r--res/layout-v19/conversation_message_upper_header_actions_land_or_tablet.xml2
-rw-r--r--res/layout/conversation_footer.xml1
-rw-r--r--res/layout/conversation_message_upper_header.xml5
-rw-r--r--res/layout/conversation_message_upper_header_actions.xml2
-rw-r--r--res/layout/conversation_message_upper_header_actions_land_or_tablet.xml2
-rw-r--r--res/layout/super_collapsed_block.xml3
-rw-r--r--res/values/colors.xml2
-rw-r--r--res/values/styles.xml2
-rw-r--r--src/com/android/mail/browse/ConversationFooterView.java58
-rw-r--r--src/com/android/mail/browse/ConversationViewAdapter.java33
-rw-r--r--src/com/android/mail/browse/MessageHeaderView.java2
-rw-r--r--src/com/android/mail/browse/SendersView.java7
-rw-r--r--src/com/android/mail/browse/SuperCollapsedBlock.java7
-rw-r--r--src/com/android/mail/providers/Message.java4
-rw-r--r--src/com/android/mail/ui/ConversationViewFragment.java32
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
deleted file mode 100644
index a0fa5cebf..000000000
--- a/res/drawable-hdpi/ic_draft.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_drafts_wht_24dp.png b/res/drawable-hdpi/ic_drafts_wht_24dp.png
new file mode 100644
index 000000000..2d27488a4
--- /dev/null
+++ b/res/drawable-hdpi/ic_drafts_wht_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_edit_24dp.png b/res/drawable-hdpi/ic_edit_24dp.png
new file mode 100644
index 000000000..854bc54da
--- /dev/null
+++ b/res/drawable-hdpi/ic_edit_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_edit_holo_light.png b/res/drawable-hdpi/ic_edit_holo_light.png
deleted file mode 100644
index 75141ab78..000000000
--- a/res/drawable-hdpi/ic_edit_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_draft.png b/res/drawable-mdpi/ic_draft.png
deleted file mode 100644
index 0336fe736..000000000
--- a/res/drawable-mdpi/ic_draft.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_drafts_wht_24dp.png b/res/drawable-mdpi/ic_drafts_wht_24dp.png
new file mode 100644
index 000000000..4d54b082f
--- /dev/null
+++ b/res/drawable-mdpi/ic_drafts_wht_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_edit_24dp.png b/res/drawable-mdpi/ic_edit_24dp.png
new file mode 100644
index 000000000..315f28685
--- /dev/null
+++ b/res/drawable-mdpi/ic_edit_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_edit_holo_light.png b/res/drawable-mdpi/ic_edit_holo_light.png
deleted file mode 100644
index d344424b0..000000000
--- a/res/drawable-mdpi/ic_edit_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_draft.png b/res/drawable-xhdpi/ic_draft.png
deleted file mode 100644
index 2ec98990d..000000000
--- a/res/drawable-xhdpi/ic_draft.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drafts_wht_24dp.png b/res/drawable-xhdpi/ic_drafts_wht_24dp.png
new file mode 100644
index 000000000..a06fc2dfa
--- /dev/null
+++ b/res/drawable-xhdpi/ic_drafts_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_edit_24dp.png b/res/drawable-xhdpi/ic_edit_24dp.png
new file mode 100644
index 000000000..da4f769cb
--- /dev/null
+++ b/res/drawable-xhdpi/ic_edit_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_edit_holo_light.png b/res/drawable-xhdpi/ic_edit_holo_light.png
deleted file mode 100644
index 88c7fc9ca..000000000
--- a/res/drawable-xhdpi/ic_edit_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_draft.png b/res/drawable-xxhdpi/ic_draft.png
deleted file mode 100644
index 576e4347f..000000000
--- a/res/drawable-xxhdpi/ic_draft.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drafts_wht_24dp.png b/res/drawable-xxhdpi/ic_drafts_wht_24dp.png
new file mode 100644
index 000000000..f5addffa8
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_drafts_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_edit_24dp.png b/res/drawable-xxhdpi/ic_edit_24dp.png
new file mode 100644
index 000000000..142e8135a
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_edit_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_edit_holo_light.png b/res/drawable-xxhdpi/ic_edit_holo_light.png
deleted file mode 100644
index 41ccb3ec6..000000000
--- a/res/drawable-xxhdpi/ic_edit_holo_light.png
+++ /dev/null
Binary files differ
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);
}