Merge "Send a regular ResultReceiver instead of a subclass." into tm-qpr-dev
diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java
index 6f6baa2..7fa715c 100644
--- a/java/src/com/android/intentresolver/ChooserActivity.java
+++ b/java/src/com/android/intentresolver/ChooserActivity.java
@@ -61,6 +61,7 @@
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;
@@ -1177,7 +1178,7 @@
}
mRefinementResultReceiver = new RefinementResultReceiver(this, target, null);
fillIn.putExtra(Intent.EXTRA_RESULT_RECEIVER,
- mRefinementResultReceiver);
+ mRefinementResultReceiver.copyForSending());
try {
mChooserRequest.getRefinementIntentSender().sendIntent(
this, 0, fillIn, null, null);
@@ -2223,6 +2224,19 @@
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;
+ }
}
/**