diff options
author | Jakub Pawlowski <jpawlowski@google.com> | 2017-08-08 15:47:57 -0700 |
---|---|---|
committer | Andre Eisenbach <eisenbach@google.com> | 2017-08-09 17:26:14 +0000 |
commit | e8c3b91dc306dfae808b4baab395ee66302a6390 (patch) | |
tree | a6d6429331fd6078a3ca9a82fb5e1d983eda3e1b | |
parent | a0c97b3ddb8ec27c1accd257afd20bee6b6b9265 (diff) | |
download | base-e8c3b91dc306dfae808b4baab395ee66302a6390.tar.gz |
Bluetooth: AdvertiseData parceling simplification
Use writeTypedArray instead of writeList - this will not serialize
string with type name, which is unnecessary
Use createByteArray instead of readByteArra - it takes care of null and
empty array handling
Test: sl4a FilteringTest, BleAdvertiseApiTest
Change-Id: I6a22674a0bf9933e39691de7f2b2b52a060ae368
-rw-r--r-- | core/java/android/bluetooth/le/AdvertiseData.java | 51 |
1 files changed, 13 insertions, 38 deletions
diff --git a/core/java/android/bluetooth/le/AdvertiseData.java b/core/java/android/bluetooth/le/AdvertiseData.java index ff0db9aeb610..bde2d2f890f5 100644 --- a/core/java/android/bluetooth/le/AdvertiseData.java +++ b/core/java/android/bluetooth/le/AdvertiseData.java @@ -141,32 +141,18 @@ public final class AdvertiseData implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeList(mServiceUuids); + dest.writeTypedArray(mServiceUuids.toArray(new ParcelUuid[mServiceUuids.size()]), flags); // mManufacturerSpecificData could not be null. dest.writeInt(mManufacturerSpecificData.size()); for (int i = 0; i < mManufacturerSpecificData.size(); ++i) { dest.writeInt(mManufacturerSpecificData.keyAt(i)); - byte[] data = mManufacturerSpecificData.valueAt(i); - if (data == null) { - dest.writeInt(0); - } else { - dest.writeInt(1); - dest.writeInt(data.length); - dest.writeByteArray(data); - } + dest.writeByteArray(mManufacturerSpecificData.valueAt(i)); } dest.writeInt(mServiceData.size()); for (ParcelUuid uuid : mServiceData.keySet()) { - dest.writeParcelable(uuid, flags); - byte[] data = mServiceData.get(uuid); - if (data == null) { - dest.writeInt(0); - } else { - dest.writeInt(1); - dest.writeInt(data.length); - dest.writeByteArray(data); - } + dest.writeTypedObject(uuid, flags); + dest.writeByteArray(mServiceData.get(uuid)); } dest.writeByte((byte) (getIncludeTxPowerLevel() ? 1 : 0)); dest.writeByte((byte) (getIncludeDeviceName() ? 1 : 0)); @@ -182,33 +168,22 @@ public final class AdvertiseData implements Parcelable { @Override public AdvertiseData createFromParcel(Parcel in) { Builder builder = new Builder(); - @SuppressWarnings("unchecked") - List<ParcelUuid> uuids = in.readArrayList(ParcelUuid.class.getClassLoader()); - if (uuids != null) { - for (ParcelUuid uuid : uuids) { - builder.addServiceUuid(uuid); - } + ArrayList<ParcelUuid> uuids = in.createTypedArrayList(ParcelUuid.CREATOR); + for (ParcelUuid uuid : uuids) { + builder.addServiceUuid(uuid); } + int manufacturerSize = in.readInt(); for (int i = 0; i < manufacturerSize; ++i) { int manufacturerId = in.readInt(); - if (in.readInt() == 1) { - int manufacturerDataLength = in.readInt(); - byte[] manufacturerData = new byte[manufacturerDataLength]; - in.readByteArray(manufacturerData); - builder.addManufacturerData(manufacturerId, manufacturerData); - } + byte[] manufacturerData = in.createByteArray(); + builder.addManufacturerData(manufacturerId, manufacturerData); } int serviceDataSize = in.readInt(); for (int i = 0; i < serviceDataSize; ++i) { - ParcelUuid serviceDataUuid = in.readParcelable( - ParcelUuid.class.getClassLoader()); - if (in.readInt() == 1) { - int serviceDataLength = in.readInt(); - byte[] serviceData = new byte[serviceDataLength]; - in.readByteArray(serviceData); - builder.addServiceData(serviceDataUuid, serviceData); - } + ParcelUuid serviceDataUuid = in.readTypedObject(ParcelUuid.CREATOR); + byte[] serviceData = in.createByteArray(); + builder.addServiceData(serviceDataUuid, serviceData); } builder.setIncludeTxPowerLevel(in.readByte() == 1); builder.setIncludeDeviceName(in.readByte() == 1); |