From 9f1e2717a6e4b01cb3c00b08c709efeed581fd1e Mon Sep 17 00:00:00 2001 From: Andrew Chen Date: Mon, 23 Apr 2012 15:10:34 -0700 Subject: [PATCH] Colorize quoted text that has been converted to html. Like Thunderbird, but optimized for mobile (no right margin quote bar, thinner left margin quote bar). --- src/com/fsck/k9/helper/HtmlConverter.java | 34 +++++++++++++++++-- .../com/fsck/k9/helper/HtmlConverterTest.java | 32 +++++++++++++++-- 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/src/com/fsck/k9/helper/HtmlConverter.java b/src/com/fsck/k9/helper/HtmlConverter.java index 61cac6912..8e2d57a13 100644 --- a/src/com/fsck/k9/helper/HtmlConverter.java +++ b/src/com/fsck/k9/helper/HtmlConverter.java @@ -190,8 +190,9 @@ public class HtmlConverter { return buff.toString(); } + private static final String HTML_BLOCKQUOTE_COLOR_TOKEN = "$$COLOR$$"; private static final String HTML_BLOCKQUOTE_START = "
"; + "style=\"margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid $$COLOR$$; padding-left: 1ex;\">"; private static final String HTML_BLOCKQUOTE_END = "
"; private static final String HTML_NEWLINE = "
"; @@ -267,7 +268,7 @@ public class HtmlConverter { // Add/remove blockquotes by comparing this line's quotes to the previous line's quotes. if(quotesThisLine > quoteDepth) { for(int i = quoteDepth; i < quotesThisLine; i++) { - buff.append(HTML_BLOCKQUOTE_START); + buff.append(HTML_BLOCKQUOTE_START.replace(HTML_BLOCKQUOTE_COLOR_TOKEN, getQuoteColor(i + 1))); } } else if(quotesThisLine < quoteDepth) { for(int i = quoteDepth; i > quotesThisLine; i--) { @@ -326,6 +327,35 @@ public class HtmlConverter { return text; } + protected static final String QUOTE_COLOR_DEFAULT = "#ccc"; + protected static final String QUOTE_COLOR_LEVEL_1 = "#729fcf"; + protected static final String QUOTE_COLOR_LEVEL_2 = "#ad7fa8"; + protected static final String QUOTE_COLOR_LEVEL_3 = "#8ae234"; + protected static final String QUOTE_COLOR_LEVEL_4 = "#fcaf3e"; + protected static final String QUOTE_COLOR_LEVEL_5 = "#e9b96e"; + + /** + * Return an HTML hex color string for a given quote level. + * @param level Quote level + * @return Hex color string with prepended #. + */ + protected static String getQuoteColor(final int level) { + switch(level) { + case 1: + return QUOTE_COLOR_LEVEL_1; + case 2: + return QUOTE_COLOR_LEVEL_2; + case 3: + return QUOTE_COLOR_LEVEL_3; + case 4: + return QUOTE_COLOR_LEVEL_4; + case 5: + return QUOTE_COLOR_LEVEL_5; + default: + return QUOTE_COLOR_DEFAULT; + } + } + /** * Searches for link-like text in a string and turn it into a link. Append the result to * outputBuffer. text is not modified. diff --git a/tests/src/com/fsck/k9/helper/HtmlConverterTest.java b/tests/src/com/fsck/k9/helper/HtmlConverterTest.java index d19affa62..75913f831 100644 --- a/tests/src/com/fsck/k9/helper/HtmlConverterTest.java +++ b/tests/src/com/fsck/k9/helper/HtmlConverterTest.java @@ -7,9 +7,11 @@ import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; +import static junit.framework.Assert.*; + public class HtmlConverterTest { // Useful if you want to write stuff to a file for debugging in a browser. - private static final boolean WRITE_TO_FILE = false; + private static final boolean WRITE_TO_FILE = true; private static final String OUTPUT_FILE = "C:/temp/parse.html"; @Test @@ -27,7 +29,7 @@ public class HtmlConverterTest { ">> Guess!"; String result = HtmlConverter.textToHtml(message, false); writeToFile(result); - Assert.assertEquals("
Panama!

Bob Barker <bob@aol.com> wrote:
a canal

Dorothy Jo Gideon <dorothy@aol.com> espoused:
A man, a plan...
Too easy!

Nice job :)
Guess!
", result); + assertEquals("
Panama!

Bob Barker <bob@aol.com> wrote:
a canal

Dorothy Jo Gideon <dorothy@aol.com> espoused:
A man, a plan...
Too easy!

Nice job :)
Guess!
", result); } @Test @@ -42,7 +44,31 @@ public class HtmlConverterTest { "> :)"; String result = HtmlConverter.textToHtml(message, false); writeToFile(result); - Assert.assertEquals("
*facepalm*

Bob Barker <bob@aol.com> wrote:
A wise man once said...

LOL F1RST!!!!!

:)
", result); + assertEquals("
*facepalm*

Bob Barker <bob@aol.com> wrote:
A wise man once said...

LOL F1RST!!!!!

:)
", result); + } + + @Test + public void testQuoteDepthColor() { + assertEquals(HtmlConverter.getQuoteColor(1), HtmlConverter.QUOTE_COLOR_LEVEL_1); + assertEquals(HtmlConverter.getQuoteColor(2), HtmlConverter.QUOTE_COLOR_LEVEL_2); + assertEquals(HtmlConverter.getQuoteColor(3), HtmlConverter.QUOTE_COLOR_LEVEL_3); + assertEquals(HtmlConverter.getQuoteColor(4), HtmlConverter.QUOTE_COLOR_LEVEL_4); + assertEquals(HtmlConverter.getQuoteColor(5), HtmlConverter.QUOTE_COLOR_LEVEL_5); + + assertEquals(HtmlConverter.getQuoteColor(-1), HtmlConverter.QUOTE_COLOR_DEFAULT); + assertEquals(HtmlConverter.getQuoteColor(0), HtmlConverter.QUOTE_COLOR_DEFAULT); + assertEquals(HtmlConverter.getQuoteColor(6), HtmlConverter.QUOTE_COLOR_DEFAULT); + + String message = "zero\n" + + "> one\n" + + ">> two\n" + + ">>> three\n" + + ">>>> four\n" + + ">>>>> five\n" + + ">>>>>> six"; + String result = HtmlConverter.textToHtml(message, false); + writeToFile(result); + assertEquals("
zero
one
two
three
four
five
six
", result); } private void writeToFile(final String content) {