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

Commit f4f42950 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Throw BadParcelableException from set/getParcelable" am: 294dd8f1 am:...

Merge "Throw BadParcelableException from set/getParcelable" am: 294dd8f1 am: c661b70d am: 848458fa

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1503133

Change-Id: I8df231d1a87fa0ddd63b609cf42834b24b7177e6
parents f5b24b7a 848458fa
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -7839,7 +7839,7 @@ package android.os {
    method @Nullable public <T extends android.os.Parcelable> T getParcelable(@NonNull Class<T>);
    method public int getStability();
    method public void readFromParcel(@NonNull android.os.Parcel);
    method public boolean setParcelable(@Nullable android.os.Parcelable);
    method public void setParcelable(@Nullable android.os.Parcelable);
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.os.ParcelableHolder> CREATOR;
  }
+19 −11
Original line number Diff line number Diff line
@@ -120,31 +120,37 @@ public final class ParcelableHolder implements Parcelable {

    /**
     * Write a parcelable into ParcelableHolder, the previous parcelable will be removed.
     * @return {@code false} if the parcelable's stability is more unstable ParcelableHolder.
     * @throws BadParcelableException if the parcelable's stability is more unstable
     *         ParcelableHolder.
     */
    public boolean setParcelable(@Nullable Parcelable p) {
        // a ParcelableHolder can only hold things at its stability or higher
    public void setParcelable(@Nullable Parcelable p) {
        // A ParcelableHolder can only hold things at its stability or higher.
        if (p != null && this.getStability() > p.getStability()) {
            return false;
            throw new BadParcelableException(
                "A ParcelableHolder can only hold things at its stability or higher. "
                + "The ParcelableHolder's stability is " + this.getStability()
                + ", but the parcelable's stability is " + p.getStability());
        }
        mParcelable = p;
        if (mParcel != null) {
            mParcel.recycle();
            mParcel = null;
        }
        return true;
    }

    /**
     * @return the parcelable that was written by {@link #setParcelable} or {@link #readFromParcel},
     *         or {@code null} if the parcelable has not been written, or T is different from
     *         the type written by (@link #setParcelable}.
     *         or {@code null} if the parcelable has not been written.
     * @throws BadParcelableException if T is different from the type written by
     *         (@link #setParcelable}.
     */
    @Nullable
    public <T extends Parcelable> T getParcelable(@NonNull Class<T> clazz) {
        if (mParcel == null) {
            if (!clazz.isInstance(mParcelable)) {
                return null;
            if (mParcelable != null && !clazz.isInstance(mParcelable)) {
                throw new BadParcelableException(
                    "The ParcelableHolder has " + mParcelable.getClass().getName()
                    + ", but the requested type is " + clazz.getName());
            }
            return (T) mParcelable;
        }
@@ -152,8 +158,10 @@ public final class ParcelableHolder implements Parcelable {
        mParcel.setDataPosition(0);

        T parcelable = mParcel.readParcelable(clazz.getClassLoader());
        if (!clazz.isInstance(parcelable)) {
            return null;
        if (parcelable != null && !clazz.isInstance(parcelable)) {
            throw new BadParcelableException(
                    "The ParcelableHolder has " + parcelable.getClass().getName()
                    + ", but the requested type is " + clazz.getName());
        }
        mParcelable = parcelable;