diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java
index d5e54f64ef..0724b7f264 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 0000000000..98991fa12c
--- /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 d98a603110..1d6c2077da 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 5339b08943..34589149fb 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 101850dcd6..db9f641913 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