Merge "Fix bug in BaseParceledListSlice implementation." into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
93f4ae674d
@@ -75,16 +75,7 @@ abstract class BaseParceledListSlice<T> implements Parcelable {
|
|||||||
if (p.readInt() == 0) {
|
if (p.readInt() == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
listElementClass = readVerifyAndAddElement(creator, p, loader, listElementClass);
|
||||||
final T parcelable = readCreator(creator, p, loader);
|
|
||||||
if (listElementClass == null) {
|
|
||||||
listElementClass = parcelable.getClass();
|
|
||||||
} else {
|
|
||||||
verifySameType(listElementClass, parcelable.getClass());
|
|
||||||
}
|
|
||||||
|
|
||||||
mList.add(parcelable);
|
|
||||||
|
|
||||||
if (DEBUG) Log.d(TAG, "Read inline #" + i + ": " + mList.get(mList.size()-1));
|
if (DEBUG) Log.d(TAG, "Read inline #" + i + ": " + mList.get(mList.size()-1));
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@@ -104,11 +95,8 @@ abstract class BaseParceledListSlice<T> implements Parcelable {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
while (i < N && reply.readInt() != 0) {
|
while (i < N && reply.readInt() != 0) {
|
||||||
final T parcelable = readCreator(creator, reply, loader);
|
listElementClass = readVerifyAndAddElement(creator, reply, loader,
|
||||||
verifySameType(listElementClass, parcelable.getClass());
|
listElementClass);
|
||||||
|
|
||||||
mList.add(parcelable);
|
|
||||||
|
|
||||||
if (DEBUG) Log.d(TAG, "Read extra #" + i + ": " + mList.get(mList.size()-1));
|
if (DEBUG) Log.d(TAG, "Read extra #" + i + ": " + mList.get(mList.size()-1));
|
||||||
i++;
|
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) {
|
private T readCreator(Parcelable.Creator<?> creator, Parcel p, ClassLoader loader) {
|
||||||
if (creator instanceof Parcelable.ClassLoaderCreator<?>) {
|
if (creator instanceof Parcelable.ClassLoaderCreator<?>) {
|
||||||
Parcelable.ClassLoaderCreator<?> classLoaderCreator =
|
Parcelable.ClassLoaderCreator<?> classLoaderCreator =
|
||||||
|
|||||||
Reference in New Issue
Block a user