diff options
| author | Oli Lan <olilan@google.com> | 2021-02-15 16:14:15 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-02-15 16:14:15 +0000 |
| commit | 0e588cc3224ed264de551bd8ce33e71b49c49b85 (patch) | |
| tree | 7750f06af73ed0b7ab55bef98006b1e99b0ab5d5 /core/java/android | |
| parent | 14e314de81d1bb4cfb8bb68e35361c34701d9941 (diff) | |
| parent | 4d5c48d9880d6bb0d5c2d55a145f435d725ebbdc (diff) | |
Merge "Add ClipDescription method to determine if the clip is styled text." into sc-dev
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/content/ClipData.java | 19 | ||||
| -rw-r--r-- | core/java/android/content/ClipDescription.java | 23 | ||||
| -rw-r--r-- | core/java/android/widget/TextView.java | 14 |
3 files changed, 46 insertions, 10 deletions
diff --git a/core/java/android/content/ClipData.java b/core/java/android/content/ClipData.java index 018863774184..f3ecbf6c08f3 100644 --- a/core/java/android/content/ClipData.java +++ b/core/java/android/content/ClipData.java @@ -740,6 +740,7 @@ public class ClipData implements Parcelable { mIcon = null; mItems = new ArrayList<Item>(); mItems.add(item); + mClipDescription.setIsStyledText(isStyledText()); } /** @@ -756,6 +757,7 @@ public class ClipData implements Parcelable { mIcon = null; mItems = new ArrayList<Item>(); mItems.add(item); + mClipDescription.setIsStyledText(isStyledText()); } /** @@ -914,6 +916,9 @@ public class ClipData implements Parcelable { throw new NullPointerException("item is null"); } mItems.add(item); + if (mItems.size() == 1) { + mClipDescription.setIsStyledText(isStyledText()); + } } /** @@ -1049,6 +1054,20 @@ public class ClipData implements Parcelable { } } + private boolean isStyledText() { + if (mItems.isEmpty()) { + return false; + } + final CharSequence text = mItems.get(0).getText(); + if (text instanceof Spanned) { + Spanned spanned = (Spanned) text; + if (TextUtils.hasStyleSpan(spanned)) { + return true; + } + } + return false; + } + @Override public String toString() { StringBuilder b = new StringBuilder(128); diff --git a/core/java/android/content/ClipDescription.java b/core/java/android/content/ClipDescription.java index e3395e20947d..d48f83223d3e 100644 --- a/core/java/android/content/ClipDescription.java +++ b/core/java/android/content/ClipDescription.java @@ -120,6 +120,7 @@ public class ClipDescription implements Parcelable { private final ArrayList<String> mMimeTypes; private PersistableBundle mExtras; private long mTimeStamp; + private boolean mIsStyledText; /** * Create a new clip. @@ -325,6 +326,26 @@ public class ClipDescription implements Parcelable { } } + /** + * Returns true if the first item of the associated {@link ClipData} contains styled text, i.e. + * if it contains spans such as {@link android.text.style.CharacterStyle CharacterStyle}, {@link + * android.text.style.ParagraphStyle ParagraphStyle}, or {@link + * android.text.style.UpdateAppearance UpdateAppearance}. Returns false if it does not, or if + * there is no associated clip data. + */ + public boolean isStyledText() { + return mIsStyledText; + } + + /** + * Sets whether the associated {@link ClipData} contains styled text in its first item. This + * should be called when this description is associated with clip data or when the first item + * is added to the associated clip data. + */ + void setIsStyledText(boolean isStyledText) { + mIsStyledText = isStyledText; + } + @Override public String toString() { StringBuilder b = new StringBuilder(128); @@ -429,6 +450,7 @@ public class ClipDescription implements Parcelable { dest.writeStringList(mMimeTypes); dest.writePersistableBundle(mExtras); dest.writeLong(mTimeStamp); + dest.writeBoolean(mIsStyledText); } ClipDescription(Parcel in) { @@ -436,6 +458,7 @@ public class ClipDescription implements Parcelable { mMimeTypes = in.createStringArrayList(); mExtras = in.readPersistableBundle(); mTimeStamp = in.readLong(); + mIsStyledText = in.readBoolean(); } public static final @android.annotation.NonNull Parcelable.Creator<ClipDescription> CREATOR = 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() { |
