summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Samuel Tan <samueltan@google.com> 2015-12-11 16:50:58 -0800
committer Samuel Tan <samueltan@google.com> 2015-12-15 15:22:52 -0800
commitceafe5ed8a9968752c9454ae67428caf8c6719e6 (patch)
treebd777e30d3da4cf45fff49f20a1d90318c77e85b
parent0bae77b8f0cdc6272abf56a831c8ebfa0e9ed6a0 (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.java9
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);