From ecd5239c2b4bf14924e9e135fd8809be68fd212a Mon Sep 17 00:00:00 2001 From: Doug Sparling Date: Thu, 23 Jul 2015 00:07:21 -0500 Subject: [PATCH] Don't use StringReader in HtmlConverter as calls to read have unnecessary locking. --- .../com/fsck/k9/helper/HtmlConverter.java | 117 ++++++++---------- 1 file changed, 51 insertions(+), 66 deletions(-) diff --git a/k9mail/src/main/java/com/fsck/k9/helper/HtmlConverter.java b/k9mail/src/main/java/com/fsck/k9/helper/HtmlConverter.java index 28bf875b4..ac63716f9 100644 --- a/k9mail/src/main/java/com/fsck/k9/helper/HtmlConverter.java +++ b/k9mail/src/main/java/com/fsck/k9/helper/HtmlConverter.java @@ -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
as two newlines, but
as one newline. Use
so our messages aren't - // doublespaced. - buff.append("
"); - 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
as two newlines, but
as one newline. Use
so our messages aren't + // doublespaced. + buff.append("
"); + 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) {