From 8d49b7e67629e649f1ab3c8abd665b540f615477 Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 8 Jul 2021 07:28:46 +0200 Subject: [PATCH] Line based indendation --- .../java/eu/faircode/email/StyleHelper.java | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/StyleHelper.java b/app/src/main/java/eu/faircode/email/StyleHelper.java index 1ed0531e85..1ad4366bad 100644 --- a/app/src/main/java/eu/faircode/email/StyleHelper.java +++ b/app/src/main/java/eu/faircode/email/StyleHelper.java @@ -550,24 +550,30 @@ public class StyleHelper { if (paragraph == null) return false; - if (item.getItemId() == R.id.menu_style_indentation_decrease) { - IndentSpan[] indents = edit.getSpans(paragraph.first, paragraph.second, IndentSpan.class); - for (IndentSpan indent : indents) { - int s = edit.getSpanStart(indent); - int e = edit.getSpanEnd(indent); - if (s >= start && e <= end) - edit.removeSpan(indent); + Context context = etBody.getContext(); + int intentSize = context.getResources().getDimensionPixelSize(R.dimen.indent_size); + + QuoteSpan[] quotes = edit.getSpans(start, end, QuoteSpan.class); + for (QuoteSpan quote : quotes) + edit.removeSpan(quote); + + int prev = paragraph.first; + int next = paragraph.first; + while (next < paragraph.second) { + while (next < paragraph.second && edit.charAt(next) != '\n') + next++; + + if (item.getItemId() == R.id.menu_style_indentation_decrease) { + IndentSpan[] indents = edit.getSpans(prev, prev, IndentSpan.class); + if (indents.length > 0) + edit.removeSpan(indents[0]); + } else { + IndentSpan is = new IndentSpan(intentSize); + edit.setSpan(is, prev, next + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); } - } else { - Context context = etBody.getContext(); - int intentSize = context.getResources().getDimensionPixelSize(R.dimen.indent_size); - QuoteSpan[] quotes = edit.getSpans(start, end, QuoteSpan.class); - for (QuoteSpan quote : quotes) - edit.removeSpan(quote); - - IndentSpan is = new IndentSpan(intentSize); - edit.setSpan(is, paragraph.first, paragraph.second, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); + next++; + prev = next; } etBody.setText(edit);