diff --git a/res/values/strings.xml b/res/values/strings.xml index a79f1f6bd..8dd096506 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -264,6 +264,7 @@ Please submit bug reports, contribute new features and ask questions at To: Cc: %s wrote: + On %1$s, %2$s wrote: You must add at least one recipient. No email address could be found for this contact. Some attachments cannot be forwarded because they have not been downloaded. diff --git a/src/com/fsck/k9/activity/MessageCompose.java b/src/com/fsck/k9/activity/MessageCompose.java index f6451fbd4..5bdd96877 100644 --- a/src/com/fsck/k9/activity/MessageCompose.java +++ b/src/com/fsck/k9/activity/MessageCompose.java @@ -92,6 +92,8 @@ import org.htmlcleaner.CleanerProperties; import org.htmlcleaner.HtmlCleaner; import org.htmlcleaner.SimpleHtmlSerializer; import org.htmlcleaner.TagNode; + +import java.text.DateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -3703,12 +3705,20 @@ public class MessageCompose extends K9Activity implements OnClickListener, */ private String quoteOriginalTextMessage(final Message originalMessage, final String messageBody, final QuoteStyle quoteStyle) throws MessagingException { String body = messageBody == null ? "" : messageBody; + String sentDate = getSentDateText(originalMessage); if (quoteStyle == QuoteStyle.PREFIX) { StringBuilder quotedText = new StringBuilder(body.length() + QUOTE_BUFFER_LENGTH); - quotedText.append(String.format( - getString(R.string.message_compose_reply_header_fmt) + "\r\n", - Address.toString(originalMessage.getFrom())) - ); + if (sentDate.length() != 0) { + quotedText.append(String.format( + getString(R.string.message_compose_reply_header_fmt_with_date) + "\r\n", + sentDate, + Address.toString(originalMessage.getFrom()))); + } else { + quotedText.append(String.format( + getString(R.string.message_compose_reply_header_fmt) + "\r\n", + Address.toString(originalMessage.getFrom())) + ); + } final String prefix = mAccount.getQuotePrefix(); final String wrappedText = Utility.wrap(body, REPLY_WRAP_LINE_WIDTH - prefix.length()); @@ -3726,8 +3736,8 @@ public class MessageCompose extends K9Activity implements OnClickListener, if (originalMessage.getFrom() != null && Address.toString(originalMessage.getFrom()).length() != 0) { quotedText.append(getString(R.string.message_compose_quote_header_from)).append(" ").append(Address.toString(originalMessage.getFrom())).append("\r\n"); } - if (originalMessage.getSentDate() != null) { - quotedText.append(getString(R.string.message_compose_quote_header_send_date)).append(" ").append(originalMessage.getSentDate()).append("\r\n"); + if (sentDate.length() != 0) { + quotedText.append(getString(R.string.message_compose_quote_header_send_date)).append(" ").append(sentDate).append("\r\n"); } if (originalMessage.getRecipients(RecipientType.TO) != null && originalMessage.getRecipients(RecipientType.TO).length != 0) { quotedText.append(getString(R.string.message_compose_quote_header_to)).append(" ").append(Address.toString(originalMessage.getRecipients(RecipientType.TO))).append("\r\n"); @@ -3760,13 +3770,22 @@ public class MessageCompose extends K9Activity implements OnClickListener, private InsertableHtmlContent quoteOriginalHtmlMessage(final Message originalMessage, final String messageBody, final QuoteStyle quoteStyle) throws MessagingException { InsertableHtmlContent insertable = findInsertionPoints(messageBody); + String sentDate = getSentDateText(originalMessage); if (quoteStyle == QuoteStyle.PREFIX) { StringBuilder header = new StringBuilder(QUOTE_BUFFER_LENGTH); header.append("
"); - header.append(HtmlConverter.textToHtmlFragment(String.format( - getString(R.string.message_compose_reply_header_fmt), - Address.toString(originalMessage.getFrom())) - )); + if (sentDate.length() != 0) { + header.append(HtmlConverter.textToHtmlFragment(String.format( + getString(R.string.message_compose_reply_header_fmt_with_date), + sentDate, + Address.toString(originalMessage.getFrom())) + )); + } else { + header.append(HtmlConverter.textToHtmlFragment(String.format( + getString(R.string.message_compose_reply_header_fmt), + Address.toString(originalMessage.getFrom())) + )); + } header.append("
\r\n"); @@ -3779,29 +3798,29 @@ public class MessageCompose extends K9Activity implements OnClickListener, StringBuilder header = new StringBuilder(); header.append("
\r\n"); header.append("
\r\n"); // This gets converted into a horizontal line during html to text conversion. - if (mSourceMessage.getFrom() != null && Address.toString(mSourceMessage.getFrom()).length() != 0) { + if (originalMessage.getFrom() != null && Address.toString(originalMessage.getFrom()).length() != 0) { header.append("").append(getString(R.string.message_compose_quote_header_from)).append(" ") - .append(HtmlConverter.textToHtmlFragment(Address.toString(mSourceMessage.getFrom()))) + .append(HtmlConverter.textToHtmlFragment(Address.toString(originalMessage.getFrom()))) .append("
\r\n"); } - if (mSourceMessage.getSentDate() != null) { + if (sentDate.length() != 0) { header.append("").append(getString(R.string.message_compose_quote_header_send_date)).append(" ") - .append(mSourceMessage.getSentDate()) + .append(sentDate) .append("
\r\n"); } - if (mSourceMessage.getRecipients(RecipientType.TO) != null && mSourceMessage.getRecipients(RecipientType.TO).length != 0) { + if (originalMessage.getRecipients(RecipientType.TO) != null && originalMessage.getRecipients(RecipientType.TO).length != 0) { header.append("").append(getString(R.string.message_compose_quote_header_to)).append(" ") - .append(HtmlConverter.textToHtmlFragment(Address.toString(mSourceMessage.getRecipients(RecipientType.TO)))) + .append(HtmlConverter.textToHtmlFragment(Address.toString(originalMessage.getRecipients(RecipientType.TO)))) .append("
\r\n"); } - if (mSourceMessage.getRecipients(RecipientType.CC) != null && mSourceMessage.getRecipients(RecipientType.CC).length != 0) { + if (originalMessage.getRecipients(RecipientType.CC) != null && originalMessage.getRecipients(RecipientType.CC).length != 0) { header.append("").append(getString(R.string.message_compose_quote_header_cc)).append(" ") - .append(HtmlConverter.textToHtmlFragment(Address.toString(mSourceMessage.getRecipients(RecipientType.CC)))) + .append(HtmlConverter.textToHtmlFragment(Address.toString(originalMessage.getRecipients(RecipientType.CC)))) .append("
\r\n"); } - if (mSourceMessage.getSubject() != null) { + if (originalMessage.getSubject() != null) { header.append("").append(getString(R.string.message_compose_quote_header_subject)).append(" ") - .append(HtmlConverter.textToHtmlFragment(mSourceMessage.getSubject())) + .append(HtmlConverter.textToHtmlFragment(originalMessage.getSubject())) .append("
\r\n"); } header.append("
\r\n"); @@ -3990,6 +4009,26 @@ public class MessageCompose extends K9Activity implements OnClickListener, return (mQuotedTextMode == QuotedTextMode.SHOW); } + /** + * Extract the date from a message and convert it into a locale-specific + * date string suitable for use in a header for a quoted message. + * + * @param message + * @return A string with the formatted date/time + */ + private String getSentDateText(Message message) { + try { + final int dateStyle = DateFormat.LONG; + final int timeStyle = DateFormat.LONG; + Date date = message.getSentDate(); + Locale locale = getResources().getConfiguration().locale; + return DateFormat.getDateTimeInstance(dateStyle, timeStyle, locale) + .format(date); + } catch (Exception e) { + return ""; + } + } + /** * An {@link EditText} extension with methods that convert line endings from * {@code \r\n} to {@code \n} and back again when setting and getting text.