Added inserting lines to style toolbar

pull/210/head
M66B 3 years ago
parent baf40e1eb0
commit 5cd93fa972

@ -317,37 +317,7 @@ public class EditTextCompose extends FixedEditText {
} }
private boolean insertLine() { private boolean insertLine() {
try { return StyleHelper.apply(R.id.menu_style_insert_line, null, null, EditTextCompose.this);
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;
}
} }
private boolean insertSnippet(long id) { private boolean insertSnippet(long id) {

@ -51,7 +51,6 @@ import android.text.style.UnderlineSpan;
import android.util.LogPrinter; import android.util.LogPrinter;
import android.util.Pair; import android.util.Pair;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View; import android.view.View;
import android.widget.EditText; import android.widget.EditText;
import android.widget.TextView; import android.widget.TextView;
@ -107,6 +106,7 @@ public class StyleHelper {
R.id.menu_style_subscript, R.id.menu_style_subscript,
R.id.menu_style_superscript, R.id.menu_style_superscript,
R.id.menu_style_strikethrough, R.id.menu_style_strikethrough,
R.id.menu_style_insert_line,
R.id.menu_style_password, R.id.menu_style_password,
R.id.menu_style_code, R.id.menu_style_code,
R.id.menu_style_clear 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_align && groupId != group_style_align &&
itemId != R.id.menu_style_list && groupId != group_style_list && 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_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<Integer, Integer> word = getWord(etBody); Pair<Integer, Integer> word = getWord(etBody);
if (word == null) if (word == null)
return false; return false;
@ -418,6 +419,8 @@ public class StyleHelper {
return setSuperscript(etBody, start, end, false); return setSuperscript(etBody, start, end, false);
else if (itemId == R.id.menu_style_strikethrough) else if (itemId == R.id.menu_style_strikethrough)
return setStrikeThrough(etBody, start, end, false); 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) else if (itemId == R.id.menu_style_password)
return setPassword(owner, etBody, start, end); return setPassword(owner, etBody, start, end);
else if (itemId == R.id.menu_style_code) { else if (itemId == R.id.menu_style_code) {
@ -1191,6 +1194,31 @@ public class StyleHelper {
return true; 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) { static boolean setPassword(LifecycleOwner owner, EditText etBody, int start, int end) {
Log.breadcrumb("style", "action", "password"); Log.breadcrumb("style", "action", "password");

@ -254,6 +254,21 @@
app:srcCompat="@drawable/twotone_format_strikethrough_24" app:srcCompat="@drawable/twotone_format_strikethrough_24"
app:tint="@color/action_foreground" /> app:tint="@color/action_foreground" />
<ImageButton
android:id="@+id/menu_style_insert_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/title_insert_line"
android:paddingHorizontal="12dp"
android:paddingVertical="6dp"
android:scaleType="fitCenter"
android:tooltipText="@string/title_insert_line"
app:layout_constraintStart_toEndOf="@id/menu_style_strikethrough"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/twotone_horizontal_rule_24"
app:tint="@color/action_foreground" />
<ImageButton <ImageButton
android:id="@+id/menu_style_password" android:id="@+id/menu_style_password"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -264,7 +279,7 @@
android:paddingVertical="6dp" android:paddingVertical="6dp"
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:tooltipText="@string/title_style_protect" android:tooltipText="@string/title_style_protect"
app:layout_constraintStart_toEndOf="@id/menu_style_strikethrough" app:layout_constraintStart_toEndOf="@id/menu_style_insert_line"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/twotone_lock_24" app:srcCompat="@drawable/twotone_lock_24"
app:tint="@color/action_foreground" /> app:tint="@color/action_foreground" />

Loading…
Cancel
Save