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