diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2017-05-02 16:21:10 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-05-02 16:21:14 +0000 |
| commit | 0fe5a2d5b32ac2db3f88744f88526dbbbb35f780 (patch) | |
| tree | 3b0110f13191f7996c2c8685b288ca27dd9a704b /core/java/android/widget | |
| parent | 550e1c9a6b804dedb7b3d185fcbd40cdd0f257ee (diff) | |
| parent | ea6cb1215e97232bf96da02e35b6b8e938572eaa (diff) | |
Merge "Add "Paste as plain text" in TextView's toolbar." into oc-dev
Diffstat (limited to 'core/java/android/widget')
| -rw-r--r-- | core/java/android/widget/Editor.java | 23 | ||||
| -rw-r--r-- | core/java/android/widget/TextView.java | 21 |
2 files changed, 37 insertions, 7 deletions
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 481c160369b3..18554be5c91c 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -154,10 +154,10 @@ public class Editor { private static final int MENU_ITEM_ORDER_COPY = 5; private static final int MENU_ITEM_ORDER_PASTE = 6; private static final int MENU_ITEM_ORDER_SHARE = 7; - private static final int MENU_ITEM_ORDER_PASTE_AS_PLAIN_TEXT = 8; - private static final int MENU_ITEM_ORDER_SELECT_ALL = 9; - private static final int MENU_ITEM_ORDER_REPLACE = 10; - private static final int MENU_ITEM_ORDER_AUTOFILL = 11; + private static final int MENU_ITEM_ORDER_SELECT_ALL = 8; + private static final int MENU_ITEM_ORDER_REPLACE = 9; + private static final int MENU_ITEM_ORDER_AUTOFILL = 10; + private static final int MENU_ITEM_ORDER_PASTE_AS_PLAIN_TEXT = 11; private static final int MENU_ITEM_ORDER_PROCESS_TEXT_INTENT_ACTIONS_START = 100; // Each Editor manages its own undo stack. @@ -2634,9 +2634,9 @@ public class Editor { .setAlphabeticShortcut('v') .setEnabled(mTextView.canPaste()) .setOnMenuItemClickListener(mOnContextMenuItemClickListener); - menu.add(Menu.NONE, TextView.ID_PASTE, MENU_ITEM_ORDER_PASTE_AS_PLAIN_TEXT, + menu.add(Menu.NONE, TextView.ID_PASTE_AS_PLAIN_TEXT, MENU_ITEM_ORDER_PASTE_AS_PLAIN_TEXT, com.android.internal.R.string.paste_as_plain_text) - .setEnabled(mTextView.canPaste()) + .setEnabled(mTextView.canPasteAsPlainText()) .setOnMenuItemClickListener(mOnContextMenuItemClickListener); menu.add(Menu.NONE, TextView.ID_SHARE, MENU_ITEM_ORDER_SHARE, com.android.internal.R.string.share) @@ -3775,7 +3775,6 @@ public class Editor { mode.setSubtitle(null); mode.setTitleOptionalHint(true); populateMenuWithItems(menu); - updateAssistMenuItem(menu); Callback customCallback = getCustomCallback(); if (customCallback != null) { @@ -3843,8 +3842,18 @@ public class Editor { .setShowAsAction(mode); } + if (mTextView.canPasteAsPlainText()) { + menu.add( + Menu.NONE, + TextView.ID_PASTE_AS_PLAIN_TEXT, + MENU_ITEM_ORDER_PASTE_AS_PLAIN_TEXT, + com.android.internal.R.string.paste_as_plain_text) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + } + updateSelectAllItem(menu); updateReplaceItem(menu); + updateAssistMenuItem(menu); } @Override diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 629216e32fa9..242dcf535d32 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -35,6 +35,7 @@ import android.annotation.XmlRes; import android.app.Activity; import android.app.assist.AssistStructure; import android.content.ClipData; +import android.content.ClipDescription; import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; @@ -11042,6 +11043,26 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .hasPrimaryClip()); } + boolean canPasteAsPlainText() { + if (!canPaste()) { + return false; + } + + final ClipData clipData = + ((ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE)) + .getPrimaryClip(); + final ClipDescription description = clipData.getDescription(); + final boolean isPlainType = description.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN); + final CharSequence text = clipData.getItemAt(0).getText(); + if (isPlainType && (text instanceof Spanned)) { + Spanned spanned = (Spanned) text; + if (TextUtils.hasStyleSpan(spanned)) { + return true; + } + } + return description.hasMimeType(ClipDescription.MIMETYPE_TEXT_HTML); + } + boolean canProcessText() { if (getId() == View.NO_ID) { return false; |
