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;
|
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
|
* 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);
|
this.value = in.readTypedObject(Bitmap.CREATOR);
|
||||||
break;
|
break;
|
||||||
case BUNDLE:
|
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;
|
break;
|
||||||
case INTENT:
|
case INTENT:
|
||||||
this.value = in.readTypedObject(Intent.CREATOR);
|
this.value = in.readTypedObject(Intent.CREATOR);
|
||||||
|
|||||||
Reference in New Issue
Block a user