Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0ae7bd8 authored by cketti's avatar cketti
Browse files

Add dir="auto" to HTML when composing messages

parent ca2637ed
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ class EmailTextToHtml private constructor(private val text: String) {
    }

    private fun appendHtmlPrefix() {
        html.append("<pre dir=\"auto\" class=\"$K9MAIL_CSS_CLASS\">")
        html.append("<pre class=\"$K9MAIL_CSS_CLASS\">")
    }

    private fun appendHtmlSuffix() {
+12 −0
Original line number Diff line number Diff line
@@ -8,6 +8,8 @@ class TextToHtml private constructor(
    private val retainOriginalWhitespace: Boolean
) {
    fun appendAsHtmlFragment() {
        appendHtmlPrefix()

        val modifications = HTML_MODIFIERS
            .flatMap { it.findModifications(text) }
            .sortedBy { it.startIndex }
@@ -52,6 +54,16 @@ class TextToHtml private constructor(
        }

        appendHtmlEncoded(currentIndex, text.length)

        appendHtmlSuffix()
    }

    private fun appendHtmlPrefix() {
        html.append("""<div dir="auto">""")
    }

    private fun appendHtmlSuffix() {
        html.append("</div>")
    }

    private fun appendHtmlEncoded(startIndex: Int, endIndex: Int) {
+35 −19
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ import static org.mockito.Mockito.when;
@SuppressWarnings("WeakerAccess")
public class MessageViewInfoExtractorTest extends K9RobolectricTest {
    public static final String BODY_TEXT = "K-9 Mail rocks :>";
    public static final String BODY_TEXT_HTML = "K-9 Mail rocks :&gt;";
    public static final String BODY_TEXT_HTML = "<div dir=\"auto\">K-9 Mail rocks :&gt;</div>";
    public static final String BODY_TEXT_FLOWED = "K-9 Mail rocks :> \r\nflowed line\r\nnot flowed line";
    public static final String SUBJECT = "sabject";
    public static final String PROTECTED_SUBJECT = "protected subject";
@@ -126,8 +126,8 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest {
        ViewableExtractedText container = messageViewInfoExtractor.extractTextFromViewables(outputViewableParts);

        String expectedHtml =
                "<pre dir=\"auto\" class=\"k9mail\">" +
                "K-9 Mail rocks :&gt;" +
                "<pre class=\"k9mail\">" +
                BODY_TEXT_HTML +
                "</pre>";

        assertEquals(BODY_TEXT, container.text);
@@ -153,8 +153,10 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest {
        String expectedText = "K-9 Mail rocks :> flowed line\r\n" +
                "not flowed line";
        String expectedHtml =
                "<pre dir=\"auto\" class=\"k9mail\">" +
                "<pre class=\"k9mail\">" +
                        "<div dir=\"auto\">" +
                        "K-9 Mail rocks :&gt; flowed line<br>not flowed line" +
                        "</div>" +
                        "</pre>";

        assertEquals(expectedText, container.text);
@@ -214,13 +216,17 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest {
                "------------------------------------------------------------------------\r\n\r\n" +
                bodyText2;
        String expectedHtml =
                "<pre dir=\"auto\" class=\"k9mail\">" +
                "<pre class=\"k9mail\">" +
                "<div dir=\"auto\">" +
                bodyText1 +
                "</div>" +
                "</pre>" +
                "<p style=\"margin-top: 2.5em; margin-bottom: 1em; " +
                        "border-bottom: 1px solid #000\"></p>" +
                "<pre dir=\"auto\" class=\"k9mail\">" +
                "<pre class=\"k9mail\">" +
                "<div dir=\"auto\">" +
                bodyText2 +
                "</div>" +
                "</pre>";


@@ -280,7 +286,7 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest {
                "\r\n" +
                innerBodyText;
        String expectedHtml =
                "<pre dir=\"auto\" class=\"k9mail\">" +
                "<pre class=\"k9mail\">" +
                        BODY_TEXT_HTML +
                "</pre>" +
                "<p style=\"margin-top: 2.5em; margin-bottom: 1em; border-bottom: " +
@@ -300,8 +306,10 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest {
                "<td>Subject</td>" +
                "</tr>" +
                "</table>" +
                "<pre dir=\"auto\" class=\"k9mail\">" +
                "<pre class=\"k9mail\">" +
                "<div dir=\"auto\">" +
                innerBodyText +
                "</div>" +
                "</pre>";

        assertEquals(expectedText, container.text);
@@ -356,12 +364,20 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest {
        String expectedHtmlText = "<table style=\"border: 0\">" +
                "<tr><th style=\"text-align: left; vertical-align: top;\">Subject:</th><td>(No subject)</td></tr>" +
                "</table>" +
                "<pre dir=\"auto\" class=\"k9mail\">text body of first message<br></pre>" +
                "<pre class=\"k9mail\">" +
                "<div dir=\"auto\">" +
                "text body of first message<br>" +
                "</div>" +
                "</pre>" +
                "<p style=\"margin-top: 2.5em; margin-bottom: 1em; border-bottom: 1px solid #000\"></p>" +
                "<table style=\"border: 0\">" +
                "<tr><th style=\"text-align: left; vertical-align: top;\">Subject:</th><td>subject of second message</td></tr>" +
                "</table>" +
                "<pre dir=\"auto\" class=\"k9mail\">text part of second message<br></pre>";
                "<pre class=\"k9mail\">" +
                "<div dir=\"auto\">" +
                "text part of second message<br>" +
                "</div>" +
                "</pre>";


        assertEquals(4, outputViewableParts.size());
@@ -389,7 +405,7 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest {
                false);


        assertEquals("<pre dir=\"auto\" class=\"k9mail\">text</pre>", messageViewInfo.text);
        assertEquals("<pre class=\"k9mail\"><div dir=\"auto\">text</div></pre>", messageViewInfo.text);
        assertSame(attachmentViewInfo, messageViewInfo.attachments.get(0));
        assertNull(messageViewInfo.cryptoResultAnnotation);
        assertTrue(messageViewInfo.extraAttachments.isEmpty());
@@ -411,7 +427,7 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest {
                false);


        assertEquals("<pre dir=\"auto\" class=\"k9mail\">text</pre>", messageViewInfo.text);
        assertEquals("<pre class=\"k9mail\"><div dir=\"auto\">text</div></pre>", messageViewInfo.text);
        assertSame(annotation, messageViewInfo.cryptoResultAnnotation);
        assertSame(message, messageViewInfo.message);
        assertSame(message, messageViewInfo.rootPart);
@@ -436,7 +452,7 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest {
                false);


        assertEquals("<pre dir=\"auto\" class=\"k9mail\">replacement text</pre>", messageViewInfo.text);
        assertEquals("<pre class=\"k9mail\"><div dir=\"auto\">replacement text</div></pre>", messageViewInfo.text);
        assertSame(annotation, messageViewInfo.cryptoResultAnnotation);
        assertSame(message, messageViewInfo.message);
        assertSame(replacementPart, messageViewInfo.rootPart);
@@ -464,7 +480,7 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest {
                false);


        assertEquals("<pre dir=\"auto\" class=\"k9mail\">text</pre>", messageViewInfo.text);
        assertEquals("<pre class=\"k9mail\"><div dir=\"auto\">text</div></pre>", messageViewInfo.text);
        assertSame(annotation, messageViewInfo.cryptoResultAnnotation);
        assertEquals("extra text", messageViewInfo.extraText);
        assertTrue(messageViewInfo.attachments.isEmpty());
@@ -494,7 +510,7 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest {
                false);


        assertEquals("<pre dir=\"auto\" class=\"k9mail\">text</pre>", messageViewInfo.text);
        assertEquals("<pre class=\"k9mail\"><div dir=\"auto\">text</div></pre>", messageViewInfo.text);
        assertSame(annotation, messageViewInfo.cryptoResultAnnotation);
        assertSame(attachmentViewInfo, messageViewInfo.extraAttachments.get(0));
        assertTrue(messageViewInfo.attachments.isEmpty());
@@ -535,7 +551,7 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest {
                true);

        assertSame(openPgpResultAnnotation, messageViewInfo.cryptoResultAnnotation);
        assertEquals("<pre dir=\"auto\" class=\"k9mail\">encrypted text</pre>", messageViewInfo.text);
        assertEquals("<pre class=\"k9mail\"><div dir=\"auto\">encrypted text</div></pre>", messageViewInfo.text);
        assertTrue(messageViewInfo.attachments.isEmpty());
        assertTrue(messageViewInfo.extraAttachments.isEmpty());
    }
@@ -562,7 +578,7 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest {
                true);

        assertSame(openPgpResultAnnotation, messageViewInfo.cryptoResultAnnotation);
        assertEquals("<pre dir=\"auto\" class=\"k9mail\">encrypted text</pre>", messageViewInfo.text);
        assertEquals("<pre class=\"k9mail\"><div dir=\"auto\">encrypted text</div></pre>", messageViewInfo.text);
        assertEquals(PROTECTED_SUBJECT, messageViewInfo.subject);
        assertTrue(messageViewInfo.attachments.isEmpty());
        assertTrue(messageViewInfo.extraAttachments.isEmpty());
@@ -580,7 +596,7 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest {
        MessageViewInfo messageViewInfo = messageViewInfoExtractor.extractMessageForView(message, null,
                false);

        assertEquals("<pre dir=\"auto\" class=\"k9mail\">text</pre>", messageViewInfo.text);
        assertEquals("<pre class=\"k9mail\"><div dir=\"auto\">text</div></pre>", messageViewInfo.text);
        assertNull(messageViewInfo.cryptoResultAnnotation);
        assertTrue(messageViewInfo.attachments.isEmpty());
        assertTrue(messageViewInfo.extraAttachments.isEmpty());
@@ -604,7 +620,7 @@ public class MessageViewInfoExtractorTest extends K9RobolectricTest {
        MessageViewInfo messageViewInfo = messageViewInfoExtractor.extractMessageForView(message, null,
                false);

        assertEquals("<pre dir=\"auto\" class=\"k9mail\">text</pre>", messageViewInfo.text);
        assertEquals("<pre class=\"k9mail\"><div dir=\"auto\">text</div></pre>", messageViewInfo.text);
        assertNull(messageViewInfo.cryptoResultAnnotation);
        assertSame(mock, messageViewInfo.attachments.get(0));
        assertTrue(messageViewInfo.extraAttachments.isEmpty());
+3 −3
Original line number Diff line number Diff line
@@ -12,14 +12,14 @@ class TextBodyBuilderTest(val testData: TestData) {
    companion object {

        private const val MESSAGE_TEXT = "my message\r\nwith two lines"
        private const val MESSAGE_TEXT_HTML = "my message<br>with two lines"
        private const val MESSAGE_TEXT_HTML = "<div dir=\"auto\">my message<br>with two lines</div>"
        private const val QUOTED_TEXT = ">quoted text\r\n>-- \r\n>Other signature"
        private const val QUOTED_HTML_BODY = "<blockquote>quoted text</blockquote>"
        private const val QUOTED_HTML_TAGS_END = "</body>\n</html>"
        private const val QUOTED_HTML_TAGS_START = "<!DOCTYPE html><html><head></head><body>"
        private const val SIGNATURE_TEXT = "-- \r\n\r\nsignature\r\n  indented second line"
        private const val SIGNATURE_TEXT_HTML =
            "<div class='k9mail-signature'>-- <br><br>signature<br>\u00A0 indented second line</div>"
        private const val SIGNATURE_TEXT_HTML = "<div dir=\"auto\"><div class='k9mail-signature'>-- <br>" +
            "<br>signature<br>\u00A0 indented second line</div></div>"

        @JvmStatic
        @Parameterized.Parameters(name = "{index}: {0}")
+75 −23
Original line number Diff line number Diff line
@@ -27,24 +27,36 @@ class HtmlConverterTest {

        assertThat(result).isEqualTo(
            """
            |<pre dir="auto" class="k9mail">
            |<pre class="k9mail">
            |<div dir="auto">
            |Panama!<br>
            |<br>
            |Bob Barker &lt;bob@aol.com&gt; wrote:<br>
            |</div>
            |<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;">
            |<div dir="auto">
            | a canal<br>
            |<br>
            | Dorothy Jo Gideon &lt;dorothy@aol.com&gt; espoused:<br>
            |</div>
            |<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;">
            |<div dir="auto">
            |A man, a plan...<br>
            |</div>
            |</blockquote>
            |<div dir="auto">
            |Too easy!<br>
            |</div>
            |</blockquote>
            |<div dir="auto">
            |<br>
            |Nice job :)<br>
            |</div>
            |<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;">
            |<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;">
            |<div dir="auto">
            |Guess!
            |</div>
            |</blockquote>
            |</blockquote>
            |</pre>
@@ -70,16 +82,20 @@ class HtmlConverterTest {

        assertThat(result).isEqualTo(
            """
            |<pre dir="auto" class="k9mail">
            |<pre class="k9mail">
            |<div dir="auto">
            |*facepalm*<br>
            |<br>
            |Bob Barker &lt;bob@aol.com&gt; wrote:<br>
            |</div>
            |<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;">
            |<div dir="auto">
            | A wise man once said...<br>
            |<br>
            |     LOL F1RST!!!!!<br>
            |<br>
            | :)
            |</div>
            |</blockquote>
            |</pre>
            """.trimMargin().removeLineBreaks()
@@ -103,20 +119,34 @@ class HtmlConverterTest {

        assertThat(result).isEqualTo(
            """
            |<pre dir="auto" class="k9mail">
            |<pre class="k9mail">
            |<div dir="auto">
            |zero<br>
            |</div>
            |<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;">
            |<div dir="auto">
            |one<br>
            |</div>
            |<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;">
            |<div dir="auto">
            |two<br>
            |</div>
            |<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;">
            |<div dir="auto">
            |three<br>
            |</div>
            |<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;">
            |<div dir="auto">
            |four<br>
            |</div>
            |<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #e9b96e; padding-left: 1ex;">
            |<div dir="auto">
            |five<br>
            |</div>
            |<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ccc; padding-left: 1ex;">
            |<div dir="auto">
            |six
            |</div>
            |</blockquote>
            |</blockquote>
            |</blockquote>
@@ -142,10 +172,12 @@ class HtmlConverterTest {

        assertThat(result).isEqualTo(
            """
            |<pre dir="auto" class="k9mail">
            |<pre class="k9mail">
            |<div dir="auto">
            |foo<br>
            | bar<br>
            |  baz<br>
            |</div>
            |</pre>
            """.trimMargin().removeLineBreaks()
        )
@@ -167,13 +199,17 @@ class HtmlConverterTest {

        assertThat(result).isEqualTo(
            """
            |<pre dir="auto" class="k9mail">
            |<pre class="k9mail">
            |<div dir="auto">
            | <br>
            |  &amp;<br>
            |    <br>
            |   &lt;<br>
            |</div>
            |<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;">
            |<div dir="auto">
            |<br>
            |</div>
            |</blockquote>
            |</pre>
            """.trimMargin().removeLineBreaks()
@@ -201,7 +237,8 @@ class HtmlConverterTest {

        assertThat(result).isEqualTo(
            """
            <pre dir="auto" class="k9mail">
            <pre class="k9mail">
            <div dir="auto">
            text
            <hr>
            some other text
@@ -213,6 +250,7 @@ class HtmlConverterTest {
            other direction
            <hr>
            end
            </div>
            </pre>
            """.trimIndent().removeLineBreaks()
        )
@@ -231,10 +269,12 @@ class HtmlConverterTest {

        assertThat(result).isEqualTo(
            """
            <pre dir="auto" class="k9mail">
            <pre class="k9mail">
            <div dir="auto">
            hello<br>
            --- --- --- --- ---<br>
            foo bar
            </div>
            </pre>
            """.trimIndent().removeLineBreaks()
        )
@@ -254,10 +294,12 @@ class HtmlConverterTest {

        assertThat(result).isEqualTo(
            """
            <pre dir="auto" class="k9mail">
            <pre class="k9mail">
            <div dir="auto">
            hello
            <hr>
            foo bar
            </div>
            </pre>
            """.trimIndent().removeLineBreaks()
        )
@@ -271,9 +313,11 @@ class HtmlConverterTest {

        assertThat(result).isEqualTo(
            """
            <pre dir="auto" class="k9mail">
            <pre class="k9mail">
            <div dir="auto">
            hello----<br>
            <br>
            </div>
            </pre>
            """.trimIndent().removeLineBreaks()
        )
@@ -285,7 +329,7 @@ class HtmlConverterTest {

        val result = HtmlConverter.textToHtml(text)

        assertThat(result).isEqualTo("""<pre dir="auto" class="k9mail">--<br></pre>""")
        assertThat(result).isEqualTo("""<pre class="k9mail"><div dir="auto">--<br></div></pre>""")
    }

    @Test
@@ -294,7 +338,7 @@ class HtmlConverterTest {

        val result = HtmlConverter.textToHtml(text)

        assertThat(result).isEqualTo("""<pre dir="auto" class="k9mail">==<br></pre>""")
        assertThat(result).isEqualTo("""<pre class="k9mail"><div dir="auto">==<br></div></pre>""")
    }

    @Test
@@ -303,7 +347,7 @@ class HtmlConverterTest {

        val result = HtmlConverter.textToHtml(text)

        assertThat(result).isEqualTo("""<pre dir="auto" class="k9mail">__<br></pre>""")
        assertThat(result).isEqualTo("""<pre class="k9mail"><div dir="auto">__<br></div></pre>""")
    }

    @Test
@@ -319,7 +363,7 @@ class HtmlConverterTest {

        val result = HtmlConverter.textToHtml(text)

        assertThat(result).isEqualTo("""<pre dir="auto" class="k9mail"><hr></pre>""")
        assertThat(result).isEqualTo("""<pre class="k9mail"><div dir="auto"><hr></div></pre>""")
    }

    @Test
@@ -330,9 +374,11 @@ class HtmlConverterTest {

        assertThat(result).isEqualTo(
            """
            <pre dir="auto" class="k9mail">
            <pre class="k9mail">
            <div dir="auto">
            <hr>
            foo bar
            </div>
            </pre>
            """.trimIndent().removeLineBreaks()
        )
@@ -346,9 +392,11 @@ class HtmlConverterTest {

        assertThat(result).isEqualTo(
            """
            <pre dir="auto" class="k9mail">
            <pre class="k9mail">
            <div dir="auto">
            hello
            <hr>
            </div>
            </pre>
            """.trimIndent().removeLineBreaks()
        )
@@ -367,10 +415,12 @@ class HtmlConverterTest {

        assertThat(result).isEqualTo(
            """
            <pre dir="auto" class="k9mail">
            <pre class="k9mail">
            <div dir="auto">
            hello
            <hr>
            world
            </div>
            </pre>
            """.trimIndent().removeLineBreaks()
        )
@@ -389,12 +439,14 @@ class HtmlConverterTest {

        assertThat(result).isEqualTo(
            """
            <pre dir="auto" class="k9mail">
            <pre class="k9mail">
            <div dir="auto">
            text<br>
            <div class='k9mail-signature'>
            -- <br>
            signature with url: <a href="https://domain.example/">https://domain.example/</a>
            </div>
            </div>
            </pre>
            """.trimIndent().removeLineBreaks()
        )
@@ -406,7 +458,7 @@ class HtmlConverterTest {

        val result = HtmlConverter.textToHtmlFragment(text)

        assertThat(result).isEqualTo("\u00A0foo")
        assertThat(result).isEqualTo("<div dir=\"auto\">\u00A0foo</div>")
    }

    @Test
@@ -415,7 +467,7 @@ class HtmlConverterTest {

        val result = HtmlConverter.textToHtmlFragment(text)

        assertThat(result).isEqualTo("\u00A0 foo")
        assertThat(result).isEqualTo("<div dir=\"auto\">\u00A0 foo</div>")
    }

    @Test
@@ -424,7 +476,7 @@ class HtmlConverterTest {

        val result = HtmlConverter.textToHtmlFragment(text)

        assertThat(result).isEqualTo("\u00A0\u00A0\u00A0 some words here")
        assertThat(result).isEqualTo("<div dir=\"auto\">\u00A0\u00A0\u00A0 some words here</div>")
    }

    @Test
@@ -433,7 +485,7 @@ class HtmlConverterTest {

        val result = HtmlConverter.textToHtmlFragment(text)

        assertThat(result).isEqualTo("foo\u00A0 bar")
        assertThat(result).isEqualTo("<div dir=\"auto\">foo\u00A0 bar</div>")
    }

    @Test
@@ -442,7 +494,7 @@ class HtmlConverterTest {

        val result = HtmlConverter.textToHtmlFragment(text)

        assertThat(result).isEqualTo("foo <br>")
        assertThat(result).isEqualTo("<div dir=\"auto\">foo <br></div>")
    }

    @Test
@@ -451,7 +503,7 @@ class HtmlConverterTest {

        val result = HtmlConverter.textToHtmlFragment(text)

        assertThat(result).isEqualTo("some words here\u00A0\u00A0 <br>")
        assertThat(result).isEqualTo("<div dir=\"auto\">some words here\u00A0\u00A0 <br></div>")
    }

    @Test