From 4d5c48d9880d6bb0d5c2d55a145f435d725ebbdc Mon Sep 17 00:00:00 2001 From: Oli Lan Date: Thu, 4 Feb 2021 18:06:16 +0000 Subject: Add ClipDescription method to determine if the clip is styled text. This adds a new method to ClipDescription to allow callers to determine if the associated ClipData is styled text, without accessing the ClipData directly. This information is used by editors such as TextView or WebView when they show a selection toolbar, in order to determine if a "Paste as plain text" option should be shown. Currently, ClipData must be accessed in order to do this, so a clipboard access occurs whenever text is selected. Avoiding these clipboard accesses is desirable because a user-visible message may in future be shown whenever ClipData is accessed (see b/167676460), which may cause user confusion. Bug: 167660455 Test: new tests added to ClipDescriptionTest in CTS Change-Id: I48bea4d11a68b198d60016b364a3cfa0b0bf277e --- core/java/android/widget/TextView.java | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) (limited to 'core/java/android/widget/TextView.java') diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index fe37c5350511..0f2089a5463f 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -12940,17 +12940,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return false; } - final ClipData clipData = getClipboardManagerForUser().getPrimaryClip(); - final ClipDescription description = clipData.getDescription(); + final ClipDescription description = + getClipboardManagerForUser().getPrimaryClipDescription(); 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); + return (isPlainType && description.isStyledText()) + || description.hasMimeType(ClipDescription.MIMETYPE_TEXT_HTML); } boolean canProcessText() { -- cgit v1.2.3