From c9f90b56df50d8682dee5afddebe3e8a89690fbd Mon Sep 17 00:00:00 2001 From: Nikita Dubrovsky Date: Mon, 14 Dec 2020 22:04:57 -0800 Subject: [PATCH] Hide ContentInfo.partition from the public API Per API Council feedback, this method will not be exposed in the public API. App developers will instead use the support library for this. Rather than removing the method completely, it is marked with @hide so that it can still be used in system code (e.g. RemoteInputView). Bug: 174125311 Test: atest CtsViewTestCases:ContentInfoTest Change-Id: I83b55bea38c0d2b3dc60a16658616e46ebe4cb48 --- core/api/current.txt | 1 - core/api/test-current.txt | 4 ++++ core/java/android/view/ContentInfo.java | 4 ++++ core/java/android/view/OnReceiveContentListener.java | 5 ++--- core/java/android/widget/TextView.java | 8 ++++++-- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/core/api/current.txt b/core/api/current.txt index a2f4f7e9f9ea5..0fb7fae1b545d 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -51046,7 +51046,6 @@ package android.view { method public int getFlags(); method @Nullable public android.net.Uri getLinkUri(); method public int getSource(); - method @NonNull public android.util.Pair partition(@NonNull java.util.function.Predicate); field public static final int FLAG_CONVERT_TO_PLAIN_TEXT = 1; // 0x1 field public static final int SOURCE_APP = 0; // 0x0 field public static final int SOURCE_AUTOFILL = 4; // 0x4 diff --git a/core/api/test-current.txt b/core/api/test-current.txt index ffb31c9fe5733..5c3cc24368b7c 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -2006,6 +2006,10 @@ package android.view { field public static final int CALLBACK_ANIMATION = 1; // 0x1 } + public final class ContentInfo { + method @NonNull public android.util.Pair partition(@NonNull java.util.function.Predicate); + } + public final class Display { method @NonNull public android.graphics.ColorSpace[] getSupportedWideColorGamut(); method public int getType(); diff --git a/core/java/android/view/ContentInfo.java b/core/java/android/view/ContentInfo.java index fcf699faafe1a..bc66ea16bb72e 100644 --- a/core/java/android/view/ContentInfo.java +++ b/core/java/android/view/ContentInfo.java @@ -19,6 +19,7 @@ package android.view; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.TestApi; import android.content.ClipData; import android.content.ClipDescription; import android.net.Uri; @@ -222,7 +223,10 @@ public final class ContentInfo { * content that matched the predicate, or null if none of the items matched. The pair's * second object will have the content that didn't match the predicate, or null if all of * the items matched. + * + * @hide */ + @TestApi @NonNull public Pair partition( @NonNull Predicate itemPredicate) { diff --git a/core/java/android/view/OnReceiveContentListener.java b/core/java/android/view/OnReceiveContentListener.java index 419f964ccd259..3d9968c7f2c68 100644 --- a/core/java/android/view/OnReceiveContentListener.java +++ b/core/java/android/view/OnReceiveContentListener.java @@ -36,7 +36,7 @@ import android.annotation.Nullable; * @Override * public ContentInfo onReceiveContent(View view, ContentInfo payload) { * Pair<ContentInfo, ContentInfo> split = - * payload.partition(item -> item.getUri() != null); + * ContentInfoCompat.partition(payload, item -> item.getUri() != null); * ContentInfo uriContent = split.first; * ContentInfo remaining = split.second; * if (uriContent != null) { @@ -72,8 +72,7 @@ public interface OnReceiveContentListener { * handling. For example, an implementation may provide handling for content URIs (to provide * support for inserting images, etc) and delegate the processing of text to the platform to * preserve the common behavior for inserting text. See the class javadoc for a sample - * implementation and see {@link ContentInfo#partition} for a convenient way to split the - * passed-in content. + * implementation. * *

If implementing handling for text: if the view has a selection, the selection should * be overwritten by the passed-in content; if there's no selection, the passed-in content diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 02a9300179062..40a372c8c2df1 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -13736,8 +13736,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * custom behavior should configure a listener via {@link #setOnReceiveContentListener}. * *

For non-editable TextViews the default behavior is a no-op (returns the passed-in - * content without acting on it). For editable TextViews the default behavior coerces all - * content to text and inserts into the view. + * content without acting on it). + * + *

For editable TextViews the default behavior is to insert text into the view, coercing + * non-text content to text as needed. The MIME types "text/plain" and "text/html" have + * well-defined behavior for this, while other MIME types have reasonable fallback behavior + * (see {@link ClipData.Item#coerceToStyledText}). * * @param payload The content to insert and related metadata. *