From 7073378c7c3d430871fbcc8821a0250bc79b5acc Mon Sep 17 00:00:00 2001 From: Matt Casey Date: Thu, 26 Jan 2023 15:20:50 +0000 Subject: Send a regular ResultReceiver instead of a subclass. With unbundled chooser, apps can't load the subclass when unparceling, but we don't actually need the subclass on that end. Parcel and unparcel on this end ahead of time to get the vanilla ResultRecevier representation to send. Test: atest CtsSharesheetDeviceTest (with unbundled flag on) Bug: 266716256 Change-Id: I498e98bbf680e98d58000af1a980d7ba7b4480a5 --- java/src/com/android/intentresolver/ChooserActivity.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'java/src/com') diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java index f7f131a2..617a036d 100644 --- a/java/src/com/android/intentresolver/ChooserActivity.java +++ b/java/src/com/android/intentresolver/ChooserActivity.java @@ -61,6 +61,7 @@ import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; +import android.os.Parcel; import android.os.Parcelable; import android.os.PatternMatcher; import android.os.ResultReceiver; @@ -1180,7 +1181,7 @@ public class ChooserActivity extends ResolverActivity implements } mRefinementResultReceiver = new RefinementResultReceiver(this, target, null); fillIn.putExtra(Intent.EXTRA_RESULT_RECEIVER, - mRefinementResultReceiver); + mRefinementResultReceiver.copyForSending()); try { mChooserRequest.getRefinementIntentSender().sendIntent( this, 0, fillIn, null, null); @@ -2226,6 +2227,19 @@ public class ChooserActivity extends ResolverActivity implements mChooserActivity = null; mSelectedTarget = null; } + + /** + * Apps can't load this class directly, so we need a regular ResultReceiver copy for + * sending. Obtain this by parceling and unparceling (one weird trick). + */ + ResultReceiver copyForSending() { + Parcel parcel = Parcel.obtain(); + writeToParcel(parcel, 0); + parcel.setDataPosition(0); + ResultReceiver receiverForSending = ResultReceiver.CREATOR.createFromParcel(parcel); + parcel.recycle(); + return receiverForSending; + } } /** -- cgit v1.2.3-59-g8ed1b