Loading core/java/android/bluetooth/le/AdvertiseData.java +49 −30 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.os.Parcelable; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; /** * Advertise data packet container for Bluetooth LE advertising. This represents the data to be Loading Loading @@ -119,13 +120,44 @@ public final class AdvertiseData implements Parcelable { return mIncludeDeviceName; } /** * @hide */ @Override public int hashCode() { return Objects.hash(mServiceUuids, mManufacturerId, mManufacturerSpecificData, mServiceDataUuid, mServiceData, mIncludeDeviceName, mIncludeTxPowerLevel); } /** * @hide */ @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || getClass() != obj.getClass()) { return false; } AdvertiseData other = (AdvertiseData) obj; return Objects.equals(mServiceUuids, other.mServiceUuids) && mManufacturerId == other.mManufacturerId && Objects.deepEquals(mManufacturerSpecificData, other.mManufacturerSpecificData) && Objects.equals(mServiceDataUuid, other.mServiceDataUuid) && Objects.deepEquals(mServiceData, other.mServiceData) && mIncludeDeviceName == other.mIncludeDeviceName && mIncludeTxPowerLevel == other.mIncludeTxPowerLevel; } @Override public String toString() { return "AdvertiseData [mServiceUuids=" + mServiceUuids + ", mManufacturerId=" + mManufacturerId + ", mManufacturerSpecificData=" + Arrays.toString(mManufacturerSpecificData) + ", mServiceDataUuid=" + mServiceDataUuid + ", mServiceData=" + Arrays.toString(mServiceData) + ", mIncludeTxPowerLevel=" + mIncludeTxPowerLevel + ", mIncludeDeviceName=" + "]"; + ", mIncludeTxPowerLevel=" + mIncludeTxPowerLevel + ", mIncludeDeviceName=" + mIncludeDeviceName + "]"; } @Override Loading @@ -135,33 +167,24 @@ public final class AdvertiseData implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { if (mServiceUuids == null) { dest.writeInt(0); } else { dest.writeInt(mServiceUuids.size()); dest.writeList(mServiceUuids); } dest.writeInt(mManufacturerId); if (mManufacturerSpecificData == null) { dest.writeInt(0); } else { dest.writeInt(1); dest.writeInt(mManufacturerSpecificData.length); dest.writeByteArray(mManufacturerSpecificData); } if (mServiceDataUuid == null) { dest.writeInt(0); } else { dest.writeInt(1); dest.writeParcelable(mServiceDataUuid, flags); if (mServiceData == null) { dest.writeInt(0); } else { dest.writeInt(1); dest.writeInt(mServiceData.length); dest.writeByteArray(mServiceData); } } dest.writeByte((byte) (getIncludeTxPowerLevel() ? 1 : 0)); dest.writeByte((byte) (getIncludeDeviceName() ? 1 : 0)); } Loading @@ -179,30 +202,27 @@ public final class AdvertiseData implements Parcelable { @Override public AdvertiseData createFromParcel(Parcel in) { Builder builder = new Builder(); if (in.readInt() > 0) { List<ParcelUuid> uuids = new ArrayList<ParcelUuid>(); in.readList(uuids, ParcelUuid.class.getClassLoader()); List<ParcelUuid> uuids = in.readArrayList(ParcelUuid.class.getClassLoader()); if (uuids != null) { for (ParcelUuid uuid : uuids) { builder.addServiceUuid(uuid); } } int manufacturerId = in.readInt(); if (in.readInt() == 1) { int manufacturerDataLength = in.readInt(); if (manufacturerDataLength > 0) { byte[] manufacturerData = new byte[manufacturerDataLength]; in.readByteArray(manufacturerData); builder.setManufacturerData(manufacturerId, manufacturerData); } if (in.readInt() == 1) { ParcelUuid serviceDataUuid = in.readParcelable( ParcelUuid.class.getClassLoader()); if (in.readInt() == 1) { int serviceDataLength = in.readInt(); if (serviceDataLength > 0) { byte[] serviceData = new byte[serviceDataLength]; in.readByteArray(serviceData); builder.setServiceData(serviceDataUuid, serviceData); } } builder.setIncludeTxPowerLevel(in.readByte() == 1); builder.setIncludeDeviceName(in.readByte() == 1); return builder.build(); Loading @@ -221,7 +241,7 @@ public final class AdvertiseData implements Parcelable { @Nullable private List<ParcelUuid> mServiceUuids = new ArrayList<ParcelUuid>(); private int mManufacturerId; private int mManufacturerId = -1; @Nullable private byte[] mManufacturerSpecificData; @Nullable Loading Loading @@ -307,7 +327,6 @@ public final class AdvertiseData implements Parcelable { /** * Build the {@link AdvertiseData}. * */ public AdvertiseData build() { return new AdvertiseData(mServiceUuids, Loading core/tests/bluetoothtests/src/android/bluetooth/le/AdvertiseDataTest.java 0 → 100644 +144 −0 Original line number Diff line number Diff line /* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.bluetooth.le; import android.os.Parcel; import android.os.ParcelUuid; import android.test.suitebuilder.annotation.SmallTest; import junit.framework.TestCase; /** * Unit test cases for {@link AdvertiseData}. * <p> * To run the test, use adb shell am instrument -e class 'android.bluetooth.le.AdvertiseDataTest' -w * 'com.android.bluetooth.tests/android.bluetooth.BluetoothTestRunner' */ public class AdvertiseDataTest extends TestCase { private AdvertiseData.Builder mAdvertiseDataBuilder; @Override protected void setUp() throws Exception { mAdvertiseDataBuilder = new AdvertiseData.Builder(); } @SmallTest public void testEmptyData() { Parcel parcel = Parcel.obtain(); AdvertiseData data = mAdvertiseDataBuilder.build(); data.writeToParcel(parcel, 0); parcel.setDataPosition(0); AdvertiseData dataFromParcel = AdvertiseData.CREATOR.createFromParcel(parcel); assertEquals(data, dataFromParcel); } @SmallTest public void testEmptyServiceUuid() { Parcel parcel = Parcel.obtain(); AdvertiseData data = mAdvertiseDataBuilder.setIncludeDeviceName(true).build(); data.writeToParcel(parcel, 0); parcel.setDataPosition(0); AdvertiseData dataFromParcel = AdvertiseData.CREATOR.createFromParcel(parcel); assertEquals(data, dataFromParcel); } @SmallTest public void testEmptyManufacturerData() { Parcel parcel = Parcel.obtain(); int manufacturerId = 50; byte[] manufacturerData = new byte[0]; AdvertiseData data = mAdvertiseDataBuilder.setIncludeDeviceName(true) .setManufacturerData(manufacturerId, manufacturerData).build(); data.writeToParcel(parcel, 0); parcel.setDataPosition(0); AdvertiseData dataFromParcel = AdvertiseData.CREATOR.createFromParcel(parcel); assertEquals(data, dataFromParcel); } @SmallTest public void testEmptyServiceData() { Parcel parcel = Parcel.obtain(); ParcelUuid uuid = ParcelUuid.fromString("0000110A-0000-1000-8000-00805F9B34FB"); byte[] serviceData = new byte[0]; AdvertiseData data = mAdvertiseDataBuilder.setIncludeDeviceName(true) .setServiceData(uuid, serviceData).build(); data.writeToParcel(parcel, 0); parcel.setDataPosition(0); AdvertiseData dataFromParcel = AdvertiseData.CREATOR.createFromParcel(parcel); assertEquals(data, dataFromParcel); } @SmallTest public void testServiceUuid() { Parcel parcel = Parcel.obtain(); ParcelUuid uuid = ParcelUuid.fromString("0000110A-0000-1000-8000-00805F9B34FB"); ParcelUuid uuid2 = ParcelUuid.fromString("0000110B-0000-1000-8000-00805F9B34FB"); AdvertiseData data = mAdvertiseDataBuilder.setIncludeDeviceName(true) .addServiceUuid(uuid).addServiceUuid(uuid2).build(); data.writeToParcel(parcel, 0); parcel.setDataPosition(0); AdvertiseData dataFromParcel = AdvertiseData.CREATOR.createFromParcel(parcel); assertEquals(data, dataFromParcel); } @SmallTest public void testManufacturerData() { Parcel parcel = Parcel.obtain(); ParcelUuid uuid = ParcelUuid.fromString("0000110A-0000-1000-8000-00805F9B34FB"); ParcelUuid uuid2 = ParcelUuid.fromString("0000110B-0000-1000-8000-00805F9B34FB"); int manufacturerId = 50; byte[] manufacturerData = new byte[] { (byte) 0xF0, 0x00, 0x02, 0x15 }; AdvertiseData data = mAdvertiseDataBuilder.setIncludeDeviceName(true) .addServiceUuid(uuid).addServiceUuid(uuid2) .setManufacturerData(manufacturerId, manufacturerData).build(); data.writeToParcel(parcel, 0); parcel.setDataPosition(0); AdvertiseData dataFromParcel = AdvertiseData.CREATOR.createFromParcel(parcel); assertEquals(data, dataFromParcel); } @SmallTest public void testServiceData() { Parcel parcel = Parcel.obtain(); ParcelUuid uuid = ParcelUuid.fromString("0000110A-0000-1000-8000-00805F9B34FB"); byte[] serviceData = new byte[] { (byte) 0xF0, 0x00, 0x02, 0x15 }; AdvertiseData data = mAdvertiseDataBuilder.setIncludeDeviceName(true) .setServiceData(uuid, serviceData).build(); data.writeToParcel(parcel, 0); parcel.setDataPosition(0); AdvertiseData dataFromParcel = AdvertiseData.CREATOR.createFromParcel(parcel); assertEquals(data, dataFromParcel); } } core/tests/bluetoothtests/src/android/bluetooth/le/ScanFilterTest.java +0 −1 Original line number Diff line number Diff line Loading @@ -186,7 +186,6 @@ public class ScanFilterTest extends TestCase { parcel.setDataPosition(0); ScanFilter filterFromParcel = ScanFilter.CREATOR.createFromParcel(parcel); System.out.println(filterFromParcel); assertEquals(filter, filterFromParcel); } } Loading
core/java/android/bluetooth/le/AdvertiseData.java +49 −30 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.os.Parcelable; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; /** * Advertise data packet container for Bluetooth LE advertising. This represents the data to be Loading Loading @@ -119,13 +120,44 @@ public final class AdvertiseData implements Parcelable { return mIncludeDeviceName; } /** * @hide */ @Override public int hashCode() { return Objects.hash(mServiceUuids, mManufacturerId, mManufacturerSpecificData, mServiceDataUuid, mServiceData, mIncludeDeviceName, mIncludeTxPowerLevel); } /** * @hide */ @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || getClass() != obj.getClass()) { return false; } AdvertiseData other = (AdvertiseData) obj; return Objects.equals(mServiceUuids, other.mServiceUuids) && mManufacturerId == other.mManufacturerId && Objects.deepEquals(mManufacturerSpecificData, other.mManufacturerSpecificData) && Objects.equals(mServiceDataUuid, other.mServiceDataUuid) && Objects.deepEquals(mServiceData, other.mServiceData) && mIncludeDeviceName == other.mIncludeDeviceName && mIncludeTxPowerLevel == other.mIncludeTxPowerLevel; } @Override public String toString() { return "AdvertiseData [mServiceUuids=" + mServiceUuids + ", mManufacturerId=" + mManufacturerId + ", mManufacturerSpecificData=" + Arrays.toString(mManufacturerSpecificData) + ", mServiceDataUuid=" + mServiceDataUuid + ", mServiceData=" + Arrays.toString(mServiceData) + ", mIncludeTxPowerLevel=" + mIncludeTxPowerLevel + ", mIncludeDeviceName=" + "]"; + ", mIncludeTxPowerLevel=" + mIncludeTxPowerLevel + ", mIncludeDeviceName=" + mIncludeDeviceName + "]"; } @Override Loading @@ -135,33 +167,24 @@ public final class AdvertiseData implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { if (mServiceUuids == null) { dest.writeInt(0); } else { dest.writeInt(mServiceUuids.size()); dest.writeList(mServiceUuids); } dest.writeInt(mManufacturerId); if (mManufacturerSpecificData == null) { dest.writeInt(0); } else { dest.writeInt(1); dest.writeInt(mManufacturerSpecificData.length); dest.writeByteArray(mManufacturerSpecificData); } if (mServiceDataUuid == null) { dest.writeInt(0); } else { dest.writeInt(1); dest.writeParcelable(mServiceDataUuid, flags); if (mServiceData == null) { dest.writeInt(0); } else { dest.writeInt(1); dest.writeInt(mServiceData.length); dest.writeByteArray(mServiceData); } } dest.writeByte((byte) (getIncludeTxPowerLevel() ? 1 : 0)); dest.writeByte((byte) (getIncludeDeviceName() ? 1 : 0)); } Loading @@ -179,30 +202,27 @@ public final class AdvertiseData implements Parcelable { @Override public AdvertiseData createFromParcel(Parcel in) { Builder builder = new Builder(); if (in.readInt() > 0) { List<ParcelUuid> uuids = new ArrayList<ParcelUuid>(); in.readList(uuids, ParcelUuid.class.getClassLoader()); List<ParcelUuid> uuids = in.readArrayList(ParcelUuid.class.getClassLoader()); if (uuids != null) { for (ParcelUuid uuid : uuids) { builder.addServiceUuid(uuid); } } int manufacturerId = in.readInt(); if (in.readInt() == 1) { int manufacturerDataLength = in.readInt(); if (manufacturerDataLength > 0) { byte[] manufacturerData = new byte[manufacturerDataLength]; in.readByteArray(manufacturerData); builder.setManufacturerData(manufacturerId, manufacturerData); } if (in.readInt() == 1) { ParcelUuid serviceDataUuid = in.readParcelable( ParcelUuid.class.getClassLoader()); if (in.readInt() == 1) { int serviceDataLength = in.readInt(); if (serviceDataLength > 0) { byte[] serviceData = new byte[serviceDataLength]; in.readByteArray(serviceData); builder.setServiceData(serviceDataUuid, serviceData); } } builder.setIncludeTxPowerLevel(in.readByte() == 1); builder.setIncludeDeviceName(in.readByte() == 1); return builder.build(); Loading @@ -221,7 +241,7 @@ public final class AdvertiseData implements Parcelable { @Nullable private List<ParcelUuid> mServiceUuids = new ArrayList<ParcelUuid>(); private int mManufacturerId; private int mManufacturerId = -1; @Nullable private byte[] mManufacturerSpecificData; @Nullable Loading Loading @@ -307,7 +327,6 @@ public final class AdvertiseData implements Parcelable { /** * Build the {@link AdvertiseData}. * */ public AdvertiseData build() { return new AdvertiseData(mServiceUuids, Loading
core/tests/bluetoothtests/src/android/bluetooth/le/AdvertiseDataTest.java 0 → 100644 +144 −0 Original line number Diff line number Diff line /* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.bluetooth.le; import android.os.Parcel; import android.os.ParcelUuid; import android.test.suitebuilder.annotation.SmallTest; import junit.framework.TestCase; /** * Unit test cases for {@link AdvertiseData}. * <p> * To run the test, use adb shell am instrument -e class 'android.bluetooth.le.AdvertiseDataTest' -w * 'com.android.bluetooth.tests/android.bluetooth.BluetoothTestRunner' */ public class AdvertiseDataTest extends TestCase { private AdvertiseData.Builder mAdvertiseDataBuilder; @Override protected void setUp() throws Exception { mAdvertiseDataBuilder = new AdvertiseData.Builder(); } @SmallTest public void testEmptyData() { Parcel parcel = Parcel.obtain(); AdvertiseData data = mAdvertiseDataBuilder.build(); data.writeToParcel(parcel, 0); parcel.setDataPosition(0); AdvertiseData dataFromParcel = AdvertiseData.CREATOR.createFromParcel(parcel); assertEquals(data, dataFromParcel); } @SmallTest public void testEmptyServiceUuid() { Parcel parcel = Parcel.obtain(); AdvertiseData data = mAdvertiseDataBuilder.setIncludeDeviceName(true).build(); data.writeToParcel(parcel, 0); parcel.setDataPosition(0); AdvertiseData dataFromParcel = AdvertiseData.CREATOR.createFromParcel(parcel); assertEquals(data, dataFromParcel); } @SmallTest public void testEmptyManufacturerData() { Parcel parcel = Parcel.obtain(); int manufacturerId = 50; byte[] manufacturerData = new byte[0]; AdvertiseData data = mAdvertiseDataBuilder.setIncludeDeviceName(true) .setManufacturerData(manufacturerId, manufacturerData).build(); data.writeToParcel(parcel, 0); parcel.setDataPosition(0); AdvertiseData dataFromParcel = AdvertiseData.CREATOR.createFromParcel(parcel); assertEquals(data, dataFromParcel); } @SmallTest public void testEmptyServiceData() { Parcel parcel = Parcel.obtain(); ParcelUuid uuid = ParcelUuid.fromString("0000110A-0000-1000-8000-00805F9B34FB"); byte[] serviceData = new byte[0]; AdvertiseData data = mAdvertiseDataBuilder.setIncludeDeviceName(true) .setServiceData(uuid, serviceData).build(); data.writeToParcel(parcel, 0); parcel.setDataPosition(0); AdvertiseData dataFromParcel = AdvertiseData.CREATOR.createFromParcel(parcel); assertEquals(data, dataFromParcel); } @SmallTest public void testServiceUuid() { Parcel parcel = Parcel.obtain(); ParcelUuid uuid = ParcelUuid.fromString("0000110A-0000-1000-8000-00805F9B34FB"); ParcelUuid uuid2 = ParcelUuid.fromString("0000110B-0000-1000-8000-00805F9B34FB"); AdvertiseData data = mAdvertiseDataBuilder.setIncludeDeviceName(true) .addServiceUuid(uuid).addServiceUuid(uuid2).build(); data.writeToParcel(parcel, 0); parcel.setDataPosition(0); AdvertiseData dataFromParcel = AdvertiseData.CREATOR.createFromParcel(parcel); assertEquals(data, dataFromParcel); } @SmallTest public void testManufacturerData() { Parcel parcel = Parcel.obtain(); ParcelUuid uuid = ParcelUuid.fromString("0000110A-0000-1000-8000-00805F9B34FB"); ParcelUuid uuid2 = ParcelUuid.fromString("0000110B-0000-1000-8000-00805F9B34FB"); int manufacturerId = 50; byte[] manufacturerData = new byte[] { (byte) 0xF0, 0x00, 0x02, 0x15 }; AdvertiseData data = mAdvertiseDataBuilder.setIncludeDeviceName(true) .addServiceUuid(uuid).addServiceUuid(uuid2) .setManufacturerData(manufacturerId, manufacturerData).build(); data.writeToParcel(parcel, 0); parcel.setDataPosition(0); AdvertiseData dataFromParcel = AdvertiseData.CREATOR.createFromParcel(parcel); assertEquals(data, dataFromParcel); } @SmallTest public void testServiceData() { Parcel parcel = Parcel.obtain(); ParcelUuid uuid = ParcelUuid.fromString("0000110A-0000-1000-8000-00805F9B34FB"); byte[] serviceData = new byte[] { (byte) 0xF0, 0x00, 0x02, 0x15 }; AdvertiseData data = mAdvertiseDataBuilder.setIncludeDeviceName(true) .setServiceData(uuid, serviceData).build(); data.writeToParcel(parcel, 0); parcel.setDataPosition(0); AdvertiseData dataFromParcel = AdvertiseData.CREATOR.createFromParcel(parcel); assertEquals(data, dataFromParcel); } }
core/tests/bluetoothtests/src/android/bluetooth/le/ScanFilterTest.java +0 −1 Original line number Diff line number Diff line Loading @@ -186,7 +186,6 @@ public class ScanFilterTest extends TestCase { parcel.setDataPosition(0); ScanFilter filterFromParcel = ScanFilter.CREATOR.createFromParcel(parcel); System.out.println(filterFromParcel); assertEquals(filter, filterFromParcel); } }