Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2202b164 authored by Andreas Huber's avatar Andreas Huber Committed by Gerrit Code Review
Browse files

Merge "HIDL Vectors are now exposed to Java as ArrayList<T>, the supporting APIs on"

parents 239df3cc ef1a565b
Loading
Loading
Loading
Loading
+139 −16
Original line number Diff line number Diff line
@@ -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();

+22 −9
Original line number Diff line number Diff line
@@ -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;",