diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index a3bd4b6584..766ee7ede4 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -2376,21 +2376,8 @@ public class AdapterMessage extends RecyclerView.Adapter successive = new ArrayList<>(); - for (Element quote : document.select("blockquote")) - if (HtmlHelper.hasBorder(quote)) { - Element next = quote.nextElementSibling(); - if (next != null && - "blockquote".equals(next.tagName()) && - HtmlHelper.hasBorder(next)) - successive.add(quote); - else - quote.html("…"); - } - for (Element quote : successive) - quote.remove(); - } + if (!show_quotes) + HtmlHelper.collapseQuotes(document); // Draw images SpannableStringBuilder ssb = HtmlHelper.fromDocument(context, document, new Html.ImageGetter() { diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java index d1a5c453c5..b891a874d8 100644 --- a/app/src/main/java/eu/faircode/email/HtmlHelper.java +++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java @@ -2018,6 +2018,39 @@ public class HtmlHelper { return "true".equals(e.attr("x-border")); } + static void collapseQuotes(Document document) { + document.body().filter(new NodeFilter() { + private int level = 0; + + @Override + public FilterResult head(Node node, int depth) { + if (level > 0) + return FilterResult.REMOVE; + + if (node instanceof Element) { + Element element = (Element) node; + if ("blockquote".equals(element.tagName()) && hasBorder(element)) { + Element prev = element.previousElementSibling(); + if (prev != null && + "blockquote".equals(prev.tagName()) && hasBorder(prev)) + return FilterResult.REMOVE; + level++; + } + } + return FilterResult.CONTINUE; + } + + @Override + public FilterResult tail(Node node, int depth) { + if ("blockquote".equals(node.nodeName())) + level--; + return FilterResult.CONTINUE; + } + }); + + document.select("blockquote").html("…"); + } + static String truncate(String text, int at) { if (text.length() < at) return text;