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

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

Change-Id: I46d6d9b56fca628dc38d9f452d54feb1a6581f1f
This commit is contained in:
Stanislav Zholnin
2021-05-07 14:28:00 +00:00
committed by Automerger Merge Worker

View File

@@ -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 =