diff options
| author | 2023-01-26 15:20:50 +0000 | |
|---|---|---|
| committer | 2023-01-26 15:48:55 +0000 | |
| commit | 7073378c7c3d430871fbcc8821a0250bc79b5acc (patch) | |
| tree | ac403ebae9e42517c4171740e151239fe209dfc5 /java/src/com | |
| parent | 2b4770d31ae3c917c74b261402405122d7fec742 (diff) | |
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
Diffstat (limited to 'java/src/com')
| -rw-r--r-- | java/src/com/android/intentresolver/ChooserActivity.java | 16 |
1 files changed, 15 insertions, 1 deletions
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; + } } /** |