Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ceafe5ed authored by Samuel Tan's avatar Samuel Tan
Browse files

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
parent 0bae77b8
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -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);