Merge "Revert "NPE in TwoPaneController"" into jb-ub-mail-ur10
diff --git a/res/layout/conversation_message_details_header_expanded.xml b/res/layout/conversation_message_details_header_expanded.xml
index af2bcbf..f63cac6 100644
--- a/res/layout/conversation_message_details_header_expanded.xml
+++ b/res/layout/conversation_message_details_header_expanded.xml
@@ -26,7 +26,7 @@
android:paddingLeft="@dimen/message_details_header_padding_start_collapsed"
android:paddingRight="@dimen/message_details_header_padding_end"
app:columnCount="3"
- app:rowCount="5" >
+ app:rowCount="6" >
<TextView
android:id="@+id/from_heading"
@@ -143,5 +143,26 @@
app:layout_row="4"
android:visibility="gone"
style="@style/MessageDetailsValueStyle" />
+ <TextView
+ android:id="@+id/date_heading"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="@dimen/message_header_inner_side_padding"
+ android:layout_marginRight="@dimen/message_header_inner_side_padding"
+ app:layout_column="0"
+ app:layout_row="5"
+ android:text="@string/date_heading"
+ android:visibility="gone"
+ style="@style/MessageHeaderSmallStyle" />
+ <TextView
+ android:id="@+id/date_details"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ app:layout_gravity="fill_horizontal"
+ android:layout_marginBottom="4dp"
+ app:layout_column="1"
+ app:layout_row="5"
+ android:visibility="gone"
+ style="@style/MessageDetailsValueStyle" />
</android.support.v7.widget.GridLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 67ebd10..d4106d6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -440,9 +440,9 @@
viewing it. [CHAR LIMIT=40] -->
<string name="add_label">Add folder</string>
- <!-- New Message notification text that appears over conversation view on incoming message. [CHAR LIMIT=30] -->
+ <!-- New Message notification text that appears over conversation view on incoming message. [CHAR LIMIT=40] -->
<string name="new_incoming_messages_one">New message from <xliff:g id="sender">%s</xliff:g>. Show.</string>
- <!-- New Message notification text that appears over conversation view on incoming messages. Will only be used if there is more than one new message. [CHAR LIMIT=30] -->
+ <!-- New Message notification text that appears over conversation view on incoming messages. Will only be used if there is more than one new message. [CHAR LIMIT=40] -->
<plurals name="new_incoming_messages_many">
<item quantity="other"><xliff:g id="count">%1$d</xliff:g> new messages. Show.</item>
</plurals>
@@ -461,18 +461,18 @@
<plurals name="show_messages_read">
<item quantity="other"><xliff:g id="count" example="4">%1$d</xliff:g> older messages</item>
</plurals>
-
+ <!-- Shown to display the from address of the message [CHAR LIMIT=10] -->
<string name="from_heading">From:\u0020</string>
<!-- Shown to display the reply to address of the message [CHAR LIMIT=20] -->
<string name="replyto_heading">Reply-to:\u0020</string>
- <!-- Shown to display the recipient(s) of the message [CHAR LIMIT=10] -->
- <!-- Shown in HTML to display the recipient(s) of the message [CHAR LIMIT=10] -->
+ <!-- Shown to display the to recipient(s) of the message [CHAR LIMIT=10] -->
<string name="to_heading">To:\u0020</string>
- <!-- Shown in HTML to display the recipient(s) of the message [CHAR LIMIT=10] -->
+ <!-- Shown to display the cc recipient(s) of the message [CHAR LIMIT=10] -->
<string name="cc_heading">Cc:\u0020</string>
- <!-- Shown in HTML to display the recipient(s) of the message [CHAR LIMIT=10] -->
+ <!-- Shown to display the bcc recipient(s) of the message [CHAR LIMIT=10] -->
<string name="bcc_heading">Bcc:\u0020</string>
- <!-- Shown to display the from address of the message [CHAR LIMIT=10] -->
+ <!-- Shown to display the recipient(s) of the message [CHAR LIMIT=10] -->
+ <string name="date_heading">Date:\u0020</string>
<!-- Displayed above an HTML message to show the images in that message [CHAR LIMIT=40] -->
<string name="show_images">Show pictures</string>
<!-- Displayed above an HTML message to always show images in messages from that sender [CHAR LIMIT=40] -->
diff --git a/src/com/android/mail/browse/MessageHeaderDetailsDialogFragment.java b/src/com/android/mail/browse/MessageHeaderDetailsDialogFragment.java
index b6e6603..92a4f3c 100644
--- a/src/com/android/mail/browse/MessageHeaderDetailsDialogFragment.java
+++ b/src/com/android/mail/browse/MessageHeaderDetailsDialogFragment.java
@@ -45,6 +45,7 @@
private static final String ARG_TO = "to";
private static final String ARG_CC = "cc";
private static final String ARG_BCC = "bcc";
+ private static final String ARG_RECEIVED_TIME = "received-timestamp";
// Public no-args constructor needed for fragment re-instantiation
public MessageHeaderDetailsDialogFragment() {}
@@ -63,7 +64,7 @@
*/
public static MessageHeaderDetailsDialogFragment newInstance(
Map<String, Address> addressCache, Account account, String[] from, String[] replyTo,
- String[] to, String[] cc, String[] bcc) {
+ String[] to, String[] cc, String[] bcc, CharSequence receivedTimestamp) {
final MessageHeaderDetailsDialogFragment f = new MessageHeaderDetailsDialogFragment();
// Supply needed items as arguments
@@ -83,6 +84,7 @@
args.putStringArray(ARG_TO, to);
args.putStringArray(ARG_CC, cc);
args.putStringArray(ARG_BCC, bcc);
+ args.putCharSequence(ARG_RECEIVED_TIME, receivedTimestamp);
f.setArguments(args);
return f;
@@ -115,7 +117,7 @@
addressCache, (Account) args.getParcelable(ARG_ACCOUNT), null,
args.getStringArray(ARG_FROM), args.getStringArray(ARG_REPLY_TO),
args.getStringArray(ARG_TO), args.getStringArray(ARG_CC),
- args.getStringArray(ARG_BCC));
+ args.getStringArray(ARG_BCC), args.getCharSequence(ARG_RECEIVED_TIME));
expandedDetails.findViewById(R.id.details_expander)
.setVisibility(View.GONE);
diff --git a/src/com/android/mail/browse/MessageHeaderView.java b/src/com/android/mail/browse/MessageHeaderView.java
index 9f736d5..ed47bf5 100644
--- a/src/com/android/mail/browse/MessageHeaderView.java
+++ b/src/com/android/mail/browse/MessageHeaderView.java
@@ -1279,7 +1279,8 @@
}
if (!mExpandedDetailsValid) {
renderExpandedDetails(getResources(), mExpandedDetailsView, mMessage.viaDomain,
- mAddressCache, getAccount(), mVeiledMatcher, mFrom, mReplyTo, mTo, mCc, mBcc);
+ mAddressCache, getAccount(), mVeiledMatcher, mFrom, mReplyTo, mTo, mCc, mBcc,
+ mMessageHeaderItem.getTimestampLong());
mExpandedDetailsValid = true;
}
@@ -1294,7 +1295,7 @@
public static void renderExpandedDetails(Resources res, View detailsView,
String viaDomain, Map<String, Address> addressCache, Account account,
VeiledAddressMatcher veiledMatcher, String[] from, String[] replyTo,
- String[] to, String[] cc, String[] bcc) {
+ String[] to, String[] cc, String[] bcc, CharSequence receivedTimestamp) {
renderEmailList(res, R.id.from_heading, R.id.from_details, from, viaDomain,
detailsView, addressCache, account, veiledMatcher);
renderEmailList(res, R.id.replyto_heading, R.id.replyto_details, replyTo, viaDomain,
@@ -1305,6 +1306,12 @@
detailsView, addressCache, account, veiledMatcher);
renderEmailList(res, R.id.bcc_heading, R.id.bcc_details, bcc, viaDomain,
detailsView, addressCache, account, veiledMatcher);
+
+ // Render date
+ detailsView.findViewById(R.id.date_heading).setVisibility(VISIBLE);
+ final TextView date = (TextView) detailsView.findViewById(R.id.date_details);
+ date.setText(receivedTimestamp);
+ date.setVisibility(VISIBLE);
}
/**
@@ -1383,7 +1390,8 @@
mDetailsPopup = (DialogFragment) manager.findFragmentByTag(DETAILS_DIALOG_TAG);
if (mDetailsPopup == null) {
mDetailsPopup = MessageHeaderDetailsDialogFragment.newInstance(
- mAddressCache, getAccount(), mFrom, mReplyTo, mTo, mCc, mBcc);
+ mAddressCache, getAccount(), mFrom, mReplyTo, mTo, mCc, mBcc,
+ mMessageHeaderItem.getTimestampLong());
mDetailsPopup.show(manager, DETAILS_DIALOG_TAG);
}
}
diff --git a/src/com/android/mail/ui/AbstractActivityController.java b/src/com/android/mail/ui/AbstractActivityController.java
index 7bd5e79..ad59023 100644
--- a/src/com/android/mail/ui/AbstractActivityController.java
+++ b/src/com/android/mail/ui/AbstractActivityController.java
@@ -842,12 +842,6 @@
? DrawerLayout.LOCK_MODE_UNLOCKED : DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
mDrawerContainer.closeDrawers();
-
- if (mFolder == null || !mFolder.equals(folder)) {
- // We are actually changing the folder, so exit cab mode
- exitCabMode();
- }
-
changeFolder(folder, null, force);
}
@@ -4285,23 +4279,19 @@
// Now try to load our parent
final Folder folder;
- if (mFolder != null) {
- final Cursor cursor = mContext.getContentResolver().query(mFolder.parent,
- UIProvider.FOLDERS_PROJECTION, null, null, null);
+ final Cursor cursor = mContext.getContentResolver().query(mFolder.parent,
+ UIProvider.FOLDERS_PROJECTION, null, null, null);
- if (cursor == null) {
- // We couldn't load the parent, so use the inbox
- folder = mInbox;
- } else {
- try {
- cursor.moveToFirst();
- folder = new Folder(cursor);
- } finally {
- cursor.close();
- }
- }
- } else {
+ if (cursor == null) {
+ // We couldn't load the parent, so use the inbox
folder = mInbox;
+ } else {
+ try {
+ cursor.moveToFirst();
+ folder = new Folder(cursor);
+ } finally {
+ cursor.close();
+ }
}
return folder;
diff --git a/src/com/android/mail/ui/TwoPaneController.java b/src/com/android/mail/ui/TwoPaneController.java
index e3a88c6..0269b56 100644
--- a/src/com/android/mail/ui/TwoPaneController.java
+++ b/src/com/android/mail/ui/TwoPaneController.java
@@ -159,6 +159,12 @@
}
@Override
+ public void onFolderChanged(Folder folder, final boolean force) {
+ super.onFolderChanged(folder, force);
+ exitCabMode();
+ }
+
+ @Override
public void onFolderSelected(Folder folder) {
// It's possible that we are not in conversation list mode
if (mViewMode.getMode() != ViewMode.CONVERSATION_LIST) {
@@ -574,11 +580,13 @@
final int containerViewId = TwoPaneLayout.MISCELLANEOUS_VIEW_ID;
final FragmentManager fragmentManager = mActivity.getFragmentManager();
- final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
- fragmentTransaction.addToBackStack(null);
- fragmentTransaction.replace(containerViewId, fragment, TAG_CUSTOM_FRAGMENT);
- mMiscellaneousViewTransactionId = fragmentTransaction.commitAllowingStateLoss();
- fragmentManager.executePendingTransactions();
+ if (fragmentManager.findFragmentByTag(TAG_CUSTOM_FRAGMENT) == null) {
+ final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
+ fragmentTransaction.addToBackStack(null);
+ fragmentTransaction.replace(containerViewId, fragment, TAG_CUSTOM_FRAGMENT);
+ mMiscellaneousViewTransactionId = fragmentTransaction.commitAllowingStateLoss();
+ fragmentManager.executePendingTransactions();
+ }
if (selectPosition >= 0) {
getConversationListFragment().setRawSelected(selectPosition, true);
diff --git a/src/com/android/mail/ui/TwoPaneLayout.java b/src/com/android/mail/ui/TwoPaneLayout.java
index f4276a3..98687be 100644
--- a/src/com/android/mail/ui/TwoPaneLayout.java
+++ b/src/com/android/mail/ui/TwoPaneLayout.java
@@ -450,7 +450,7 @@
break;
case ViewMode.AD:
dispatchConversationVisibilityChanged(false);
- dispatchConversationListVisibilityChange(false);
+ dispatchConversationListVisibilityChange(!isConversationListCollapsed());
break;
default: