diff --git a/app/src/main/java/eu/faircode/email/EditTextCompose.java b/app/src/main/java/eu/faircode/email/EditTextCompose.java index 4d1202f74b..82fcf7f945 100644 --- a/app/src/main/java/eu/faircode/email/EditTextCompose.java +++ b/app/src/main/java/eu/faircode/email/EditTextCompose.java @@ -317,37 +317,7 @@ public class EditTextCompose extends FixedEditText { } private boolean insertLine() { - try { - int start = getSelectionStart(); - if (start < 0) - return false; - - Editable edit = getText(); - if (edit == null) - return false; - - if (start == 0 || edit.charAt(start - 1) != '\n') - edit.insert(start++, "\n"); - if (start == edit.length() || edit.charAt(start) != '\n') - edit.insert(start, "\n"); - - edit.insert(start, "\uFFFC"); // Object replacement character - - int colorSeparator = Helper.resolveColor(getContext(), R.attr.colorSeparator); - float stroke = context.getResources().getDisplayMetrics().density; - edit.setSpan( - new LineSpan(colorSeparator, stroke, 0f), - start, start + 1, - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - - setSelection(start + 2); - - return true; - } catch (Throwable ex) { - Log.e(ex); - ToastEx.makeText(context, Log.formatThrowable(ex), Toast.LENGTH_LONG).show(); - return false; - } + return StyleHelper.apply(R.id.menu_style_insert_line, null, null, EditTextCompose.this); } private boolean insertSnippet(long id) { diff --git a/app/src/main/java/eu/faircode/email/StyleHelper.java b/app/src/main/java/eu/faircode/email/StyleHelper.java index 25770abac0..dfd6454be1 100644 --- a/app/src/main/java/eu/faircode/email/StyleHelper.java +++ b/app/src/main/java/eu/faircode/email/StyleHelper.java @@ -51,7 +51,6 @@ import android.text.style.UnderlineSpan; import android.util.LogPrinter; import android.util.Pair; import android.view.MenuItem; -import android.view.SubMenu; import android.view.View; import android.widget.EditText; import android.widget.TextView; @@ -107,6 +106,7 @@ public class StyleHelper { R.id.menu_style_subscript, R.id.menu_style_superscript, R.id.menu_style_strikethrough, + R.id.menu_style_insert_line, R.id.menu_style_password, R.id.menu_style_code, R.id.menu_style_clear @@ -375,7 +375,8 @@ public class StyleHelper { itemId != R.id.menu_style_align && groupId != group_style_align && itemId != R.id.menu_style_list && groupId != group_style_list && itemId != R.id.menu_style_indentation && groupId != group_style_indentation && - itemId != R.id.menu_style_blockquote) { + itemId != R.id.menu_style_blockquote && + itemId != R.id.menu_style_insert_line) { Pair word = getWord(etBody); if (word == null) return false; @@ -418,6 +419,8 @@ public class StyleHelper { return setSuperscript(etBody, start, end, false); else if (itemId == R.id.menu_style_strikethrough) return setStrikeThrough(etBody, start, end, false); + else if (itemId == R.id.menu_style_insert_line) + return setLine(etBody, end); else if (itemId == R.id.menu_style_password) return setPassword(owner, etBody, start, end); else if (itemId == R.id.menu_style_code) { @@ -1191,6 +1194,31 @@ public class StyleHelper { return true; } + static boolean setLine(EditText etBody, int end) { + Log.breadcrumb("style", "action", "line"); + + Context context = etBody.getContext(); + Editable edit = etBody.getText(); + + if (end == 0 || edit.charAt(end - 1) != '\n') + edit.insert(end++, "\n"); + if (end == edit.length() || edit.charAt(end) != '\n') + edit.insert(end, "\n"); + + edit.insert(end, "\uFFFC"); // Object replacement character + + int colorSeparator = Helper.resolveColor(context, R.attr.colorSeparator); + float stroke = context.getResources().getDisplayMetrics().density; + edit.setSpan( + new LineSpan(colorSeparator, stroke, 0f), + end, end + 1, + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + etBody.setSelection(end + 2); + + return true; + } + static boolean setPassword(LifecycleOwner owner, EditText etBody, int start, int end) { Log.breadcrumb("style", "action", "password"); diff --git a/app/src/main/res/layout/include_style_bar.xml b/app/src/main/res/layout/include_style_bar.xml index 68e805d86d..e71336194c 100644 --- a/app/src/main/res/layout/include_style_bar.xml +++ b/app/src/main/res/layout/include_style_bar.xml @@ -254,6 +254,21 @@ app:srcCompat="@drawable/twotone_format_strikethrough_24" app:tint="@color/action_foreground" /> + +