From f19314c2dec558284536e6ff12b71f6dbfbe87e0 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 21 Jan 2022 09:07:28 +0100 Subject: [PATCH] Fixed text context actions --- .../java/eu/faircode/email/FixedEditText.java | 2 +- .../java/eu/faircode/email/FixedTextView.java | 2 +- .../main/java/eu/faircode/email/Helper.java | 20 +++++++++++++++---- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FixedEditText.java b/app/src/main/java/eu/faircode/email/FixedEditText.java index 42ac2c3150..a497be7fdb 100644 --- a/app/src/main/java/eu/faircode/email/FixedEditText.java +++ b/app/src/main/java/eu/faircode/email/FixedEditText.java @@ -49,7 +49,7 @@ public class FixedEditText extends AppCompatEditText { } private void init(Context context) { - setCustomSelectionActionModeCallback(Helper.getActionModeWrapper(context)); + setCustomSelectionActionModeCallback(Helper.getActionModeWrapper(this)); } @Override diff --git a/app/src/main/java/eu/faircode/email/FixedTextView.java b/app/src/main/java/eu/faircode/email/FixedTextView.java index 90a5e3bd41..54be16d1aa 100644 --- a/app/src/main/java/eu/faircode/email/FixedTextView.java +++ b/app/src/main/java/eu/faircode/email/FixedTextView.java @@ -53,7 +53,7 @@ public class FixedTextView extends AppCompatTextView { } private void init(Context context) { - setCustomSelectionActionModeCallback(Helper.getActionModeWrapper(context)); + setCustomSelectionActionModeCallback(Helper.getActionModeWrapper(this)); } @Override diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index fdd1ff1fce..c1baed78b7 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -1675,7 +1675,7 @@ public class Helper { ROMAN_1[value % 10]; } - static ActionMode.Callback getActionModeWrapper(Context context) { + static ActionMode.Callback getActionModeWrapper(TextView view) { return new ActionMode.Callback() { @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { @@ -1687,15 +1687,27 @@ public class Helper { for (int i = 0; i < menu.size(); i++) { MenuItem item = menu.getItem(i); Intent intent = item.getIntent(); - if (intent != null) { + if (intent != null && + Intent.ACTION_PROCESS_TEXT.equals(intent.getAction())) { item.setIntent(null); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { try { - context.startActivity(intent); + int start = view.getSelectionStart(); + int end = view.getSelectionEnd(); + if (start > end) { + int tmp = start; + start = end; + end = tmp; + } + CharSequence selected = view.getText(); + if (start >= 0 && end <= selected.length()) + selected = selected.subSequence(start, end); + intent.putExtra(Intent.EXTRA_PROCESS_TEXT, selected); + view.getContext().startActivity(intent); } catch (Throwable ex) { - reportNoViewer(context, intent, ex); + reportNoViewer(view.getContext(), intent, ex); /* java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.PROCESS_TEXT typ=text/plain cmp=com.microsoft.launcher/com.microsoft.bing.ProcessTextSearch launchParam=MultiScreenLaunchParams { mDisplayId=0 mFlags=0 } (has extras) } from ProcessRecord{befc028 15098:eu.faircode.email/u0a406} (pid=15098, uid=10406) not exported from uid 10021 at android.os.Parcel.readException(Parcel.java:1693)