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

Commit 0e60f22d authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Fixing method asymmetry in Parcel

Test: manually
Change-Id: I2a8321023b40cc74b7026eb0fb32a9cc5f5543a9
parent a762cae7
Loading
Loading
Loading
Loading
+14 −177
Original line number Diff line number Diff line
@@ -1340,6 +1340,13 @@ public final class Parcel {
     * @see Parcelable
     */
    public final <T extends Parcelable> void writeTypedList(List<T> val) {
        writeTypedList(val, 0);
    }

    /**
     * @hide
     */
    public <T extends Parcelable> void writeTypedList(List<T> val, int parcelableFlags) {
        if (val == null) {
            writeInt(-1);
            return;
@@ -1348,13 +1355,7 @@ public final class Parcel {
        int i=0;
        writeInt(N);
        while (i < N) {
            T item = val.get(i);
            if (item != null) {
                writeInt(1);
                item.writeToParcel(this, 0);
            } else {
                writeInt(0);
            }
            writeTypedObject(val.get(i), parcelableFlags);
            i++;
        }
    }
@@ -1456,159 +1457,13 @@ public final class Parcel {
            int N = val.length;
            writeInt(N);
            for (int i = 0; i < N; i++) {
                T item = val[i];
                if (item != null) {
                    writeInt(1);
                    item.writeToParcel(this, parcelableFlags);
                } else {
                    writeInt(0);
                }
            }
        } else {
            writeInt(-1);
        }
    }

    /**
     * Write a uniform (all items are null or the same class) array list of
     * parcelables.
     *
     * @param list The list to write.
     *
     * @hide
     */
    public final <T extends Parcelable> void writeTypedArrayList(@Nullable ArrayList<T> list,
            int parcelableFlags) {
        if (list != null) {
            int N = list.size();
            writeInt(N);
            boolean wroteCreator = false;
            for (int i = 0; i < N; i++) {
                T item = list.get(i);
                if (item != null) {
                    writeInt(1);
                    if (!wroteCreator) {
                        writeParcelableCreator(item);
                        wroteCreator = true;
                    }
                    item.writeToParcel(this, parcelableFlags);
                } else {
                    writeInt(0);
                }
            }
        } else {
            writeInt(-1);
        }
    }

    /**
     * Reads a uniform (all items are null or the same class) array list of
     * parcelables.
     *
     * @return The list or null.
     *
     * @hide
     */
    public final @Nullable <T> ArrayList<T> readTypedArrayList(@Nullable ClassLoader loader) {
        int N = readInt();
        if (N <= 0) {
            return null;
        }
        Parcelable.Creator<?> creator = null;
        ArrayList<T> result = new ArrayList<T>(N);
        for (int i = 0; i < N; i++) {
            if (readInt() != 0) {
                if (creator == null) {
                    creator = readParcelableCreator(loader);
                    if (creator == null) {
                        return null;
                    }
                }
                final T parcelable;
                if (creator instanceof Parcelable.ClassLoaderCreator<?>) {
                    Parcelable.ClassLoaderCreator<?> classLoaderCreator =
                            (Parcelable.ClassLoaderCreator<?>) creator;
                    parcelable = (T) classLoaderCreator.createFromParcel(this, loader);
                } else {
                    parcelable = (T) creator.createFromParcel(this);
                }
                result.add(parcelable);
            } else {
                result.add(null);
            }
        }
        return result;
    }

    /**
     * Write a uniform (all items are null or the same class) array set of
     * parcelables.
     *
     * @param set The set to write.
     *
     * @hide
     */
    public final <T extends Parcelable> void writeTypedArraySet(@Nullable ArraySet<T> set,
            int parcelableFlags) {
        if (set != null) {
            int N = set.size();
            writeInt(N);
            boolean wroteCreator = false;
            for (int i = 0; i < N; i++) {
                T item = set.valueAt(i);
                if (item != null) {
                    writeInt(1);
                    if (!wroteCreator) {
                        writeParcelableCreator(item);
                        wroteCreator = true;
                    }
                    item.writeToParcel(this, parcelableFlags);
                } else {
                    writeInt(0);
                }
                writeTypedObject(val[i], parcelableFlags);
            }
        } else {
            writeInt(-1);
        }
    }

    /**
     * Reads a uniform (all items are null or the same class) array set of
     * parcelables.
     *
     * @return The set or null.
     *
     * @hide
     */
    public final @Nullable <T> ArraySet<T> readTypedArraySet(@Nullable ClassLoader loader) {
        int N = readInt();
        if (N <= 0) {
            return null;
        }
        Parcelable.Creator<?> creator = null;
        ArraySet<T> result = new ArraySet<T>(N);
        for (int i = 0; i < N; i++) {
            T parcelable = null;
            if (readInt() != 0) {
                if (creator == null) {
                    creator = readParcelableCreator(loader);
                    if (creator == null) {
                        return null;
                    }
                }
                if (creator instanceof Parcelable.ClassLoaderCreator<?>) {
                    Parcelable.ClassLoaderCreator<?> classLoaderCreator =
                            (Parcelable.ClassLoaderCreator<?>) creator;
                    parcelable = (T) classLoaderCreator.createFromParcel(this, loader);
                } else {
                    parcelable = (T) creator.createFromParcel(this);
                }
            }
            result.append(parcelable);
        }
        return result;
    }

    /**
     * Flatten the Parcelable object into the parcel.
     *
@@ -2458,11 +2313,7 @@ public final class Parcel {
        }
        ArrayList<T> l = new ArrayList<T>(N);
        while (N > 0) {
            if (readInt() != 0) {
                l.add(c.createFromParcel(this));
            } else {
                l.add(null);
            }
            l.add(readTypedObject(c));
            N--;
        }
        return l;
@@ -2485,18 +2336,10 @@ public final class Parcel {
        int N = readInt();
        int i = 0;
        for (; i < M && i < N; i++) {
            if (readInt() != 0) {
                list.set(i, c.createFromParcel(this));
            } else {
                list.set(i, null);
            }
            list.set(i, readTypedObject(c));
        }
        for (; i<N; i++) {
            if (readInt() != 0) {
                list.add(c.createFromParcel(this));
            } else {
                list.add(null);
            }
            list.add(readTypedObject(c));
        }
        for (; i<M; i++) {
            list.remove(N);
@@ -2641,9 +2484,7 @@ public final class Parcel {
        }
        T[] l = c.newArray(N);
        for (int i=0; i<N; i++) {
            if (readInt() != 0) {
                l[i] = c.createFromParcel(this);
            }
            l[i] = readTypedObject(c);
        }
        return l;
    }
@@ -2652,11 +2493,7 @@ public final class Parcel {
        int N = readInt();
        if (N == val.length) {
            for (int i=0; i<N; i++) {
                if (readInt() != 0) {
                    val[i] = c.createFromParcel(this);
                } else {
                    val[i] = null;
                }
                val[i] = readTypedObject(c);
            }
        } else {
            throw new RuntimeException("bad array lengths");
+5 −4
Original line number Diff line number Diff line
@@ -323,8 +323,8 @@ public final class Dataset implements Parcelable {
    @Override
    public void writeToParcel(Parcel parcel, int flags) {
        parcel.writeParcelable(mPresentation, flags);
        parcel.writeTypedArrayList(mFieldIds, flags);
        parcel.writeTypedArrayList(mFieldValues, flags);
        parcel.writeTypedList(mFieldIds, flags);
        parcel.writeTypedList(mFieldValues, flags);
        parcel.writeParcelableList(mFieldPresentations, flags);
        parcel.writeParcelable(mAuthentication, flags);
        parcel.writeString(mId);
@@ -340,8 +340,9 @@ public final class Dataset implements Parcelable {
            final Builder builder = (presentation == null)
                    ? new Builder()
                    : new Builder(presentation);
            final ArrayList<AutofillId> ids = parcel.readTypedArrayList(null);
            final ArrayList<AutofillValue> values = parcel.readTypedArrayList(null);
            final ArrayList<AutofillId> ids = parcel.createTypedArrayList(AutofillId.CREATOR);
            final ArrayList<AutofillValue> values =
                    parcel.createTypedArrayList(AutofillValue.CREATOR);
            final ArrayList<RemoteViews> presentations = new ArrayList<>();
            parcel.readParcelableList(presentations, null);
            final int idCount = (ids != null) ? ids.size() : 0;
+3 −2
Original line number Diff line number Diff line
@@ -48,7 +48,8 @@ public final class SaveRequest implements Parcelable {
    }

    private SaveRequest(@NonNull Parcel parcel) {
        this(parcel.readTypedArrayList(null), parcel.readBundle(), parcel.createStringArrayList());
        this(parcel.createTypedArrayList(FillContext.CREATOR),
                parcel.readBundle(), parcel.createStringArrayList());
    }

    /**
@@ -84,7 +85,7 @@ public final class SaveRequest implements Parcelable {

    @Override
    public void writeToParcel(Parcel parcel, int flags) {
        parcel.writeTypedArrayList(mFillContexts, flags);
        parcel.writeTypedList(mFillContexts, flags);
        parcel.writeBundle(mClientState);
        parcel.writeStringList(mDatasetIds);
    }