1adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang/*
2adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * Copyright (C) 2014 The Android Open Source Project
3adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang *
4adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * Licensed under the Apache License, Version 2.0 (the "License");
5adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * you may not use this file except in compliance with the License.
6adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * You may obtain a copy of the License at
7adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang *
8adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang *      http://www.apache.org/licenses/LICENSE-2.0
9adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang *
10adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * Unless required by applicable law or agreed to in writing, software
11adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * distributed under the License is distributed on an "AS IS" BASIS,
12adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * See the License for the specific language governing permissions and
14adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * limitations under the License.
15adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang */
16adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
176d81118032b92caa0f5cfebe11af02a98f819d5eWei Wangpackage android.bluetooth.le;
18adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
196d81118032b92caa0f5cfebe11af02a98f819d5eWei Wangimport android.bluetooth.BluetoothAdapter;
206d81118032b92caa0f5cfebe11af02a98f819d5eWei Wangimport android.bluetooth.BluetoothDevice;
21685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wangimport android.bluetooth.le.ScanFilter;
22685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wangimport android.bluetooth.le.ScanRecord;
23adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wangimport android.os.Parcel;
24adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wangimport android.os.ParcelUuid;
25adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wangimport android.test.suitebuilder.annotation.SmallTest;
26adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
27adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wangimport junit.framework.TestCase;
28adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
29adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang/**
30adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * Unit test cases for Bluetooth LE scan filters.
31adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * <p>
326d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * To run this test, use adb shell am instrument -e class 'android.bluetooth.ScanFilterTest' -w
33adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * 'com.android.bluetooth.tests/android.bluetooth.BluetoothTestRunner'
34adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang */
356d81118032b92caa0f5cfebe11af02a98f819d5eWei Wangpublic class ScanFilterTest extends TestCase {
36adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
37adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    private static final String DEVICE_MAC = "01:02:03:04:05:AB";
38adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    private ScanResult mScanResult;
396d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    private ScanFilter.Builder mFilterBuilder;
40adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
41adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    @Override
42adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    protected void setUp() throws Exception {
43adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        byte[] scanRecord = new byte[] {
44adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang                0x02, 0x01, 0x1a, // advertising flags
45adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang                0x05, 0x02, 0x0b, 0x11, 0x0a, 0x11, // 16 bit service uuids
466d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                0x04, 0x09, 0x50, 0x65, 0x64, // setName
47adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang                0x02, 0x0A, (byte) 0xec, // tx power level
48adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang                0x05, 0x16, 0x0b, 0x11, 0x50, 0x64, // service data
49adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang                0x05, (byte) 0xff, (byte) 0xe0, 0x00, 0x02, 0x15, // manufacturer specific data
50adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang                0x03, 0x50, 0x01, 0x02, // an unknown data type won't cause trouble
51adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        };
52adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
53adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
54adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        BluetoothDevice device = adapter.getRemoteDevice(DEVICE_MAC);
55685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang        mScanResult = new ScanResult(device, ScanRecord.parseFromBytes(scanRecord),
56685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang                -10, 1397545200000000L);
576d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        mFilterBuilder = new ScanFilter.Builder();
58adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    }
59adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
60adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    @SmallTest
616d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public void testsetNameFilter() {
62af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang        ScanFilter filter = mFilterBuilder.setDeviceName("Ped").build();
636d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        assertTrue("setName filter fails", filter.matches(mScanResult));
64adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
65af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang        filter = mFilterBuilder.setDeviceName("Pem").build();
666d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        assertFalse("setName filter fails", filter.matches(mScanResult));
67adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
68adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    }
69adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
70adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    @SmallTest
71adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    public void testDeviceFilter() {
72af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang        ScanFilter filter = mFilterBuilder.setDeviceAddress(DEVICE_MAC).build();
73adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        assertTrue("device filter fails", filter.matches(mScanResult));
74adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
75af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang        filter = mFilterBuilder.setDeviceAddress("11:22:33:44:55:66").build();
76adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        assertFalse("device filter fails", filter.matches(mScanResult));
77adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    }
78adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
79adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    @SmallTest
806d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public void testsetServiceUuidFilter() {
816d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        ScanFilter filter = mFilterBuilder.setServiceUuid(
82adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang                ParcelUuid.fromString("0000110A-0000-1000-8000-00805F9B34FB")).build();
83adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        assertTrue("uuid filter fails", filter.matches(mScanResult));
84adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
856d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        filter = mFilterBuilder.setServiceUuid(
86adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang                ParcelUuid.fromString("0000110C-0000-1000-8000-00805F9B34FB")).build();
87adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        assertFalse("uuid filter fails", filter.matches(mScanResult));
88adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
89adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        filter = mFilterBuilder
906d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                .setServiceUuid(ParcelUuid.fromString("0000110C-0000-1000-8000-00805F9B34FB"),
916d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                        ParcelUuid.fromString("FFFFFFF0-FFFF-FFFF-FFFF-FFFFFFFFFFFF"))
92adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang                .build();
93adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        assertTrue("uuid filter fails", filter.matches(mScanResult));
94adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    }
95adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
96adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    @SmallTest
976d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public void testsetServiceDataFilter() {
986d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        byte[] setServiceData = new byte[] {
990462468aaff1089f08d0859e4920f90e4378b66bWei Wang                0x50, 0x64 };
100685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang        ParcelUuid serviceDataUuid = ParcelUuid.fromString("0000110B-0000-1000-8000-00805F9B34FB");
101685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang        ScanFilter filter = mFilterBuilder.setServiceData(serviceDataUuid, setServiceData).build();
102adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        assertTrue("service data filter fails", filter.matches(mScanResult));
103adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
1040462468aaff1089f08d0859e4920f90e4378b66bWei Wang        byte[] emptyData = new byte[0];
1050462468aaff1089f08d0859e4920f90e4378b66bWei Wang        filter = mFilterBuilder.setServiceData(serviceDataUuid, emptyData).build();
1060462468aaff1089f08d0859e4920f90e4378b66bWei Wang        assertTrue("service data filter fails", filter.matches(mScanResult));
107adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
1080462468aaff1089f08d0859e4920f90e4378b66bWei Wang        byte[] prefixData = new byte[] {
1090462468aaff1089f08d0859e4920f90e4378b66bWei Wang                0x50 };
1100462468aaff1089f08d0859e4920f90e4378b66bWei Wang        filter = mFilterBuilder.setServiceData(serviceDataUuid, prefixData).build();
1110462468aaff1089f08d0859e4920f90e4378b66bWei Wang        assertTrue("service data filter fails", filter.matches(mScanResult));
1120462468aaff1089f08d0859e4920f90e4378b66bWei Wang
1130462468aaff1089f08d0859e4920f90e4378b66bWei Wang        byte[] nonMatchData = new byte[] {
1140462468aaff1089f08d0859e4920f90e4378b66bWei Wang                0x51, 0x64 };
115adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        byte[] mask = new byte[] {
1160462468aaff1089f08d0859e4920f90e4378b66bWei Wang                (byte) 0x00, (byte) 0xFF };
117685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang        filter = mFilterBuilder.setServiceData(serviceDataUuid, nonMatchData, mask).build();
118adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        assertTrue("partial service data filter fails", filter.matches(mScanResult));
1190462468aaff1089f08d0859e4920f90e4378b66bWei Wang
1200462468aaff1089f08d0859e4920f90e4378b66bWei Wang        filter = mFilterBuilder.setServiceData(serviceDataUuid, nonMatchData).build();
1210462468aaff1089f08d0859e4920f90e4378b66bWei Wang        assertFalse("service data filter fails", filter.matches(mScanResult));
122adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    }
123adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
124adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    @SmallTest
125adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    public void testManufacturerSpecificData() {
1266d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        byte[] setManufacturerData = new byte[] {
1270462468aaff1089f08d0859e4920f90e4378b66bWei Wang                0x02, 0x15 };
1280462468aaff1089f08d0859e4920f90e4378b66bWei Wang        int manufacturerId = 0xE0;
1296d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        ScanFilter filter =
1306d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                mFilterBuilder.setManufacturerData(manufacturerId, setManufacturerData).build();
1310462468aaff1089f08d0859e4920f90e4378b66bWei Wang        assertTrue("manufacturer data filter fails", filter.matches(mScanResult));
1320462468aaff1089f08d0859e4920f90e4378b66bWei Wang
1330462468aaff1089f08d0859e4920f90e4378b66bWei Wang        byte[] emptyData = new byte[0];
1340462468aaff1089f08d0859e4920f90e4378b66bWei Wang        filter = mFilterBuilder.setManufacturerData(manufacturerId, emptyData).build();
1350462468aaff1089f08d0859e4920f90e4378b66bWei Wang        assertTrue("manufacturer data filter fails", filter.matches(mScanResult));
1360462468aaff1089f08d0859e4920f90e4378b66bWei Wang
1370462468aaff1089f08d0859e4920f90e4378b66bWei Wang        byte[] prefixData = new byte[] {
1380462468aaff1089f08d0859e4920f90e4378b66bWei Wang                0x02 };
1390462468aaff1089f08d0859e4920f90e4378b66bWei Wang        filter = mFilterBuilder.setManufacturerData(manufacturerId, prefixData).build();
1400462468aaff1089f08d0859e4920f90e4378b66bWei Wang        assertTrue("manufacturer data filter fails", filter.matches(mScanResult));
141adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
1420462468aaff1089f08d0859e4920f90e4378b66bWei Wang        // Test data mask
143adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        byte[] nonMatchData = new byte[] {
1440462468aaff1089f08d0859e4920f90e4378b66bWei Wang                0x02, 0x14 };
1456d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        filter = mFilterBuilder.setManufacturerData(manufacturerId, nonMatchData).build();
1460462468aaff1089f08d0859e4920f90e4378b66bWei Wang        assertFalse("manufacturer data filter fails", filter.matches(mScanResult));
147adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        byte[] mask = new byte[] {
1480462468aaff1089f08d0859e4920f90e4378b66bWei Wang                (byte) 0xFF, (byte) 0x00
149adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        };
1506d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        filter = mFilterBuilder.setManufacturerData(manufacturerId, nonMatchData, mask).build();
1516d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        assertTrue("partial setManufacturerData filter fails", filter.matches(mScanResult));
152adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    }
153adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
154adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    @SmallTest
155adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    public void testReadWriteParcel() {
1566d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        ScanFilter filter = mFilterBuilder.build();
157adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        testReadWriteParcelForFilter(filter);
158adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
159af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang        filter = mFilterBuilder.setDeviceName("Ped").build();
160adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        testReadWriteParcelForFilter(filter);
161adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
162af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang        filter = mFilterBuilder.setDeviceAddress("11:22:33:44:55:66").build();
163adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        testReadWriteParcelForFilter(filter);
164adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
1656d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        filter = mFilterBuilder.setServiceUuid(
166adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang                ParcelUuid.fromString("0000110C-0000-1000-8000-00805F9B34FB")).build();
167adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        testReadWriteParcelForFilter(filter);
168adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
1696d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        filter = mFilterBuilder.setServiceUuid(
1706d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                ParcelUuid.fromString("0000110C-0000-1000-8000-00805F9B34FB"),
171adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang                ParcelUuid.fromString("FFFFFFF0-FFFF-FFFF-FFFF-FFFFFFFFFFFF")).build();
172adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        testReadWriteParcelForFilter(filter);
173adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
1740462468aaff1089f08d0859e4920f90e4378b66bWei Wang        byte[] serviceData = new byte[] {
1750462468aaff1089f08d0859e4920f90e4378b66bWei Wang                0x50, 0x64 };
176adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
177685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang        ParcelUuid serviceDataUuid = ParcelUuid.fromString("0000110B-0000-1000-8000-00805F9B34FB");
1780462468aaff1089f08d0859e4920f90e4378b66bWei Wang        filter = mFilterBuilder.setServiceData(serviceDataUuid, serviceData).build();
1790462468aaff1089f08d0859e4920f90e4378b66bWei Wang        testReadWriteParcelForFilter(filter);
1800462468aaff1089f08d0859e4920f90e4378b66bWei Wang
1810462468aaff1089f08d0859e4920f90e4378b66bWei Wang        filter = mFilterBuilder.setServiceData(serviceDataUuid, new byte[0]).build();
182adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        testReadWriteParcelForFilter(filter);
183adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
184adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        byte[] serviceDataMask = new byte[] {
1850462468aaff1089f08d0859e4920f90e4378b66bWei Wang                (byte) 0xFF, (byte) 0xFF };
1860462468aaff1089f08d0859e4920f90e4378b66bWei Wang        filter = mFilterBuilder.setServiceData(serviceDataUuid, serviceData, serviceDataMask)
187685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang                .build();
188adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        testReadWriteParcelForFilter(filter);
189adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
190adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        byte[] manufacturerData = new byte[] {
1910462468aaff1089f08d0859e4920f90e4378b66bWei Wang                0x02, 0x15 };
1920462468aaff1089f08d0859e4920f90e4378b66bWei Wang        int manufacturerId = 0xE0;
1936d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        filter = mFilterBuilder.setManufacturerData(manufacturerId, manufacturerData).build();
194adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        testReadWriteParcelForFilter(filter);
195adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
1960462468aaff1089f08d0859e4920f90e4378b66bWei Wang        filter = mFilterBuilder.setServiceData(serviceDataUuid, new byte[0]).build();
1970462468aaff1089f08d0859e4920f90e4378b66bWei Wang        testReadWriteParcelForFilter(filter);
1980462468aaff1089f08d0859e4920f90e4378b66bWei Wang
199adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        byte[] manufacturerDataMask = new byte[] {
2000462468aaff1089f08d0859e4920f90e4378b66bWei Wang                (byte) 0xFF, (byte) 0xFF
201adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        };
2026d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        filter = mFilterBuilder.setManufacturerData(manufacturerId, manufacturerData,
2036d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                manufacturerDataMask).build();
204adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        testReadWriteParcelForFilter(filter);
205adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    }
206adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang
2076d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    private void testReadWriteParcelForFilter(ScanFilter filter) {
208adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        Parcel parcel = Parcel.obtain();
209adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        filter.writeToParcel(parcel, 0);
210adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        parcel.setDataPosition(0);
2116d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        ScanFilter filterFromParcel =
2126d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                ScanFilter.CREATOR.createFromParcel(parcel);
213adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang        assertEquals(filter, filterFromParcel);
214adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang    }
215adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang}
216