diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 215fe2aeae..f8d6bf1e18 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -582,21 +582,26 @@ public class FragmentCompose extends FragmentEx { if (start == end) Snackbar.make(view, R.string.title_no_selection, Snackbar.LENGTH_LONG).show(); else { - SpannableString s = new SpannableString(etBody.getText()); + final SpannableString s = new SpannableString(etBody.getText()); + switch (id) { case R.id.menu_bold: s.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); break; + case R.id.menu_italic: s.setSpan(new StyleSpan(Typeface.ITALIC), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); break; + case R.id.menu_clear: for (Object span : s.getSpans(start, end, Object.class)) if (!(span instanceof ImageSpan)) s.removeSpan(span); break; + case R.id.menu_link: Uri uri = null; + ClipboardManager cbm = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE); if (cbm.hasPrimaryClip()) { String link = cbm.getPrimaryClip().getItemAt(0).coerceToText(getContext()).toString(); @@ -604,12 +609,36 @@ public class FragmentCompose extends FragmentEx { if (uri.getScheme() == null) uri = null; } - if (uri == null) - Snackbar.make(view, R.string.title_clipboard_empty, Snackbar.LENGTH_LONG).show(); - else + + if (uri == null) { + View view = LayoutInflater.from(getContext()).inflate(R.layout.dialog_link, null); + final int fStart = start; + final int fEnd = end; + final EditText etLink = view.findViewById(R.id.etLink); + etLink.setText("https://"); + new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner()) + .setView(view) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + s.setSpan(new URLSpan(etLink.getText().toString()), fStart, fEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + etBody.setText(s); + etBody.setSelection(fEnd); + } + }) + .show(); + new Handler().post(new Runnable() { + @Override + public void run() { + etLink.requestFocus(); + } + }); + return; + } else s.setSpan(new URLSpan(uri.toString()), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); break; } + etBody.setText(s); etBody.setSelection(end); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 853c6a27c7..8e64f18d0c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -309,7 +309,6 @@ View Nothing selected - Clipboard empty Bold Italic Clear formatting