diff options
| author | 2015-12-11 16:50:58 -0800 | |
|---|---|---|
| committer | 2015-12-15 15:22:52 -0800 | |
| commit | ceafe5ed8a9968752c9454ae67428caf8c6719e6 (patch) | |
| tree | bd777e30d3da4cf45fff49f20a1d90318c77e85b | |
| parent | 0bae77b8f0cdc6272abf56a831c8ebfa0e9ed6a0 (diff) | |
Fix PersistableBundle handling in Parcel.writeValue
Previously, in Parcel.writeValue, PersistableBundle objects
would be handled as Parcelable types, since we check for
the Parcelable type before the PersistableBundle type (and
PersistableBundle implements the Parcelable interface).
Fix this by moving the PersistableBundle type "if" condition
above the Parcealble type "if" condition. Also, add a comment
that explicitly states this nuance, in order to prevent future
regressions.
BUG: 25815410
Change-Id: Ia86aa5fc39423422342df0609a0d37e7f38d7ddd
| -rw-r--r-- | core/java/android/os/Parcel.java | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java index 9b68f90aa28b..290202194732 100644 --- a/core/java/android/os/Parcel.java +++ b/core/java/android/os/Parcel.java @@ -1370,7 +1370,13 @@ public final class Parcel { // Must be before Parcelable writeInt(VAL_BUNDLE); writeBundle((Bundle) v); + } else if (v instanceof PersistableBundle) { + writeInt(VAL_PERSISTABLEBUNDLE); + writePersistableBundle((PersistableBundle) v); } else if (v instanceof Parcelable) { + // IMPOTANT: cases for classes that implement Parcelable must + // come before the Parcelable case, so that their specific VAL_* + // types will be written. writeInt(VAL_PARCELABLE); writeParcelable((Parcelable) v, 0); } else if (v instanceof Short) { @@ -1426,9 +1432,6 @@ public final class Parcel { } else if (v instanceof Byte) { writeInt(VAL_BYTE); writeInt((Byte) v); - } else if (v instanceof PersistableBundle) { - writeInt(VAL_PERSISTABLEBUNDLE); - writePersistableBundle((PersistableBundle) v); } else if (v instanceof Size) { writeInt(VAL_SIZE); writeSize((Size) v); |