Add UUID to service data and TX power to extended properties.
Bug: 255682209
Test: atest NearbyUnitTests and end-to-end device tests
Ignore-AOSP-First: nearby_not_in_aosp_yet
Change-Id: I73449ac45fa63b98a5c65baa37a5f5c48bfb811a
diff --git a/nearby/service/java/com/android/server/nearby/provider/ChreDiscoveryProvider.java b/nearby/service/java/com/android/server/nearby/provider/ChreDiscoveryProvider.java
index 392f02d..43eb6aa 100644
--- a/nearby/service/java/com/android/server/nearby/provider/ChreDiscoveryProvider.java
+++ b/nearby/service/java/com/android/server/nearby/provider/ChreDiscoveryProvider.java
@@ -269,12 +269,25 @@
DataElement.DataType.BLE_ADDRESS,
filterResult.getBluetoothAddress().toByteArray()));
}
+ // BlE TX Power appended to Data Element.
+ if (filterResult.hasTxPower()) {
+ presenceDeviceBuilder.addExtendedProperty(
+ new DataElement(
+ DataElement.DataType.TX_POWER,
+ new byte[]{(byte) filterResult.getTxPower()}));
+ }
// BLE Service data appended to Data Elements.
if (filterResult.hasBleServiceData()) {
+ // Retrieves the length of the service data from the first byte,
+ // and then skips the first byte and returns data[1 .. dataLength)
+ // as the DataElement value.
+ int dataLength = Byte.toUnsignedInt(
+ filterResult.getBleServiceData().byteAt(0));
presenceDeviceBuilder.addExtendedProperty(
new DataElement(
DataElement.DataType.BLE_SERVICE_DATA,
- filterResult.getBleServiceData().toByteArray()));
+ filterResult.getBleServiceData()
+ .substring(1, 1 + dataLength).toByteArray()));
}
// Add action
if (filterResult.hasIntent()) {
diff --git a/nearby/tests/unit/src/com/android/server/nearby/provider/ChreDiscoveryProviderTest.java b/nearby/tests/unit/src/com/android/server/nearby/provider/ChreDiscoveryProviderTest.java
index 2b7321c..270de52 100644
--- a/nearby/tests/unit/src/com/android/server/nearby/provider/ChreDiscoveryProviderTest.java
+++ b/nearby/tests/unit/src/com/android/server/nearby/provider/ChreDiscoveryProviderTest.java
@@ -55,6 +55,10 @@
private static final int DATA_TYPE_CONNECTION_STATUS_KEY = 10;
private static final int DATA_TYPE_BATTERY_KEY = 11;
+ private static final int DATA_TYPE_TX_POWER_KEY = 5;
+ private static final int DATA_TYPE_BLUETOOTH_ADDR_KEY = 101;
+ private static final int DATA_TYPE_FP_ACCOUNT_KEY = 9;
+ private static final int DATA_TYPE_BLE_SERVICE_DATA_KEY = 100;
private ChreDiscoveryProvider mChreDiscoveryProvider;
@@ -111,10 +115,23 @@
public void testOnNearbyDeviceDiscoveredWithDataElements() {
final byte [] connectionStatus = new byte[] {1, 2, 3};
final byte [] batteryStatus = new byte[] {4, 5, 6};
+ final byte [] txPower = new byte[] {2};
+ final byte [] bluetoothAddr = new byte[] {1, 2, 3, 4, 5, 6};
+ final byte [] fastPairAccountKey = new byte[16];
+ // First byte is length of service data, padding zeros should be thrown away.
+ final byte [] bleServiceData = new byte[] {5, 1, 2, 3, 4, 5, 0, 0, 0, 0};
+
final List<DataElement> expectedExtendedProperties = new ArrayList<>();
expectedExtendedProperties.add(new DataElement(DATA_TYPE_CONNECTION_STATUS_KEY,
connectionStatus));
expectedExtendedProperties.add(new DataElement(DATA_TYPE_BATTERY_KEY, batteryStatus));
+ expectedExtendedProperties.add(new DataElement(DATA_TYPE_TX_POWER_KEY, txPower));
+ expectedExtendedProperties.add(
+ new DataElement(DATA_TYPE_BLUETOOTH_ADDR_KEY, bluetoothAddr));
+ expectedExtendedProperties.add(
+ new DataElement(DATA_TYPE_FP_ACCOUNT_KEY, fastPairAccountKey));
+ expectedExtendedProperties.add(
+ new DataElement(DATA_TYPE_BLE_SERVICE_DATA_KEY, new byte[] {1, 2, 3, 4, 5}));
Blefilter.PublicCredential credential =
Blefilter.PublicCredential.newBuilder()
@@ -128,6 +145,8 @@
Blefilter.BleFilterResult.newBuilder()
.setTxPower(2)
.setRssi(1)
+ .setBluetoothAddress(ByteString.copyFrom(bluetoothAddr))
+ .setBleServiceData(ByteString.copyFrom(bleServiceData))
.setPublicCredential(credential)
.addDataElement(Blefilter.DataElement.newBuilder()
.setKey(
@@ -143,6 +162,13 @@
.setValue(ByteString.copyFrom(batteryStatus))
.setValueLength(batteryStatus.length)
)
+ .addDataElement(Blefilter.DataElement.newBuilder()
+ .setKey(
+ Blefilter.DataElement.ElementType
+ .DE_FAST_PAIR_ACCOUNT_KEY)
+ .setValue(ByteString.copyFrom(fastPairAccountKey))
+ .setValueLength(fastPairAccountKey.length)
+ )
.build();
Blefilter.BleFilterResults results =
Blefilter.BleFilterResults.newBuilder().addResult(result).build();
@@ -160,7 +186,7 @@
List<DataElement> extendedProperties = PresenceDiscoveryResult
.fromDevice(mNearbyDevice.getValue()).getExtendedProperties();
- assertThat(expectedExtendedProperties.equals(extendedProperties)).isTrue();
+ assertThat(extendedProperties).containsExactlyElementsIn(expectedExtendedProperties);
}
private static class InLineExecutor implements Executor {