From 9b9b00ff46497a6e74a4871e4fb28a6a9054c5eb Mon Sep 17 00:00:00 2001 From: Nikita Dubrovsky Date: Tue, 27 Apr 2021 15:01:04 -0700 Subject: [PATCH] Update ContentInfo to implement Parcelable Bug: 186683314 Test: atest CtsViewReceiveContentTestCases:ContentInfoTest Change-Id: I59376947cfa8dad5d2021cb1d2f5c121a1f90596 --- core/api/current.txt | 5 +- core/api/test-current.txt | 2 +- core/java/android/view/ContentInfo.java | 75 ++++++++++++++++++++++++- 3 files changed, 79 insertions(+), 3 deletions(-) diff --git a/core/api/current.txt b/core/api/current.txt index 79ba209236b90..3d6b188e8c1d4 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -46811,12 +46811,15 @@ package android.view { method public void onActionViewExpanded(); } - public final class ContentInfo { + public final class ContentInfo implements android.os.Parcelable { + method public int describeContents(); method @NonNull public android.content.ClipData getClip(); method @Nullable public android.os.Bundle getExtras(); method public int getFlags(); method @Nullable public android.net.Uri getLinkUri(); method public int getSource(); + method public void writeToParcel(@NonNull android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator CREATOR; 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 948ada26834bd..434c51a64ead5 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -2638,7 +2638,7 @@ package android.view { field public static final int CALLBACK_ANIMATION = 1; // 0x1 } - public final class ContentInfo { + public final class ContentInfo implements android.os.Parcelable { method @NonNull public android.util.Pair partition(@NonNull java.util.function.Predicate); method public void releasePermissions(); } diff --git a/core/java/android/view/ContentInfo.java b/core/java/android/view/ContentInfo.java index 7966712dc119c..b1b0e6bd088ee 100644 --- a/core/java/android/view/ContentInfo.java +++ b/core/java/android/view/ContentInfo.java @@ -25,6 +25,8 @@ import android.content.ClipData; import android.content.ClipDescription; import android.net.Uri; import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; import android.util.Pair; import android.view.inputmethod.InputContentInfo; @@ -39,7 +41,7 @@ import java.util.function.Predicate; /** * Holds all the relevant data for a request to {@link View#performReceiveContent}. */ -public final class ContentInfo { +public final class ContentInfo implements Parcelable { /** * Specifies the UI through which content is being inserted. Future versions of Android may @@ -420,4 +422,75 @@ public final class ContentInfo { return new ContentInfo(this); } } + + /** + * {@inheritDoc} + */ + @Override + public int describeContents() { + return 0; + } + + /** + * Writes this object into the given parcel. + * + * @param dest The parcel to write into. + * @param flags The flags to use for parceling. + */ + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + mClip.writeToParcel(dest, flags); + dest.writeInt(mSource); + dest.writeInt(mFlags); + Uri.writeToParcel(dest, mLinkUri); + dest.writeBundle(mExtras); + if (mInputContentInfo == null) { + dest.writeInt(0); + } else { + dest.writeInt(1); + mInputContentInfo.writeToParcel(dest, flags); + } + if (mDragAndDropPermissions == null) { + dest.writeInt(0); + } else { + dest.writeInt(1); + mDragAndDropPermissions.writeToParcel(dest, flags); + } + } + + /** + * Creates {@link ContentInfo} instances from parcels. + */ + @NonNull + public static final Parcelable.Creator CREATOR = + new Parcelable.Creator() { + @Override + public ContentInfo createFromParcel(Parcel parcel) { + ClipData clip = ClipData.CREATOR.createFromParcel(parcel); + int source = parcel.readInt(); + int flags = parcel.readInt(); + Uri linkUri = Uri.CREATOR.createFromParcel(parcel); + Bundle extras = parcel.readBundle(); + InputContentInfo inputContentInfo = null; + if (parcel.readInt() != 0) { + inputContentInfo = InputContentInfo.CREATOR.createFromParcel(parcel); + } + DragAndDropPermissions dragAndDropPermissions = null; + if (parcel.readInt() != 0) { + dragAndDropPermissions = DragAndDropPermissions.CREATOR.createFromParcel(parcel); + } + return new ContentInfo.Builder(clip, source) + .setFlags(flags) + .setLinkUri(linkUri) + .setExtras(extras) + .setInputContentInfo(inputContentInfo) + .setDragAndDropPermissions(dragAndDropPermissions) + .build(); + } + + @Override + public ContentInfo[] newArray(int size) { + return new ContentInfo[size]; + } + }; }