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 @@
-
+
+
+
+ -
-
-