summaryrefslogtreecommitdiff
path: root/java/src/com
diff options
context:
space:
mode:
author Matt Casey <mrcasey@google.com> 2023-01-26 15:20:50 +0000
committer Matt Casey <mrcasey@google.com> 2023-01-26 15:48:55 +0000
commit7073378c7c3d430871fbcc8821a0250bc79b5acc (patch)
treeac403ebae9e42517c4171740e151239fe209dfc5 /java/src/com
parent2b4770d31ae3c917c74b261402405122d7fec742 (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.java16
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;
+ }
}
/**