diff options
| author | 2016-10-18 09:24:04 -0700 | |
|---|---|---|
| committer | 2016-10-18 09:36:02 -0700 | |
| commit | ef1a565bd4e96646e6848a6a40a53ee4dfe33293 (patch) | |
| tree | b3ce50e589636da658cfb6882cc5ba507069ba4d | |
| parent | ff5c3ad08b186e71b7b1466c576c5d44f05746ca (diff) | |
HIDL Vectors are now exposed to Java as ArrayList<T>, the supporting APIs on
HwParcel now reflect this change.
Bug: 32237331
Test: hidl_test_java
Change-Id: Ia1ce5a4e3acedd8ebcff15107aea53ce28fde589
| -rw-r--r-- | core/java/android/os/HwParcel.java | 155 | ||||
| -rw-r--r-- | core/jni/android_os_HwParcel.cpp | 31 |
2 files changed, 161 insertions, 25 deletions
diff --git a/core/java/android/os/HwParcel.java b/core/java/android/os/HwParcel.java index 180e8f46e93b..c7612d16d0c0 100644 --- a/core/java/android/os/HwParcel.java +++ b/core/java/android/os/HwParcel.java @@ -16,6 +16,9 @@ package android.os; +import java.util.ArrayList; +import java.util.Arrays; + import libcore.util.NativeAllocationRegistry; /** @hide */ @@ -53,14 +56,88 @@ public class HwParcel { public native final void writeDouble(double val); public native final void writeString(String val); - public native final void writeBoolVector(boolean[] val); - public native final void writeInt8Vector(byte[] val); - public native final void writeInt16Vector(short[] val); - public native final void writeInt32Vector(int[] val); - public native final void writeInt64Vector(long[] val); - public native final void writeFloatVector(float[] val); - public native final void writeDoubleVector(double[] val); - public native final void writeStringVector(String[] val); + private native final void writeBoolVector(boolean[] val); + private native final void writeInt8Vector(byte[] val); + private native final void writeInt16Vector(short[] val); + private native final void writeInt32Vector(int[] val); + private native final void writeInt64Vector(long[] val); + private native final void writeFloatVector(float[] val); + private native final void writeDoubleVector(double[] val); + private native final void writeStringVector(String[] val); + + public final void writeBoolVector(ArrayList<Boolean> val) { + final int n = val.size(); + boolean[] array = new boolean[n]; + for (int i = 0; i < n; ++i) { + array[i] = val.get(i); + } + + writeBoolVector(array); + } + + public final void writeInt8Vector(ArrayList<Byte> val) { + final int n = val.size(); + byte[] array = new byte[n]; + for (int i = 0; i < n; ++i) { + array[i] = val.get(i); + } + + writeInt8Vector(array); + } + + public final void writeInt16Vector(ArrayList<Short> val) { + final int n = val.size(); + short[] array = new short[n]; + for (int i = 0; i < n; ++i) { + array[i] = val.get(i); + } + + writeInt16Vector(array); + } + + public final void writeInt32Vector(ArrayList<Integer> val) { + final int n = val.size(); + int[] array = new int[n]; + for (int i = 0; i < n; ++i) { + array[i] = val.get(i); + } + + writeInt32Vector(array); + } + + public final void writeInt64Vector(ArrayList<Long> val) { + final int n = val.size(); + long[] array = new long[n]; + for (int i = 0; i < n; ++i) { + array[i] = val.get(i); + } + + writeInt64Vector(array); + } + + public final void writeFloatVector(ArrayList<Float> val) { + final int n = val.size(); + float[] array = new float[n]; + for (int i = 0; i < n; ++i) { + array[i] = val.get(i); + } + + writeFloatVector(array); + } + + public final void writeDoubleVector(ArrayList<Double> val) { + final int n = val.size(); + double[] array = new double[n]; + for (int i = 0; i < n; ++i) { + array[i] = val.get(i); + } + + writeDoubleVector(array); + } + + public final void writeStringVector(ArrayList<String> val) { + writeStringVector(val.toArray(new String[val.size()])); + } public native final void writeStrongBinder(IHwBinder binder); @@ -74,14 +151,60 @@ public class HwParcel { public native final double readDouble(); public native final String readString(); - public native final boolean[] readBoolVector(); - public native final byte[] readInt8Vector(); - public native final short[] readInt16Vector(); - public native final int[] readInt32Vector(); - public native final long[] readInt64Vector(); - public native final float[] readFloatVector(); - public native final double[] readDoubleVector(); - public native final String[] readStringVector(); + private native final boolean[] readBoolVectorAsArray(); + private native final byte[] readInt8VectorAsArray(); + private native final short[] readInt16VectorAsArray(); + private native final int[] readInt32VectorAsArray(); + private native final long[] readInt64VectorAsArray(); + private native final float[] readFloatVectorAsArray(); + private native final double[] readDoubleVectorAsArray(); + private native final String[] readStringVectorAsArray(); + + public final ArrayList<Boolean> readBoolVector() { + Boolean[] array = HwBlob.wrapArray(readBoolVectorAsArray()); + + return new ArrayList<Boolean>(Arrays.asList(array)); + } + + public final ArrayList<Byte> readInt8Vector() { + Byte[] array = HwBlob.wrapArray(readInt8VectorAsArray()); + + return new ArrayList<Byte>(Arrays.asList(array)); + } + + public final ArrayList<Short> readInt16Vector() { + Short[] array = HwBlob.wrapArray(readInt16VectorAsArray()); + + return new ArrayList<Short>(Arrays.asList(array)); + } + + public final ArrayList<Integer> readInt32Vector() { + Integer[] array = HwBlob.wrapArray(readInt32VectorAsArray()); + + return new ArrayList<Integer>(Arrays.asList(array)); + } + + public final ArrayList<Long> readInt64Vector() { + Long[] array = HwBlob.wrapArray(readInt64VectorAsArray()); + + return new ArrayList<Long>(Arrays.asList(array)); + } + + public final ArrayList<Float> readFloatVector() { + Float[] array = HwBlob.wrapArray(readFloatVectorAsArray()); + + return new ArrayList<Float>(Arrays.asList(array)); + } + + public final ArrayList<Double> readDoubleVector() { + Double[] array = HwBlob.wrapArray(readDoubleVectorAsArray()); + + return new ArrayList<Double>(Arrays.asList(array)); + } + + public final ArrayList<String> readStringVector() { + return new ArrayList<String>(Arrays.asList(readStringVectorAsArray())); + } public native final IHwBinder readStrongBinder(); diff --git a/core/jni/android_os_HwParcel.cpp b/core/jni/android_os_HwParcel.cpp index 5c879b8894a1..7387b294bbcd 100644 --- a/core/jni/android_os_HwParcel.cpp +++ b/core/jni/android_os_HwParcel.cpp @@ -888,15 +888,28 @@ static JNINativeMethod gMethods[] = { { "readString", "()Ljava/lang/String;", (void *)JHwParcel_native_readString }, - { "readBoolVector", "()[Z", (void *)JHwParcel_native_readBoolVector }, - { "readInt8Vector", "()[B", (void *)JHwParcel_native_readInt8Vector }, - { "readInt16Vector", "()[S", (void *)JHwParcel_native_readInt16Vector }, - { "readInt32Vector", "()[I", (void *)JHwParcel_native_readInt32Vector }, - { "readInt64Vector", "()[J", (void *)JHwParcel_native_readInt64Vector }, - { "readFloatVector", "()[F", (void *)JHwParcel_native_readFloatVector }, - { "readDoubleVector", "()[D", (void *)JHwParcel_native_readDoubleVector }, - - { "readStringVector", "()[Ljava/lang/String;", + { "readBoolVectorAsArray", "()[Z", + (void *)JHwParcel_native_readBoolVector }, + + { "readInt8VectorAsArray", "()[B", + (void *)JHwParcel_native_readInt8Vector }, + + { "readInt16VectorAsArray", "()[S", + (void *)JHwParcel_native_readInt16Vector }, + + { "readInt32VectorAsArray", "()[I", + (void *)JHwParcel_native_readInt32Vector }, + + { "readInt64VectorAsArray", "()[J", + (void *)JHwParcel_native_readInt64Vector }, + + { "readFloatVectorAsArray", "()[F", + (void *)JHwParcel_native_readFloatVector }, + + { "readDoubleVectorAsArray", "()[D", + (void *)JHwParcel_native_readDoubleVector }, + + { "readStringVectorAsArray", "()[Ljava/lang/String;", (void *)JHwParcel_native_readStringVector }, { "readStrongBinder", "()L" PACKAGE_PATH "/IHwBinder;", |