summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Pawlowski <jpawlowski@google.com>2017-08-08 15:47:57 -0700
committerAndre Eisenbach <eisenbach@google.com>2017-08-09 17:26:14 +0000
commite8c3b91dc306dfae808b4baab395ee66302a6390 (patch)
treea6d6429331fd6078a3ca9a82fb5e1d983eda3e1b
parenta0c97b3ddb8ec27c1accd257afd20bee6b6b9265 (diff)
downloadbase-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.java51
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);