1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-11-11 20:15:03 -05:00
This commit is contained in:
Jesse Vincent 2011-01-14 01:37:52 +00:00
parent 8bb7613471
commit aacb414004
6 changed files with 65 additions and 51 deletions

View File

@ -285,12 +285,12 @@ public class Account implements BaseAccount
mMaxPushFolders = prefs.getInt(mUuid + ".maxPushFolders", 10); mMaxPushFolders = prefs.getInt(mUuid + ".maxPushFolders", 10);
goToUnreadMessageSearch = prefs.getBoolean(mUuid + ".goToUnreadMessageSearch", goToUnreadMessageSearch = prefs.getBoolean(mUuid + ".goToUnreadMessageSearch",
false); false);
mNotificationShowsUnreadCount = prefs.getBoolean(mUuid + ".notificationUnreadCount", true); mNotificationShowsUnreadCount = prefs.getBoolean(mUuid + ".notificationUnreadCount", true);
subscribedFoldersOnly = prefs.getBoolean(mUuid + ".subscribedFoldersOnly", subscribedFoldersOnly = prefs.getBoolean(mUuid + ".subscribedFoldersOnly",
false); false);
maximumPolledMessageAge = prefs.getInt(mUuid maximumPolledMessageAge = prefs.getInt(mUuid
+ ".maximumPolledMessageAge", -1); + ".maximumPolledMessageAge", -1);
maximumAutoDownloadMessageSize = prefs.getInt(mUuid maximumAutoDownloadMessageSize = prefs.getInt(mUuid
+ ".maximumAutoDownloadMessageSize", 32768); + ".maximumAutoDownloadMessageSize", 32768);
mMessageFormat = MessageFormat.valueOf(prefs.getString(mUuid + ".messageFormat", DEFAULT_MESSAGE_FORMAT.name())); mMessageFormat = MessageFormat.valueOf(prefs.getString(mUuid + ".messageFormat", DEFAULT_MESSAGE_FORMAT.name()));

View File

@ -78,7 +78,8 @@ class InsertableHtmlContent implements Serializable
/** /**
* Remove all quoted content. * Remove all quoted content.
*/ */
public void clearQuotedContent() { public void clearQuotedContent()
{
quotedContent.setLength(0); quotedContent.setLength(0);
footerInsertionPoint = 0; footerInsertionPoint = 0;
headerInsertionPoint = 0; headerInsertionPoint = 0;
@ -89,7 +90,8 @@ class InsertableHtmlContent implements Serializable
* inserted content buffer. * inserted content buffer.
* @param content * @param content
*/ */
public void setUserContent(final String content) { public void setUserContent(final String content)
{
userContent = new StringBuilder(content); userContent = new StringBuilder(content);
} }
@ -114,11 +116,11 @@ class InsertableHtmlContent implements Serializable
public String toDebugString() public String toDebugString()
{ {
return "InsertableHtmlContent{" + return "InsertableHtmlContent{" +
"headerInsertionPoint=" + headerInsertionPoint + "headerInsertionPoint=" + headerInsertionPoint +
", footerInsertionPoint=" + footerInsertionPoint + ", footerInsertionPoint=" + footerInsertionPoint +
", quotedContent=" + quotedContent + ", quotedContent=" + quotedContent +
", userContent=" + userContent + ", userContent=" + userContent +
", compiledResult=" + toString() + ", compiledResult=" + toString() +
'}'; '}';
} }
} }

View File

@ -1193,7 +1193,8 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
// FYI, there's nothing in the code that requires these variables to one letter. They're one // FYI, there's nothing in the code that requires these variables to one letter. They're one
// letter simply to save space. This name sucks. It's too similar to Account.Identity. // letter simply to save space. This name sucks. It's too similar to Account.Identity.
private enum IdentityField { private enum IdentityField
{
LENGTH("l"), LENGTH("l"),
OFFSET("o"), OFFSET("o"),
MESSAGE_FORMAT("f"), MESSAGE_FORMAT("f"),
@ -1205,11 +1206,13 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
private final String value; private final String value;
IdentityField(String value) { IdentityField(String value)
{
this.value = value; this.value = value;
} }
public String value() { public String value()
{
return value; return value;
} }
@ -1218,7 +1221,8 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
* checked for integer-ness during decoding. * checked for integer-ness during decoding.
* @return * @return
*/ */
public static IdentityField[] getIntegerFields() { public static IdentityField[] getIntegerFields()
{
return new IdentityField[] { LENGTH, OFFSET }; return new IdentityField[] { LENGTH, OFFSET };
} }
} }
@ -1232,13 +1236,17 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
* @param body {@link TextBody} to analyze for body length and offset. * @param body {@link TextBody} to analyze for body length and offset.
* @return Identity string. * @return Identity string.
*/ */
private String buildIdentityHeader(final TextBody body) { private String buildIdentityHeader(final TextBody body)
{
Uri.Builder uri = new Uri.Builder(); Uri.Builder uri = new Uri.Builder();
if(body.getComposedMessageLength() != null && body.getComposedMessageOffset() != null) { if(body.getComposedMessageLength() != null && body.getComposedMessageOffset() != null)
{
// See if the message body length is already in the TextBody. // See if the message body length is already in the TextBody.
uri.appendQueryParameter(IdentityField.LENGTH.value(), body.getComposedMessageLength().toString()); uri.appendQueryParameter(IdentityField.LENGTH.value(), body.getComposedMessageLength().toString());
uri.appendQueryParameter(IdentityField.OFFSET.value(), body.getComposedMessageOffset().toString()); uri.appendQueryParameter(IdentityField.OFFSET.value(), body.getComposedMessageOffset().toString());
} else { }
else
{
// If not, calculate it now. // If not, calculate it now.
uri.appendQueryParameter(IdentityField.LENGTH.value(), Integer.toString(body.getText().length())); uri.appendQueryParameter(IdentityField.LENGTH.value(), Integer.toString(body.getText().length()));
uri.appendQueryParameter(IdentityField.OFFSET.value(), Integer.toString(0)); uri.appendQueryParameter(IdentityField.OFFSET.value(), Integer.toString(0));
@ -1312,7 +1320,8 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
try try
{ {
Integer.parseInt(identity.get(key)); Integer.parseInt(identity.get(key));
} catch (NumberFormatException e) }
catch (NumberFormatException e)
{ {
Log.e(K9.LOG_TAG, "Invalid " + key.name() + " field in identity: " + identity.get(key)); Log.e(K9.LOG_TAG, "Invalid " + key.name() + " field in identity: " + identity.get(key));
} }
@ -1334,7 +1343,8 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
try try
{ {
identity.put(IdentityField.LENGTH, Integer.valueOf(bodyLengthS).toString()); identity.put(IdentityField.LENGTH, Integer.valueOf(bodyLengthS).toString());
} catch (Exception e) }
catch (Exception e)
{ {
Log.e(K9.LOG_TAG, "Unable to parse bodyLength '" + bodyLengthS + "'"); Log.e(K9.LOG_TAG, "Unable to parse bodyLength '" + bodyLengthS + "'");
} }
@ -2235,11 +2245,11 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
updateFrom(); updateFrom();
Integer bodyLength = k9identity.get(IdentityField.LENGTH) != null Integer bodyLength = k9identity.get(IdentityField.LENGTH) != null
? Integer.parseInt(k9identity.get(IdentityField.LENGTH)) ? Integer.parseInt(k9identity.get(IdentityField.LENGTH))
: 0; : 0;
Integer bodyOffset = k9identity.get(IdentityField.OFFSET) != null Integer bodyOffset = k9identity.get(IdentityField.OFFSET) != null
? Integer.parseInt(k9identity.get(IdentityField.OFFSET)) ? Integer.parseInt(k9identity.get(IdentityField.OFFSET))
: 0; : 0;
// Always respect the user's current composition format preference, even if the // Always respect the user's current composition format preference, even if the
// draft was saved in a different format. // draft was saved in a different format.
// TODO - The current implementation doesn't allow a user in HTML mode to edit a draft that wasn't saved with K9mail. // TODO - The current implementation doesn't allow a user in HTML mode to edit a draft that wasn't saved with K9mail.
@ -2253,7 +2263,9 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
// composition window. If that's the case, try and convert it to text to // composition window. If that's the case, try and convert it to text to
// match the behavior in text mode. // match the behavior in text mode.
mMessageContentView.setText(getBodyTextFromMessage(message, MessageFormat.TEXT)); mMessageContentView.setText(getBodyTextFromMessage(message, MessageFormat.TEXT));
} else { }
else
{
Part part = MimeUtility.findFirstPartByMimeType(message, "text/html"); Part part = MimeUtility.findFirstPartByMimeType(message, "text/html");
if (part != null) // Shouldn't happen if we were the one who saved it. if (part != null) // Shouldn't happen if we were the one who saved it.
{ {
@ -2286,8 +2298,8 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
else if (mAccount.getMessageFormat() == MessageFormat.TEXT) else if (mAccount.getMessageFormat() == MessageFormat.TEXT)
{ {
MessageFormat format = k9identity.get(IdentityField.MESSAGE_FORMAT) != null MessageFormat format = k9identity.get(IdentityField.MESSAGE_FORMAT) != null
? MessageFormat.valueOf(k9identity.get(IdentityField.MESSAGE_FORMAT)) ? MessageFormat.valueOf(k9identity.get(IdentityField.MESSAGE_FORMAT))
: null; : null;
if (format == null) if (format == null)
{ {
mMessageContentView.setText(getBodyTextFromMessage(message, MessageFormat.TEXT)); mMessageContentView.setText(getBodyTextFromMessage(message, MessageFormat.TEXT));
@ -2379,8 +2391,8 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
// Handle the original message in the reply // Handle the original message in the reply
// If we already have mSourceMessageBody, use that. It's pre-populated if we've got crypto going on. // If we already have mSourceMessageBody, use that. It's pre-populated if we've got crypto going on.
String content = mSourceMessageBody != null String content = mSourceMessageBody != null
? mSourceMessageBody ? mSourceMessageBody
: getBodyTextFromMessage(mSourceMessage, mAccount.getMessageFormat()); : getBodyTextFromMessage(mSourceMessage, mAccount.getMessageFormat());
if (mAccount.getMessageFormat() == MessageFormat.HTML) if (mAccount.getMessageFormat() == MessageFormat.HTML)
{ {
// Add the HTML reply header to the top of the content. // Add the HTML reply header to the top of the content.
@ -2860,9 +2872,9 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
{ {
StringBuilder quotedText = new StringBuilder(body.length() + QUOTE_BUFFER_LENGTH); StringBuilder quotedText = new StringBuilder(body.length() + QUOTE_BUFFER_LENGTH);
quotedText.append(String.format( quotedText.append(String.format(
getString(R.string.message_compose_reply_header_fmt), getString(R.string.message_compose_reply_header_fmt),
Address.toString(originalMessage.getFrom())) Address.toString(originalMessage.getFrom()))
); );
final String prefix = mAccount.getQuotePrefix(); final String prefix = mAccount.getQuotePrefix();
final String wrappedText = Utility.wrap(body, REPLY_WRAP_LINE_WIDTH - prefix.length()); final String wrappedText = Utility.wrap(body, REPLY_WRAP_LINE_WIDTH - prefix.length());
@ -2932,11 +2944,11 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
header.append("<br><div class=\"gmail_quote\">"); header.append("<br><div class=\"gmail_quote\">");
// Remove all trailing newlines so that the quote starts immediately after the header. "Be like Gmail!" // Remove all trailing newlines so that the quote starts immediately after the header. "Be like Gmail!"
header.append(HtmlConverter.textToHtmlFragment(String.format( header.append(HtmlConverter.textToHtmlFragment(String.format(
getString(R.string.message_compose_reply_header_fmt).replaceAll("\n$", ""), getString(R.string.message_compose_reply_header_fmt).replaceAll("\n$", ""),
Address.toString(originalMessage.getFrom())) Address.toString(originalMessage.getFrom()))
)); ));
header.append("<blockquote class=\"gmail_quote\" " + header.append("<blockquote class=\"gmail_quote\" " +
"style=\"margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;\">\n"); "style=\"margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;\">\n");
String footer = "</blockquote></div>"; String footer = "</blockquote></div>";

View File

@ -41,8 +41,8 @@ public class HtmlConverter
public static String htmlToText(final String html) public static String htmlToText(final String html)
{ {
return Html.fromHtml(html, null, new HtmlToTextTagHandler()).toString() return Html.fromHtml(html, null, new HtmlToTextTagHandler()).toString()
.replace(PREVIEW_OBJECT_CHARACTER, PREVIEW_OBJECT_REPLACEMENT) .replace(PREVIEW_OBJECT_CHARACTER, PREVIEW_OBJECT_REPLACEMENT)
.replace(NBSP_CHARACTER, NBSP_REPLACEMENT); .replace(NBSP_CHARACTER, NBSP_REPLACEMENT);
} }
/** /**
@ -53,15 +53,15 @@ public class HtmlConverter
private static class HtmlToTextTagHandler implements Html.TagHandler private static class HtmlToTextTagHandler implements Html.TagHandler
{ {
// List of tags whose content should be ignored. // List of tags whose content should be ignored.
private static final Set<String> TAGS_WITH_IGNORED_CONTENT = Collections.unmodifiableSet(new HashSet<String>() private static final Set<String> TAGS_WITH_IGNORED_CONTENT = Collections.unmodifiableSet(new HashSet<String>()
{ {
{ {
add("style"); add("style");
add("script"); add("script");
add("title"); add("title");
add("!"); // comments add("!"); // comments
} }
}); });
@Override @Override
public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader)
@ -96,7 +96,7 @@ public class HtmlConverter
if (opening) if (opening)
{ {
output.setSpan(new Annotation(IGNORED_ANNOTATION_KEY, IGNORED_ANNOTATION_VALUE), len, output.setSpan(new Annotation(IGNORED_ANNOTATION_KEY, IGNORED_ANNOTATION_VALUE), len,
len, Spannable.SPAN_MARK_MARK); len, Spannable.SPAN_MARK_MARK);
} }
else else
{ {

View File

@ -1398,7 +1398,7 @@ public class MimeUtility
// iso-2022-jp variants are supported by no versions as of Dec 2010. // iso-2022-jp variants are supported by no versions as of Dec 2010.
if (charset.length() > 19 && charset.startsWith("x-") && if (charset.length() > 19 && charset.startsWith("x-") &&
charset.endsWith("-iso-2022-jp-2007") && !Charset.isSupported(charset)) charset.endsWith("-iso-2022-jp-2007") && !Charset.isSupported(charset))
{ {
in = new Iso2022JpToShiftJisInputStream(in); in = new Iso2022JpToShiftJisInputStream(in);
charset = "x-" + charset.substring(2, charset.length() - 17) + "-shift_jis-2007"; charset = "x-" + charset.substring(2, charset.length() - 17) + "-shift_jis-2007";
@ -1406,7 +1406,7 @@ public class MimeUtility
// shift_jis variants are supported by Eclair and later. // shift_jis variants are supported by Eclair and later.
if (charset.length() > 17 && charset.startsWith("x-") && if (charset.length() > 17 && charset.startsWith("x-") &&
charset.endsWith("-shift_jis-2007") && !Charset.isSupported(charset)) charset.endsWith("-shift_jis-2007") && !Charset.isSupported(charset))
{ {
// If the JIS variant is iPhone, map the Unicode private use area in iPhone to the one in Android after // If the JIS variant is iPhone, map the Unicode private use area in iPhone to the one in Android after
// converting the character set from the standard Shift JIS to Unicode. // converting the character set from the standard Shift JIS to Unicode.
@ -1422,7 +1422,7 @@ public class MimeUtility
if (!Charset.isSupported(charset)) if (!Charset.isSupported(charset))
{ {
Log.e(K9.LOG_TAG, "I don't know how to deal with the charset " + charset + Log.e(K9.LOG_TAG, "I don't know how to deal with the charset " + charset +
". Falling back to US-ASCII"); ". Falling back to US-ASCII");
charset = "US-ASCII"; charset = "US-ASCII";
} }

View File

@ -90,7 +90,7 @@ public class TextBody implements Body
{ {
mCharset = charset; mCharset = charset;
} }
public Integer getComposedMessageLength() public Integer getComposedMessageLength()
{ {
return mComposedMessageLength; return mComposedMessageLength;