summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Samuel Tan <samueltan@google.com> 2015-11-23 14:36:00 -0800
committer Samuel Tan <samueltan@google.com> 2015-11-30 13:14:01 -0800
commita8036660ea522e8509e4fd5c79bd4466ac6d9179 (patch)
tree05fdda63248c72440b85df37840e08354abc1958
parent7d72975c5b3e6f18710f078199e7a9e3f9376c60 (diff)
Add support for reading and writing double array values
Add support for reading and writing double arrays in Parcel.readValue() and Parcel.writeValue. Also, remove some trailing whitespaces in Parcel.java. BUG: 25848659 Change-Id: Ib5430f492df4195051b83d9bf2b5163ec684bbff
-rw-r--r--core/java/android/os/Parcel.java51
1 files changed, 29 insertions, 22 deletions
diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java
index 1e879f2edca1..ed53d4495a15 100644
--- a/core/java/android/os/Parcel.java
+++ b/core/java/android/os/Parcel.java
@@ -58,12 +58,12 @@ import java.util.Set;
* appropriate to place any Parcel data in to persistent storage: changes
* in the underlying implementation of any of the data in the Parcel can
* render older data unreadable.</p>
- *
+ *
* <p>The bulk of the Parcel API revolves around reading and writing data
* of various types. There are six major classes of such functions available.</p>
- *
+ *
* <h3>Primitives</h3>
- *
+ *
* <p>The most basic data functions are for writing and reading primitive
* data types: {@link #writeByte}, {@link #readByte}, {@link #writeDouble},
* {@link #readDouble}, {@link #writeFloat}, {@link #readFloat}, {@link #writeInt},
@@ -71,15 +71,15 @@ import java.util.Set;
* {@link #writeString}, {@link #readString}. Most other
* data operations are built on top of these. The given data is written and
* read using the endianess of the host CPU.</p>
- *
+ *
* <h3>Primitive Arrays</h3>
- *
+ *
* <p>There are a variety of methods for reading and writing raw arrays
* of primitive objects, which generally result in writing a 4-byte length
* followed by the primitive data items. The methods for reading can either
* read the data into an existing array, or create and return a new array.
* These available types are:</p>
- *
+ *
* <ul>
* <li> {@link #writeBooleanArray(boolean[])},
* {@link #readBooleanArray(boolean[])}, {@link #createBooleanArray()}
@@ -101,9 +101,9 @@ import java.util.Set;
* <li> {@link #writeSparseBooleanArray(SparseBooleanArray)},
* {@link #readSparseBooleanArray()}.
* </ul>
- *
+ *
* <h3>Parcelables</h3>
- *
+ *
* <p>The {@link Parcelable} protocol provides an extremely efficient (but
* low-level) protocol for objects to write and read themselves from Parcels.
* You can use the direct methods {@link #writeParcelable(Parcelable, int)}
@@ -113,7 +113,7 @@ import java.util.Set;
* methods write both the class type and its data to the Parcel, allowing
* that class to be reconstructed from the appropriate class loader when
* later reading.</p>
- *
+ *
* <p>There are also some methods that provide a more efficient way to work
* with Parcelables: {@link #writeTypedObject}, {@link #writeTypedArray},
* {@link #writeTypedList}, {@link #readTypedObject},
@@ -126,9 +126,9 @@ import java.util.Set;
* call {@link Parcelable#writeToParcel Parcelable.writeToParcel} and
* {@link Parcelable.Creator#createFromParcel Parcelable.Creator.createFromParcel}
* yourself.)</p>
- *
+ *
* <h3>Bundles</h3>
- *
+ *
* <p>A special type-safe container, called {@link Bundle}, is available
* for key/value maps of heterogeneous values. This has many optimizations
* for improved performance when reading and writing data, and its type-safe
@@ -136,16 +136,16 @@ import java.util.Set;
* data contents into a Parcel. The methods to use are
* {@link #writeBundle(Bundle)}, {@link #readBundle()}, and
* {@link #readBundle(ClassLoader)}.
- *
+ *
* <h3>Active Objects</h3>
- *
+ *
* <p>An unusual feature of Parcel is the ability to read and write active
* objects. For these objects the actual contents of the object is not
* written, rather a special token referencing the object is written. When
* reading the object back from the Parcel, you do not get a new instance of
* the object, but rather a handle that operates on the exact same object that
* was originally written. There are two forms of active objects available.</p>
- *
+ *
* <p>{@link Binder} objects are a core facility of Android's general cross-process
* communication system. The {@link IBinder} interface describes an abstract
* protocol with a Binder object. Any such interface can be written in to
@@ -158,7 +158,7 @@ import java.util.Set;
* {@link #createBinderArray()},
* {@link #writeBinderList(List)}, {@link #readBinderList(List)},
* {@link #createBinderArrayList()}.</p>
- *
+ *
* <p>FileDescriptor objects, representing raw Linux file descriptor identifiers,
* can be written and {@link ParcelFileDescriptor} objects returned to operate
* on the original file descriptor. The returned file descriptor is a dup
@@ -166,9 +166,9 @@ import java.util.Set;
* operating on the same underlying file stream, with the same position, etc.
* The methods to use are {@link #writeFileDescriptor(FileDescriptor)},
* {@link #readFileDescriptor()}.
- *
+ *
* <h3>Untyped Containers</h3>
- *
+ *
* <p>A final class of methods are for writing and reading standard Java
* containers of arbitrary types. These all revolve around the
* {@link #writeValue(Object)} and {@link #readValue(ClassLoader)} methods
@@ -229,6 +229,7 @@ public final class Parcel {
private static final int VAL_PERSISTABLEBUNDLE = 25;
private static final int VAL_SIZE = 26;
private static final int VAL_SIZEF = 27;
+ private static final int VAL_DOUBLEARRAY = 28;
// The initial int32 in a Binder call's reply Parcel header:
private static final int EX_SECURITY = -1;
@@ -642,7 +643,7 @@ public final class Parcel {
* growing dataCapacity() if needed. The Map keys must be String objects.
* The Map values are written using {@link #writeValue} and must follow
* the specification there.
- *
+ *
* <p>It is strongly recommended to use {@link #writeBundle} instead of
* this method, since the Bundle class provides a type-safe API that
* allows you to avoid mysterious type errors at the point of marshalling.
@@ -1408,6 +1409,9 @@ public final class Parcel {
} else if (v instanceof SizeF) {
writeInt(VAL_SIZEF);
writeSizeF((SizeF) v);
+ } else if (v instanceof double[]) {
+ writeInt(VAL_DOUBLEARRAY);
+ writeDoubleArray((double[]) v);
} else {
Class<?> clazz = v.getClass();
if (clazz.isArray() && clazz.getComponentType() == Object.class) {
@@ -1483,7 +1487,7 @@ public final class Parcel {
* exception will be re-thrown by this function as a RuntimeException
* (to be caught by the system's last-resort exception handling when
* dispatching a transaction).
- *
+ *
* <p>The supported exception types are:
* <ul>
* <li>{@link BadParcelableException}
@@ -1493,7 +1497,7 @@ public final class Parcel {
* <li>{@link SecurityException}
* <li>{@link NetworkOnMainThreadException}
* </ul>
- *
+ *
* @param e The Exception to be written.
*
* @see #writeNoException
@@ -1814,7 +1818,7 @@ public final class Parcel {
if (Bundle.DEBUG) Log.d(TAG, "null bundle: length=" + length);
return null;
}
-
+
final Bundle bundle = new Bundle(this, length);
if (loader != null) {
bundle.setClassLoader(loader);
@@ -2325,7 +2329,7 @@ public final class Parcel {
return readArrayList(loader);
case VAL_BOOLEANARRAY:
- return createBooleanArray();
+ return createBooleanArray();
case VAL_BYTEARRAY:
return createByteArray();
@@ -2375,6 +2379,9 @@ public final class Parcel {
case VAL_SIZEF:
return readSizeF();
+ case VAL_DOUBLEARRAY:
+ return createDoubleArray();
+
default:
int off = dataPosition() - 4;
throw new RuntimeException(