diff --git a/app/src/main/java/eu/faircode/email/HtmlEx.java b/app/src/main/java/eu/faircode/email/HtmlEx.java index af06a672b3..ea6fd38b81 100644 --- a/app/src/main/java/eu/faircode/email/HtmlEx.java +++ b/app/src/main/java/eu/faircode/email/HtmlEx.java @@ -170,7 +170,7 @@ public class HtmlEx { // Only use the last AlignmentSpan with flag SPAN_PARAGRAPH for (int i = alignmentSpans.length - 1; i >= 0; i--) { AlignmentSpan s = alignmentSpans[i]; - if ((text.getSpanFlags(s) & Spanned.SPAN_PARAGRAPH) == Spanned.SPAN_PARAGRAPH) { + if ((text.getSpanFlags(s) & Spanned.SPAN_PARAGRAPH) == Spanned.SPAN_PARAGRAPH || true) { final Layout.Alignment alignment = s.getAlignment(); if (alignment == Layout.Alignment.ALIGN_NORMAL) { textAlign = "text-align:start;"; diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java index 53099ad437..c9f28a45be 100644 --- a/app/src/main/java/eu/faircode/email/HtmlHelper.java +++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java @@ -2043,6 +2043,7 @@ public class HtmlHelper { Layout.Alignment alignment = null; switch (value) { case "left": + case "start": case "justify": alignment = (ltr ? Layout.Alignment.ALIGN_NORMAL : Layout.Alignment.ALIGN_OPPOSITE); break; @@ -2050,6 +2051,7 @@ public class HtmlHelper { alignment = Layout.Alignment.ALIGN_CENTER; break; case "right": + case "end": alignment = (ltr ? Layout.Alignment.ALIGN_OPPOSITE : Layout.Alignment.ALIGN_NORMAL); break; } diff --git a/app/src/main/java/eu/faircode/email/StyleHelper.java b/app/src/main/java/eu/faircode/email/StyleHelper.java index 8eb143b5ea..dc2f434127 100644 --- a/app/src/main/java/eu/faircode/email/StyleHelper.java +++ b/app/src/main/java/eu/faircode/email/StyleHelper.java @@ -6,9 +6,12 @@ import android.content.DialogInterface; import android.content.SharedPreferences; import android.graphics.Typeface; import android.os.Build; +import android.text.Layout; import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.Spanned; +import android.text.TextUtils; +import android.text.style.AlignmentSpan; import android.text.style.BulletSpan; import android.text.style.ForegroundColorSpan; import android.text.style.ImageSpan; @@ -34,6 +37,7 @@ import com.flask.colorpicker.builder.ColorPickerDialogBuilder; import java.util.ArrayList; import java.util.List; +import java.util.Locale; public class StyleHelper { static boolean apply(int action, View anchor, EditText etBody, Object... args) { @@ -115,6 +119,8 @@ public class StyleHelper { return setSize(item); case R.id.group_style_color: return setColor(item); + case R.id.group_style_align: + return setAlignment(item); case R.id.group_style_list: return setList(item); case R.id.group_style_font: @@ -201,6 +207,34 @@ public class StyleHelper { etBody.setSelection(s, e); } + private boolean setAlignment(MenuItem item) { + AlignmentSpan[] spans = t.getSpans(s, e, AlignmentSpan.class); + for (AlignmentSpan span : spans) + t.removeSpan(span); + + Layout.Alignment alignment = null; + boolean ltr = (TextUtils.getLayoutDirectionFromLocale(Locale.getDefault()) == View.LAYOUT_DIRECTION_LTR); + switch (item.getItemId()) { + case R.id.menu_style_align_start: + alignment = (ltr ? Layout.Alignment.ALIGN_NORMAL : Layout.Alignment.ALIGN_OPPOSITE); + break; + case R.id.menu_style_align_center: + alignment = Layout.Alignment.ALIGN_CENTER; + break; + case R.id.menu_style_align_end: + alignment = (ltr ? Layout.Alignment.ALIGN_OPPOSITE : Layout.Alignment.ALIGN_NORMAL); + break; + } + + if (alignment != null) + t.setSpan(new AlignmentSpan.Standard(alignment), s, e, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + etBody.setText(t); + etBody.setSelection(s, e); + + return true; + } + private boolean setList(MenuItem item) { Context context = etBody.getContext(); diff --git a/app/src/main/res/menu/popup_style.xml b/app/src/main/res/menu/popup_style.xml index e6797d13ce..b12cb81381 100644 --- a/app/src/main/res/menu/popup_style.xml +++ b/app/src/main/res/menu/popup_style.xml @@ -30,8 +30,29 @@ + + + + + + + + + + + + @@ -45,10 +66,9 @@ - @@ -57,7 +77,7 @@ + android:orderInCategory="6"> @@ -65,7 +85,7 @@ + android:orderInCategory="7"> @@ -73,7 +93,7 @@ + android:orderInCategory="8"> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4913352467..bbe156d6c4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -934,6 +934,10 @@ Medium Large Color … + Align + Start + Center + End List Bullets Numbered