mirror of
https://github.com/moparisthebest/k-9
synced 2024-11-26 19:22:23 -05:00
Don't use StringReader in HtmlConverter as calls to read have unnecessary locking.
This commit is contained in:
parent
9050ef16a2
commit
ecd5239c2b
@ -2,13 +2,10 @@ package com.fsck.k9.helper;
|
||||
|
||||
import android.text.*;
|
||||
import android.text.Html.TagHandler;
|
||||
import android.util.Log;
|
||||
import com.fsck.k9.K9;
|
||||
|
||||
import org.xml.sax.XMLReader;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Locale;
|
||||
@ -211,29 +208,23 @@ public class HtmlConverter {
|
||||
// Encode HTML entities to make sure we don't display something evil.
|
||||
text = TextUtils.htmlEncode(text);
|
||||
|
||||
StringReader reader = new StringReader(text);
|
||||
StringBuilder buff = new StringBuilder(text.length() + TEXT_TO_HTML_EXTRA_BUFFER_LENGTH);
|
||||
|
||||
buff.append(htmlifyMessageHeader());
|
||||
|
||||
int c;
|
||||
try {
|
||||
while ((c = reader.read()) != -1) {
|
||||
switch (c) {
|
||||
case '\n':
|
||||
// pine treats <br> as two newlines, but <br/> as one newline. Use <br/> so our messages aren't
|
||||
// doublespaced.
|
||||
buff.append("<br />");
|
||||
break;
|
||||
case '\r':
|
||||
break;
|
||||
default:
|
||||
buff.append((char)c);
|
||||
}//switch
|
||||
}
|
||||
} catch (IOException e) {
|
||||
//Should never happen
|
||||
Log.e(K9.LOG_TAG, "Could not read string to convert text to HTML:", e);
|
||||
for (int index = 0; index < text.length(); index++) {
|
||||
char c = text.charAt(index);
|
||||
switch (c) {
|
||||
case '\n':
|
||||
// pine treats <br> as two newlines, but <br/> as one newline. Use <br/> so our messages aren't
|
||||
// doublespaced.
|
||||
buff.append("<br />");
|
||||
break;
|
||||
case '\r':
|
||||
break;
|
||||
default:
|
||||
buff.append(c);
|
||||
}//switch
|
||||
}
|
||||
|
||||
buff.append(htmlifyMessageFooter());
|
||||
@ -274,60 +265,54 @@ public class HtmlConverter {
|
||||
if (text.length() > MAX_SMART_HTMLIFY_MESSAGE_LENGTH) {
|
||||
return simpleTextToHtml(text);
|
||||
}
|
||||
StringReader reader = new StringReader(text);
|
||||
StringBuilder buff = new StringBuilder(text.length() + TEXT_TO_HTML_EXTRA_BUFFER_LENGTH);
|
||||
boolean isStartOfLine = true; // Are we currently at the start of a line?
|
||||
int spaces = 0;
|
||||
int quoteDepth = 0; // Number of DIVs deep we are.
|
||||
int quotesThisLine = 0; // How deep we should be quoting for this line.
|
||||
try {
|
||||
int c;
|
||||
while ((c = reader.read()) != -1) {
|
||||
if (isStartOfLine) {
|
||||
switch (c) {
|
||||
case ' ':
|
||||
spaces++;
|
||||
break;
|
||||
case '>':
|
||||
quotesThisLine++;
|
||||
spaces = 0;
|
||||
break;
|
||||
case '\n':
|
||||
appendbq(buff, quotesThisLine, quoteDepth);
|
||||
quoteDepth = quotesThisLine;
|
||||
for (int index = 0; index < text.length(); index++) {
|
||||
char c = text.charAt(index);
|
||||
if (isStartOfLine) {
|
||||
switch (c) {
|
||||
case ' ':
|
||||
spaces++;
|
||||
break;
|
||||
case '>':
|
||||
quotesThisLine++;
|
||||
spaces = 0;
|
||||
break;
|
||||
case '\n':
|
||||
appendbq(buff, quotesThisLine, quoteDepth);
|
||||
quoteDepth = quotesThisLine;
|
||||
|
||||
appendsp(buff, spaces);
|
||||
spaces = 0;
|
||||
appendsp(buff, spaces);
|
||||
spaces = 0;
|
||||
|
||||
appendchar(buff, c);
|
||||
isStartOfLine = true;
|
||||
quotesThisLine = 0;
|
||||
break;
|
||||
default:
|
||||
isStartOfLine = false;
|
||||
|
||||
appendbq(buff, quotesThisLine, quoteDepth);
|
||||
quoteDepth = quotesThisLine;
|
||||
|
||||
appendsp(buff, spaces);
|
||||
spaces = 0;
|
||||
|
||||
appendchar(buff, c);
|
||||
isStartOfLine = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
appendchar(buff, c);
|
||||
if (c == '\n') {
|
||||
isStartOfLine = true;
|
||||
quotesThisLine = 0;
|
||||
}
|
||||
isStartOfLine = true;
|
||||
quotesThisLine = 0;
|
||||
break;
|
||||
default:
|
||||
isStartOfLine = false;
|
||||
|
||||
appendbq(buff, quotesThisLine, quoteDepth);
|
||||
quoteDepth = quotesThisLine;
|
||||
|
||||
appendsp(buff, spaces);
|
||||
spaces = 0;
|
||||
|
||||
appendchar(buff, c);
|
||||
isStartOfLine = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
appendchar(buff, c);
|
||||
if (c == '\n') {
|
||||
isStartOfLine = true;
|
||||
quotesThisLine = 0;
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
//Should never happen
|
||||
Log.e(K9.LOG_TAG, "Could not read string to convert text to HTML:", e);
|
||||
}
|
||||
// Close off any quotes we may have opened.
|
||||
if (quoteDepth > 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user