1dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber/* 2dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * Copyright (C) 2016 The Android Open Source Project 3dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * 4dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * you may not use this file except in compliance with the License. 6dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * You may obtain a copy of the License at 7dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * 8dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * 10dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * Unless required by applicable law or agreed to in writing, software 11dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * See the License for the specific language governing permissions and 14dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * limitations under the License. 15dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber */ 16dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 17dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huberpackage android.os; 18dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 19e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Morelandimport android.annotation.IntDef; 20e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Morelandimport android.annotation.SystemApi; 21ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 22dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huberimport libcore.util.NativeAllocationRegistry; 23dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 24e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Morelandimport java.lang.annotation.Retention; 25e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Morelandimport java.lang.annotation.RetentionPolicy; 26e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Morelandimport java.util.ArrayList; 27e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Morelandimport java.util.Arrays; 28e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland 29dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber/** @hide */ 30e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland@SystemApi 31dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huberpublic class HwParcel { 32dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private static final String TAG = "HwParcel"; 33dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 34e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland @IntDef(prefix = { "STATUS_" }, value = { 35e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland STATUS_SUCCESS, 36e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland }) 37e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland @Retention(RetentionPolicy.SOURCE) 38e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland public @interface Status {} 39e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland 40e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 41e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Success return error for a transaction. Written to parcels 42e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * using writeStatus. 43e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 44dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public static final int STATUS_SUCCESS = 0; 45dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 46dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private static final NativeAllocationRegistry sNativeRegistry; 47dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 48dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private HwParcel(boolean allocate) { 49dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber native_setup(allocate); 50dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 51dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber sNativeRegistry.registerNativeAllocation( 52dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber this, 53dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber mNativeContext); 54dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber } 55dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 56e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 57e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Creates an initialized and empty parcel. 58e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 59dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public HwParcel() { 60dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber native_setup(true /* allocate */); 61dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 62dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber sNativeRegistry.registerNativeAllocation( 63dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber this, 64dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber mNativeContext); 65dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber } 66dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 67e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 68e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes an interface token into the parcel used to verify that 69e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * a transaction has made it to the write type of interface. 70e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * 71e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param interfaceName fully qualified name of interface message 72e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * is being sent to. 73e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 74dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeInterfaceToken(String interfaceName); 75e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 76e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes a boolean value to the end of the parcel. 77e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 78e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 7986635bb45ee1ddeb3059a8a925659964c7858cc3Andreas Huber public native final void writeBool(boolean val); 80e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 81e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes a byte value to the end of the parcel. 82e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 83e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 84dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeInt8(byte val); 85e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 86e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes a short value to the end of the parcel. 87e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 88e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 89dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeInt16(short val); 90e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 91e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes a int value to the end of the parcel. 92e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 93e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 94dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeInt32(int val); 95e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 96e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes a long value to the end of the parcel. 97e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 98e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 99dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeInt64(long val); 100e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 101e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes a float value to the end of the parcel. 102e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 103e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 104dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeFloat(float val); 105e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 106e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes a double value to the end of the parcel. 107e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 108e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 109dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeDouble(double val); 110e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 111e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes a String value to the end of the parcel. 112e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * 113e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Note, this will be converted to UTF-8 when it is written. 114e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * 115e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 116e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 117dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeString(String val); 118dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 119e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 120e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes an array of boolean values to the end of the parcel. 121e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 122e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 123ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeBoolVector(boolean[] val); 124e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 125e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes an array of byte values to the end of the parcel. 126e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 127e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 128ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeInt8Vector(byte[] val); 129e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 130e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes an array of short values to the end of the parcel. 131e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 132e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 133ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeInt16Vector(short[] val); 134e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 135e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes an array of int values to the end of the parcel. 136e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 137e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 138ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeInt32Vector(int[] val); 139e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 140e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes an array of long values to the end of the parcel. 141e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 142e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 143ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeInt64Vector(long[] val); 144e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 145e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes an array of float values to the end of the parcel. 146e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 147e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 148ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeFloatVector(float[] val); 149e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 150e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes an array of double values to the end of the parcel. 151e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 152e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 153ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeDoubleVector(double[] val); 154e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 155e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Writes an array of String values to the end of the parcel. 156e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * 157e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Note, these will be converted to UTF-8 as they are written. 158e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * 159e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val to write 160e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 161ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeStringVector(String[] val); 162ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 163e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 164e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Helper method to write a list of Booleans to val. 165e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val list to write 166e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 167ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeBoolVector(ArrayList<Boolean> val) { 168ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber final int n = val.size(); 169ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber boolean[] array = new boolean[n]; 170ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber for (int i = 0; i < n; ++i) { 171ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber array[i] = val.get(i); 172ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 173ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 174ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeBoolVector(array); 175ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 176ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 177e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 178e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Helper method to write a list of Booleans to the end of the parcel. 179e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val list to write 180e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 181ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeInt8Vector(ArrayList<Byte> val) { 182ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber final int n = val.size(); 183ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber byte[] array = new byte[n]; 184ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber for (int i = 0; i < n; ++i) { 185ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber array[i] = val.get(i); 186ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 187ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 188ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeInt8Vector(array); 189ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 190ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 191e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 192e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Helper method to write a list of Shorts to the end of the parcel. 193e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val list to write 194e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 195ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeInt16Vector(ArrayList<Short> val) { 196ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber final int n = val.size(); 197ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber short[] array = new short[n]; 198ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber for (int i = 0; i < n; ++i) { 199ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber array[i] = val.get(i); 200ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 201ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 202ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeInt16Vector(array); 203ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 204ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 205e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 206e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Helper method to write a list of Integers to the end of the parcel. 207e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val list to write 208e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 209ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeInt32Vector(ArrayList<Integer> val) { 210ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber final int n = val.size(); 211ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber int[] array = new int[n]; 212ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber for (int i = 0; i < n; ++i) { 213ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber array[i] = val.get(i); 214ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 215ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 216ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeInt32Vector(array); 217ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 218ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 219e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 220e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Helper method to write a list of Longs to the end of the parcel. 221e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val list to write 222e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 223ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeInt64Vector(ArrayList<Long> val) { 224ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber final int n = val.size(); 225ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber long[] array = new long[n]; 226ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber for (int i = 0; i < n; ++i) { 227ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber array[i] = val.get(i); 228ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 229ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 230ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeInt64Vector(array); 231ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 232ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 233e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 234e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Helper method to write a list of Floats to the end of the parcel. 235e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val list to write 236e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 237ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeFloatVector(ArrayList<Float> val) { 238ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber final int n = val.size(); 239ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber float[] array = new float[n]; 240ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber for (int i = 0; i < n; ++i) { 241ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber array[i] = val.get(i); 242ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 243ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 244ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeFloatVector(array); 245ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 246ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 247e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 248e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Helper method to write a list of Doubles to the end of the parcel. 249e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val list to write 250e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 251ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeDoubleVector(ArrayList<Double> val) { 252ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber final int n = val.size(); 253ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber double[] array = new double[n]; 254ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber for (int i = 0; i < n; ++i) { 255ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber array[i] = val.get(i); 256ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 257ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 258ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeDoubleVector(array); 259ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 260ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 261e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 262e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Helper method to write a list of Strings to the end of the parcel. 263e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param val list to write 264e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 265ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeStringVector(ArrayList<String> val) { 266ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeStringVector(val.toArray(new String[val.size()])); 267ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 268dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 269e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 270e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Write a hwbinder object to the end of the parcel. 271e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param binder value to write 272e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 273dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeStrongBinder(IHwBinder binder); 274dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 275e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 276e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Checks to make sure that the interface name matches the name written by the parcel 277e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * sender by writeInterfaceToken 278e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * 279e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws SecurityException interface doesn't match 280e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 281dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void enforceInterface(String interfaceName); 282e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland 283e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 284e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads a boolean value from the current location in the parcel. 285e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return value parsed from the parcel 286e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 287e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 28886635bb45ee1ddeb3059a8a925659964c7858cc3Andreas Huber public native final boolean readBool(); 289e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 290e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads a byte value from the current location in the parcel. 291e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return value parsed from the parcel 292e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 293e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 294dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final byte readInt8(); 295e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 296e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads a short value from the current location in the parcel. 297e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return value parsed from the parcel 298e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 299e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 300dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final short readInt16(); 301e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 302e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads a int value from the current location in the parcel. 303e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return value parsed from the parcel 304e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 305e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 306dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final int readInt32(); 307e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 308e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads a long value from the current location in the parcel. 309e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return value parsed from the parcel 310e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 311e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 312dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final long readInt64(); 313e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 314e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads a float value from the current location in the parcel. 315e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return value parsed from the parcel 316e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 317e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 318dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final float readFloat(); 319e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 320e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads a double value from the current location in the parcel. 321e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return value parsed from the parcel 322e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 323e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 324dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final double readDouble(); 325e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 326e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads a String value from the current location in the parcel. 327e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return value parsed from the parcel 328e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 329e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 330dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final String readString(); 331dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 332e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 333e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads an array of boolean values from the parcel. 334e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values 335e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 336e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 337ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final boolean[] readBoolVectorAsArray(); 338e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 339e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads an array of byte values from the parcel. 340e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values 341e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 342e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 343ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final byte[] readInt8VectorAsArray(); 344e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 345e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads an array of short values from the parcel. 346e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values 347e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 348e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 349ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final short[] readInt16VectorAsArray(); 350e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 351e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads an array of int values from the parcel. 352e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values 353e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 354e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 355ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final int[] readInt32VectorAsArray(); 356e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 357e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads an array of long values from the parcel. 358e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values 359e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 360e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 361ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final long[] readInt64VectorAsArray(); 362e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 363e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads an array of float values from the parcel. 364e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values 365e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 366e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 367ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final float[] readFloatVectorAsArray(); 368e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 369e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads an array of double values from the parcel. 370e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values 371e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 372e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 373ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final double[] readDoubleVectorAsArray(); 374e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 375e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads an array of String values from the parcel. 376e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values 377e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 378e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 379ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final String[] readStringVectorAsArray(); 380ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 381e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 382e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Convenience method to read a Boolean vector as an ArrayList. 383e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values. 384e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 385e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 386ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<Boolean> readBoolVector() { 387ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber Boolean[] array = HwBlob.wrapArray(readBoolVectorAsArray()); 388ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 389ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<Boolean>(Arrays.asList(array)); 390ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 391ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 392e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 393e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Convenience method to read a Byte vector as an ArrayList. 394e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values. 395e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 396e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 397ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<Byte> readInt8Vector() { 398ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber Byte[] array = HwBlob.wrapArray(readInt8VectorAsArray()); 399ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 400ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<Byte>(Arrays.asList(array)); 401ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 402ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 403e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 404e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Convenience method to read a Short vector as an ArrayList. 405e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values. 406e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 407e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 408ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<Short> readInt16Vector() { 409ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber Short[] array = HwBlob.wrapArray(readInt16VectorAsArray()); 410ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 411ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<Short>(Arrays.asList(array)); 412ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 413ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 414e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 415e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Convenience method to read a Integer vector as an ArrayList. 416e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values. 417e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 418e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 419ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<Integer> readInt32Vector() { 420ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber Integer[] array = HwBlob.wrapArray(readInt32VectorAsArray()); 421ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 422ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<Integer>(Arrays.asList(array)); 423ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 424ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 425e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 426e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Convenience method to read a Long vector as an ArrayList. 427e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values. 428e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 429e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 430ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<Long> readInt64Vector() { 431ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber Long[] array = HwBlob.wrapArray(readInt64VectorAsArray()); 432ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 433ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<Long>(Arrays.asList(array)); 434ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 435ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 436e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 437e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Convenience method to read a Float vector as an ArrayList. 438e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values. 439e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 440e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 441ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<Float> readFloatVector() { 442ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber Float[] array = HwBlob.wrapArray(readFloatVectorAsArray()); 443ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 444ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<Float>(Arrays.asList(array)); 445ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 446ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 447e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 448e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Convenience method to read a Double vector as an ArrayList. 449e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values. 450e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 451e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 452ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<Double> readDoubleVector() { 453ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber Double[] array = HwBlob.wrapArray(readDoubleVectorAsArray()); 454ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 455ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<Double>(Arrays.asList(array)); 456ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 457ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 458e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 459e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Convenience method to read a String vector as an ArrayList. 460e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return array of parsed values. 461e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 462e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 463ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<String> readStringVector() { 464ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<String>(Arrays.asList(readStringVectorAsArray())); 465ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 466dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 467e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 468e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Reads a strong binder value from the parcel. 469e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return binder object read from parcel or null if no binder can be read 470e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 471e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 472dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final IHwBinder readStrongBinder(); 473dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 474e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 475e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Read opaque segment of data as a blob. 476e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return blob of size expectedSize 477e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if the parcel has no more data 478e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 479932b5048655ad746e265be1fd590194f7e930f61Martijn Coenen public native final HwBlob readBuffer(long expectedSize); 4809266f9928d5b3431982cd04f4d6946b70f40766aAndreas Huber 481e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 482e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Read a buffer written using scatter gather. 483e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * 484e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param expectedSize size that buffer should be 485e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param parentHandle handle from which to read the embedded buffer 486e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param offset offset into parent 487e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param nullable whether or not to allow for a null return 488e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @return blob of data with size expectedSize 489e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws NoSuchElementException if an embedded buffer is not available to read 490e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if expectedSize < 0 491e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws NullPointerException if the transaction specified the blob to be null 492e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * but nullable is false 493e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 4949266f9928d5b3431982cd04f4d6946b70f40766aAndreas Huber public native final HwBlob readEmbeddedBuffer( 495932b5048655ad746e265be1fd590194f7e930f61Martijn Coenen long expectedSize, long parentHandle, long offset, 496932b5048655ad746e265be1fd590194f7e930f61Martijn Coenen boolean nullable); 4979266f9928d5b3431982cd04f4d6946b70f40766aAndreas Huber 498e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 499e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Write a buffer into the transaction. 500e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param blob blob to write into the parcel. 501e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 5029266f9928d5b3431982cd04f4d6946b70f40766aAndreas Huber public native final void writeBuffer(HwBlob blob); 503e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 504e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Write a status value into the blob. 505e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @param status value to write 506e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 507dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeStatus(int status); 508e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 509e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws IllegalArgumentException if a success vaue cannot be read 510e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * @throws RemoteException if success value indicates a transaction error 511e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 512dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void verifySuccess(); 513e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 514e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Should be called to reduce memory pressure when this object no longer needs 515e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * to be written to. 516e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 517dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void releaseTemporaryStorage(); 518e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 519e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Should be called when object is no longer needed to reduce possible memory 520e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * pressure if the Java GC does not get to this object in time. 521e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 5223d726d16b6c198087dc527d9e5f51f18351a0fa9Martijn Coenen public native final void release(); 523dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 524e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland /** 525e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland * Sends the parcel to the specified destination. 526e8e63aae6f705cbe316a1d9a7780f9f534bc3948Steven Moreland */ 527dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void send(); 528dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 529dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber // Returns address of the "freeFunction". 530dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private static native final long native_init(); 531dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 532dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private native final void native_setup(boolean allocate); 533dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 534dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber static { 535dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber long freeFunction = native_init(); 536dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 537dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber sNativeRegistry = new NativeAllocationRegistry( 538dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber HwParcel.class.getClassLoader(), 539dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber freeFunction, 540dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 128 /* size */); 541dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber } 542dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 543dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private long mNativeContext; 544dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber} 545dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 546