From 8fdeccea98ea142cf2f4b8c1f9fee8ddcfee2c79 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 9 Sep 2018 07:00:33 +0000 Subject: [PATCH] Added option to insert links from clipboard Refs #49 --- .../eu/faircode/email/FragmentCompose.java | 28 +++++++++++++++++-- .../res/drawable/baseline_insert_link_24.xml | 10 +++++++ app/src/main/res/menu/menu_compose.xml | 14 +++++++--- app/src/main/res/menu/menu_list.xml | 2 +- app/src/main/res/menu/menu_view.xml | 4 +-- app/src/main/res/values/strings.xml | 2 ++ 6 files changed, 51 insertions(+), 9 deletions(-) create mode 100644 app/src/main/res/drawable/baseline_insert_link_24.xml diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index d5e54f64..0724b7f2 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -20,6 +20,7 @@ package eu.faircode.email; */ import android.Manifest; +import android.content.ClipboardManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -37,6 +38,7 @@ import android.text.SpannableString; import android.text.Spanned; import android.text.TextUtils; import android.text.style.StyleSpan; +import android.text.style.URLSpan; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -396,6 +398,7 @@ public class FragmentCompose extends FragmentEx { super.onPrepareOptionsMenu(menu); menu.findItem(R.id.menu_bold).setVisible(free && working >= 0); menu.findItem(R.id.menu_italic).setVisible(free && working >= 0); + menu.findItem(R.id.menu_link).setVisible(free && working >= 0); menu.findItem(R.id.menu_attachment).setVisible(!free && working >= 0); menu.findItem(R.id.menu_attachment).setEnabled(etBody.isEnabled()); menu.findItem(R.id.menu_addresses).setVisible(!free && working >= 0); @@ -404,6 +407,7 @@ public class FragmentCompose extends FragmentEx { @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { + case R.id.menu_link: case R.id.menu_bold: case R.id.menu_italic: onMenuStyle(item.getItemId()); @@ -429,8 +433,28 @@ public class FragmentCompose extends FragmentEx { } if (start != end) { SpannableString s = new SpannableString(etBody.getText()); - s.setSpan(new StyleSpan(id == R.id.menu_bold ? Typeface.BOLD : Typeface.ITALIC), - start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + 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_link: + Uri uri = null; + ClipboardManager cbm = getContext().getSystemService(ClipboardManager.class); + if (cbm.hasPrimaryClip()) { + String link = cbm.getPrimaryClip().getItemAt(0).coerceToText(getContext()).toString(); + uri = Uri.parse(link); + if (uri.getScheme() == null) + uri = null; + } + if (uri == null) + Snackbar.make(view, R.string.title_clipboard_empty, Snackbar.LENGTH_LONG).show(); + 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/drawable/baseline_insert_link_24.xml b/app/src/main/res/drawable/baseline_insert_link_24.xml new file mode 100644 index 00000000..98991fa1 --- /dev/null +++ b/app/src/main/res/drawable/baseline_insert_link_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/menu/menu_compose.xml b/app/src/main/res/menu/menu_compose.xml index d98a6031..1d6c2077 100644 --- a/app/src/main/res/menu/menu_compose.xml +++ b/app/src/main/res/menu/menu_compose.xml @@ -6,23 +6,29 @@ android:id="@+id/menu_bold" android:icon="@drawable/baseline_format_bold_24" android:title="@string/title_style_bold" - app:showAsAction="always" /> + app:showAsAction="ifRoom" /> + app:showAsAction="ifRoom" /> + + + app:showAsAction="ifRoom" /> + app:showAsAction="ifRoom" /> diff --git a/app/src/main/res/menu/menu_list.xml b/app/src/main/res/menu/menu_list.xml index 5339b089..34589149 100644 --- a/app/src/main/res/menu/menu_list.xml +++ b/app/src/main/res/menu/menu_list.xml @@ -13,5 +13,5 @@ android:id="@+id/menu_folders" android:icon="@drawable/baseline_folder_24" android:title="@string/title_folder_primary" - app:showAsAction="always" /> + app:showAsAction="ifRoom" /> diff --git a/app/src/main/res/menu/menu_view.xml b/app/src/main/res/menu/menu_view.xml index 101850dc..db9f6419 100644 --- a/app/src/main/res/menu/menu_view.xml +++ b/app/src/main/res/menu/menu_view.xml @@ -6,13 +6,13 @@ android:id="@+id/menu_addresses" android:icon="@drawable/baseline_people_24" android:title="@string/title_show_addresses" - app:showAsAction="always" /> + app:showAsAction="ifRoom" /> + app:showAsAction="ifRoom" /> Save Send + Clipboard empty + Insert link Bold Italic Show CC/BCC