Merge "Fix crash in RemoteViews w/ Bundle due to Parcel.allowSquashing" into sc-v2-dev
This commit is contained in:
@@ -300,6 +300,13 @@ public class RemoteViews implements Parcelable, Filter {
|
||||
*/
|
||||
public static final int FLAG_USE_LIGHT_BACKGROUND_LAYOUT = 4;
|
||||
|
||||
/**
|
||||
* A ReadWriteHelper which has the same behavior as ReadWriteHelper.DEFAULT, but which is
|
||||
* intentionally a different instance in order to trick Bundle reader so that it doesn't allow
|
||||
* lazy initialization.
|
||||
*/
|
||||
private static final Parcel.ReadWriteHelper ALTERNATIVE_DEFAULT = new Parcel.ReadWriteHelper();
|
||||
|
||||
/**
|
||||
* Used to restrict the views which can be inflated
|
||||
*
|
||||
@@ -1856,7 +1863,18 @@ public class RemoteViews implements Parcelable, Filter {
|
||||
this.value = in.readTypedObject(Bitmap.CREATOR);
|
||||
break;
|
||||
case BUNDLE:
|
||||
this.value = in.readBundle();
|
||||
// Because we use Parcel.allowSquashing() when writing, and that affects
|
||||
// how the contents of Bundles are written, we need to ensure the bundle is
|
||||
// unparceled immediately, not lazily. Setting a custom ReadWriteHelper
|
||||
// just happens to have that effect on Bundle.readFromParcel().
|
||||
// TODO(b/212731590): build this state tracking into Bundle
|
||||
if (in.hasReadWriteHelper()) {
|
||||
this.value = in.readBundle();
|
||||
} else {
|
||||
in.setReadWriteHelper(ALTERNATIVE_DEFAULT);
|
||||
this.value = in.readBundle();
|
||||
in.setReadWriteHelper(null);
|
||||
}
|
||||
break;
|
||||
case INTENT:
|
||||
this.value = in.readTypedObject(Intent.CREATOR);
|
||||
|
||||
Reference in New Issue
Block a user