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:
@@ -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 =
|
||||
|
||||
Reference in New Issue
Block a user