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

Commit d7887a52 authored by Stanislav Zholnin's avatar Stanislav Zholnin Committed by Automerger Merge Worker
Browse files

Merge "Fix bug in BaseParceledListSlice implementation." into sc-dev am: 93f4ae67

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

Change-Id: Icc8028beeb49b8a3fec8b22883de84a798f0c11f
parents 78722a70 93f4ae67
Loading
Loading
Loading
Loading
+15 −15
Original line number Diff line number Diff line
@@ -75,16 +75,7 @@ abstract class BaseParceledListSlice<T> implements Parcelable {
            if (p.readInt() == 0) {
                break;
            }

            final T parcelable = readCreator(creator, p, loader);
            if (listElementClass == null) {
                listElementClass = parcelable.getClass();
            } else {
                verifySameType(listElementClass, parcelable.getClass());
            }

            mList.add(parcelable);

            listElementClass = readVerifyAndAddElement(creator, p, loader, listElementClass);
            if (DEBUG) Log.d(TAG, "Read inline #" + i + ": " + mList.get(mList.size()-1));
            i++;
        }
@@ -104,11 +95,8 @@ abstract class BaseParceledListSlice<T> implements Parcelable {
                return;
            }
            while (i < N && reply.readInt() != 0) {
                final T parcelable = readCreator(creator, reply, loader);
                verifySameType(listElementClass, parcelable.getClass());

                mList.add(parcelable);

                listElementClass = readVerifyAndAddElement(creator, reply, loader,
                        listElementClass);
                if (DEBUG) Log.d(TAG, "Read extra #" + i + ": " + mList.get(mList.size()-1));
                i++;
            }
@@ -117,6 +105,18 @@ abstract class BaseParceledListSlice<T> implements Parcelable {
        }
    }

    private Class<?> readVerifyAndAddElement(Parcelable.Creator<?> creator, Parcel p,
            ClassLoader loader, Class<?> listElementClass) {
        final T parcelable = readCreator(creator, p, loader);
        if (listElementClass == null) {
            listElementClass = parcelable.getClass();
        } else {
            verifySameType(listElementClass, parcelable.getClass());
        }
        mList.add(parcelable);
        return listElementClass;
    }

    private T readCreator(Parcelable.Creator<?> creator, Parcel p, ClassLoader loader) {
        if (creator instanceof Parcelable.ClassLoaderCreator<?>) {
            Parcelable.ClassLoaderCreator<?> classLoaderCreator =