Fixing method asymmetry in Parcel
Test: manually
Change-Id: I2a8321023b40cc74b7026eb0fb32a9cc5f5543a9
diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java
index 031ca91..857e8a6 100644
--- a/core/java/android/os/Parcel.java
+++ b/core/java/android/os/Parcel.java
@@ -1340,6 +1340,13 @@
* @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 @@
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,13 +1457,7 @@
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);
- }
+ writeTypedObject(val[i], parcelableFlags);
}
} else {
writeInt(-1);
@@ -1470,146 +1465,6 @@
}
/**
- * 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);
- }
- }
- } 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.
*
* @param val The Parcelable object to be written.
@@ -2458,11 +2313,7 @@
}
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 @@
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 @@
}
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 @@
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");
diff --git a/core/java/android/service/autofill/Dataset.java b/core/java/android/service/autofill/Dataset.java
index cb341b1..2a9a39f 100644
--- a/core/java/android/service/autofill/Dataset.java
+++ b/core/java/android/service/autofill/Dataset.java
@@ -323,8 +323,8 @@
@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 @@
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;
diff --git a/core/java/android/service/autofill/SaveRequest.java b/core/java/android/service/autofill/SaveRequest.java
index 1a6c5b0..65fdb5c 100644
--- a/core/java/android/service/autofill/SaveRequest.java
+++ b/core/java/android/service/autofill/SaveRequest.java
@@ -48,7 +48,8 @@
}
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 @@
@Override
public void writeToParcel(Parcel parcel, int flags) {
- parcel.writeTypedArrayList(mFillContexts, flags);
+ parcel.writeTypedList(mFillContexts, flags);
parcel.writeBundle(mClientState);
parcel.writeStringList(mDatasetIds);
}