(ActionMode mode, Menu menu)
| 2712 | } |
| 2713 | |
| 2714 | @Override |
| 2715 | public boolean onPrepareActionMode(ActionMode mode, Menu menu) { |
| 2716 | try { |
| 2717 | String selected = getSelected(); |
| 2718 | boolean email = (selected != null && Helper.EMAIL_ADDRESS.matcher(selected).matches()); |
| 2719 | menu.findItem(R.string.title_insert_contact).setVisible(email); |
| 2720 | } catch (Throwable ex) { |
| 2721 | Log.e(ex); |
| 2722 | menu.findItem(R.string.title_insert_contact).setVisible(false); |
| 2723 | } |
| 2724 | |
| 2725 | try { |
| 2726 | Pair<Integer, Integer> block = StyleHelper.getParagraph(view, true); |
| 2727 | boolean ablock = (block != null && |
| 2728 | block.first == view.getSelectionStart() && |
| 2729 | block.second == view.getSelectionEnd()); |
| 2730 | menu.findItem(R.string.title_select_block).setVisible(!ablock); |
| 2731 | } catch (Throwable ex) { |
| 2732 | Log.e(ex); |
| 2733 | menu.findItem(R.string.title_select_block).setVisible(false); |
| 2734 | } |
| 2735 | |
| 2736 | for (int i = 0; i < menu.size(); i++) { |
| 2737 | MenuItem item = menu.getItem(i); |
| 2738 | Intent intent = item.getIntent(); |
| 2739 | if (intent != null && |
| 2740 | Intent.ACTION_PROCESS_TEXT.equals(intent.getAction())) { |
| 2741 | item.setIntent(null); |
| 2742 | item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { |
| 2743 | @Override |
| 2744 | public boolean onMenuItemClick(MenuItem item) { |
| 2745 | try { |
| 2746 | int start = view.getSelectionStart(); |
| 2747 | int end = view.getSelectionEnd(); |
| 2748 | if (start > end) { |
| 2749 | int tmp = start; |
| 2750 | start = end; |
| 2751 | end = tmp; |
| 2752 | } |
| 2753 | CharSequence selected = view.getText(); |
| 2754 | if (start >= 0 && end <= selected.length()) |
| 2755 | selected = selected.subSequence(start, end); |
| 2756 | intent.putExtra(Intent.EXTRA_PROCESS_TEXT, selected); |
| 2757 | view.getContext().startActivity(intent); |
| 2758 | } catch (Throwable ex) { |
| 2759 | reportNoViewer(view.getContext(), intent, ex); |
| 2760 | /* |
| 2761 | 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 |
| 2762 | at android.os.Parcel.readException(Parcel.java:1693) |
| 2763 | at android.os.Parcel.readException(Parcel.java:1646) |
| 2764 | at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3530) |
| 2765 | at android.app.Instrumentation.execStartActivity(Instrumentation.java:1645) |
| 2766 | at android.app.Activity.startActivityForResult(Activity.java:5033) |
| 2767 | at android.view.View.startActivityForResult(View.java:6413) |
| 2768 | at android.widget.Editor$ProcessTextIntentActionsHandler.fireIntent(Editor.java:7597) |
| 2769 | at android.widget.Editor$ProcessTextIntentActionsHandler.performMenuItemAction(Editor.java:7542) |
| 2770 | at android.widget.Editor$TextActionModeCallback.onActionItemClicked(Editor.java:4246) |
| 2771 | at com.android.internal.policy.DecorView$ActionModeCallback2Wrapper.onActionItemClicked(DecorView.java:2971) |
nothing calls this directly
no test coverage detected