Refactor code for building ranging report.
- Take out common code for building ranging report for TwoWay and OwR
measurements in helper methods.
- Add tests for the case where AngleOfArrivalMeasurement cannot be
computed as the required field aoaAzimuth is not present.
Test: atest
BugId: 246678053
Change-Id: Ia47243a721496ab4e83dd6ae44ed639b7dc5c311
diff --git a/framework/java/android/uwb/RangingReport.java b/framework/java/android/uwb/RangingReport.java
index dc899e2..4bce4b4 100644
--- a/framework/java/android/uwb/RangingReport.java
+++ b/framework/java/android/uwb/RangingReport.java
@@ -80,7 +80,7 @@
if (obj instanceof RangingReport) {
RangingReport other = (RangingReport) obj;
return mRangingMeasurements.equals(other.getMeasurements());
- // TODO: Equality for RangingReportMetadata
+ // TODO(b/256734264): Equality for RangingReportMetadata
}
return false;
}
diff --git a/service/java/com/android/server/uwb/UwbSessionNotificationManager.java b/service/java/com/android/server/uwb/UwbSessionNotificationManager.java
index 2f8fe19..d7bf201 100644
--- a/service/java/com/android/server/uwb/UwbSessionNotificationManager.java
+++ b/service/java/com/android/server/uwb/UwbSessionNotificationManager.java
@@ -388,6 +388,7 @@
boolean isDestAoaAzimuthEnabled = false;
boolean isDestAoaElevationEnabled = false;
long sessionId = 0;
+
// For FIRA sessions, check if AOA is enabled for the session or not.
if (protocolName.equals(FiraParams.PROTOCOL_NAME)) {
FiraOpenSessionParams openSessionParams = (FiraOpenSessionParams) sessionParams;
@@ -423,164 +424,140 @@
}
}
- // TODO(b/246678053): Refactor this code, try to take out the common code into a method.
+ // TODO(b/256734264): The unit tests are currently not checking for this field, as
+ // RangingReport.equals() does not compare it.
+ PersistableBundle rangingReportMetadata = new RangingReportMetadata.Builder()
+ .setSessionId(sessionId)
+ .setRawNtfData(rangingData.getRawNtfData())
+ .build()
+ .toBundle();
+ RangingReport.Builder rangingReportBuilder = new RangingReport.Builder()
+ .addRangingReportMetadata(rangingReportMetadata);
+
if (rangingData.getRangingMeasuresType()
== UwbUciConstants.RANGING_MEASUREMENT_TYPE_TWO_WAY) {
List<RangingMeasurement> rangingMeasurements = new ArrayList<>();
UwbTwoWayMeasurement[] uwbTwoWayMeasurement = rangingData.getRangingTwoWayMeasures();
for (int i = 0; i < rangingData.getNoOfRangingMeasures(); ++i) {
- UwbAddress macAddress = UwbAddress.fromBytes(TlvUtil.getReverseBytes(
- uwbTwoWayMeasurement[i].getMacAddress()));
int rangingStatus = uwbTwoWayMeasurement[i].getRangingStatus();
- DistanceMeasurement distanceMeasurement = null;
- AngleOfArrivalMeasurement angleOfArrivalMeasurement = null;
- AngleOfArrivalMeasurement destinationAngleOfArrivalMeasurement = null;
- int los = uwbTwoWayMeasurement[i].mNLoS;
- int rssi = uwbTwoWayMeasurement[i].getRssi();
- if (rangingStatus == FiraParams.STATUS_CODE_OK) {
- // Distance measurement is mandatory
- distanceMeasurement = new DistanceMeasurement.Builder()
- .setMeters(uwbTwoWayMeasurement[i].getDistance() / (double) 100)
- .setErrorMeters(0)
- // TODO: Need to fetch distance FOM once it is added to UCI spec.
- .setConfidenceLevel(0)
- .build();
- // Aoa measurement is optional based on configuration.
- if (isAoaAzimuthEnabled || isAoaElevationEnabled) {
- AngleMeasurement azimuthAngleMeasurement = null;
- AngleMeasurement altitudeAngleMeasurement = null;
- if (isAoaAzimuthEnabled) {
- azimuthAngleMeasurement = new AngleMeasurement(
- UwbUtil.degreeToRadian(uwbTwoWayMeasurement[i].getAoaAzimuth()),
- 0, uwbTwoWayMeasurement[i].getAoaAzimuthFom() / (double) 100);
- }
- if (isAoaElevationEnabled) {
- altitudeAngleMeasurement = new AngleMeasurement(
- UwbUtil.degreeToRadian(
- uwbTwoWayMeasurement[i].getAoaElevation()),
- 0, uwbTwoWayMeasurement[i].getAoaElevationFom() / (double) 100);
- }
- // AngleOfArrivalMeasurement
- angleOfArrivalMeasurement = new AngleOfArrivalMeasurement.Builder(
- azimuthAngleMeasurement)
- .setAltitude(altitudeAngleMeasurement)
- .build();
- }
- if (isDestAoaAzimuthEnabled || isDestAoaElevationEnabled) {
- AngleMeasurement destinationAzimuthAngleMeasurement = null;
- AngleMeasurement destinationAltitudeAngleMeasurement = null;
- if (isDestAoaAzimuthEnabled) {
- destinationAzimuthAngleMeasurement = new AngleMeasurement(
- UwbUtil.degreeToRadian(
- uwbTwoWayMeasurement[i].getAoaDestAzimuth()),
- 0,
- uwbTwoWayMeasurement[i].getAoaDestAzimuthFom() / (double) 100);
- }
- if (isDestAoaElevationEnabled) {
- destinationAltitudeAngleMeasurement = new AngleMeasurement(
- UwbUtil.degreeToRadian(
- uwbTwoWayMeasurement[i].getAoaDestElevation()),
- 0,
- uwbTwoWayMeasurement[i].getAoaDestElevationFom()
- / (double) 100);
- }
- // Dest AngleOfArrivalMeasurement
- destinationAngleOfArrivalMeasurement =
- new AngleOfArrivalMeasurement.Builder(
- destinationAzimuthAngleMeasurement)
- .setAltitude(destinationAltitudeAngleMeasurement)
- .build();
- }
- }
- RangingMeasurement.Builder rangingMeasurementBuilder =
- new RangingMeasurement.Builder()
- .setRemoteDeviceAddress(macAddress)
- .setStatus(rangingStatus)
- .setElapsedRealtimeNanos(elapsedRealtimeNanos)
- .setDistanceMeasurement(distanceMeasurement)
- .setAngleOfArrivalMeasurement(angleOfArrivalMeasurement)
- .setDestinationAngleOfArrivalMeasurement(
- destinationAngleOfArrivalMeasurement)
- .setLineOfSight(los);
+ RangingMeasurement.Builder rangingMeasurementBuilder = buildRangingMeasurement(
+ uwbTwoWayMeasurement[i].getMacAddress(), rangingStatus,
+ elapsedRealtimeNanos, uwbTwoWayMeasurement[i].getNLoS());
+ int rssi = uwbTwoWayMeasurement[i].getRssi();
if (rssi < 0) {
rangingMeasurementBuilder.setRssiDbm(rssi);
}
+
+ if (rangingStatus == FiraParams.STATUS_CODE_OK) {
+ // Distance measurement is mandatory
+ rangingMeasurementBuilder.setDistanceMeasurement(
+ buildDistanceMeasurement(uwbTwoWayMeasurement[i].getDistance()));
+
+ // Aoa measurement is optional based on configuration.
+ AngleOfArrivalMeasurement angleOfArrivalMeasurement =
+ computeAngleOfArrivalMeasurement(
+ isAoaAzimuthEnabled, isAoaElevationEnabled,
+ uwbTwoWayMeasurement[i].getAoaAzimuth(),
+ uwbTwoWayMeasurement[i].getAoaAzimuthFom(),
+ uwbTwoWayMeasurement[i].getAoaElevation(),
+ uwbTwoWayMeasurement[i].getAoaElevationFom());
+ if (angleOfArrivalMeasurement != null) {
+ rangingMeasurementBuilder.setAngleOfArrivalMeasurement(
+ angleOfArrivalMeasurement);
+ }
+
+ // Dest AngleOfArrivalMeasurement
+ AngleOfArrivalMeasurement destinationAngleOfArrivalMeasurement =
+ computeAngleOfArrivalMeasurement(
+ isDestAoaAzimuthEnabled, isDestAoaElevationEnabled,
+ uwbTwoWayMeasurement[i].getAoaDestAzimuth(),
+ uwbTwoWayMeasurement[i].getAoaDestAzimuthFom(),
+ uwbTwoWayMeasurement[i].getAoaDestElevation(),
+ uwbTwoWayMeasurement[i].getAoaDestElevationFom());
+ if (destinationAngleOfArrivalMeasurement != null) {
+ rangingMeasurementBuilder.setDestinationAngleOfArrivalMeasurement(
+ destinationAngleOfArrivalMeasurement);
+ }
+ }
+
// TODO: No ranging measurement metadata defined, added for future usage
PersistableBundle rangingMeasurementMetadata = new PersistableBundle();
rangingMeasurementBuilder.setRangingMeasurementMetadata(rangingMeasurementMetadata);
+
rangingMeasurements.add(rangingMeasurementBuilder.build());
}
- PersistableBundle rangingReportMetadata = new RangingReportMetadata.Builder()
- .setSessionId(sessionId)
- .setRawNtfData(rangingData.getRawNtfData())
- .build()
- .toBundle();
-
- if (rangingMeasurements.size() == 1) {
- return new RangingReport.Builder()
- .addMeasurement(rangingMeasurements.get(0))
- .addRangingReportMetadata(rangingReportMetadata)
- .build();
- } else {
- return new RangingReport.Builder()
- .addMeasurements(rangingMeasurements)
- .addRangingReportMetadata(rangingReportMetadata)
- .build();
- }
+ rangingReportBuilder.addMeasurements(rangingMeasurements);
} else if (rangingData.getRangingMeasuresType()
== UwbUciConstants.RANGING_MEASUREMENT_TYPE_OWR_AOA) {
- RangingMeasurement rangingMeasurement = null;
UwbOwrAoaMeasurement uwbOwrAoaMeasurement = rangingData.getRangingOwrAoaMeasure();
- UwbAddress macAddress = UwbAddress.fromBytes(TlvUtil.getReverseBytes(
- uwbOwrAoaMeasurement.getMacAddress()));
int rangingStatus = uwbOwrAoaMeasurement.getRangingStatus();
- AngleOfArrivalMeasurement angleOfArrivalMeasurement = null;
- int los = uwbOwrAoaMeasurement.getNLoS();
+ RangingMeasurement.Builder rangingMeasurementBuilder = buildRangingMeasurement(
+ uwbOwrAoaMeasurement.getMacAddress(), rangingStatus, elapsedRealtimeNanos,
+ uwbOwrAoaMeasurement.getNLoS());
if (rangingStatus == FiraParams.STATUS_CODE_OK) {
- if (isAoaAzimuthEnabled || isAoaElevationEnabled) {
- AngleMeasurement azimuthAngleMeasurement = null;
- AngleMeasurement altitudeAngleMeasurement = null;
- if (isAoaAzimuthEnabled) {
- azimuthAngleMeasurement = new AngleMeasurement(
- UwbUtil.degreeToRadian(uwbOwrAoaMeasurement.getAoaAzimuth()),
- 0, uwbOwrAoaMeasurement.getAoaAzimuthFom() / (double) 100);
- }
- if (isAoaElevationEnabled) {
- altitudeAngleMeasurement = new AngleMeasurement(
- UwbUtil.degreeToRadian(uwbOwrAoaMeasurement.getAoaElevation()),
- 0, uwbOwrAoaMeasurement.getAoaElevationFom() / (double) 100);
- }
- // AngleOfArrivalMeasurement
- angleOfArrivalMeasurement = new AngleOfArrivalMeasurement.Builder(
- azimuthAngleMeasurement)
- .setAltitude(altitudeAngleMeasurement)
- .build();
+ // AngleOfArrivalMeasurement
+ AngleOfArrivalMeasurement angleOfArrivalMeasurement =
+ computeAngleOfArrivalMeasurement(
+ isAoaAzimuthEnabled, isAoaElevationEnabled,
+ uwbOwrAoaMeasurement.getAoaAzimuth(),
+ uwbOwrAoaMeasurement.getAoaAzimuthFom(),
+ uwbOwrAoaMeasurement.getAoaElevation(),
+ uwbOwrAoaMeasurement.getAoaElevationFom());
+ if (angleOfArrivalMeasurement != null) {
+ rangingMeasurementBuilder.setAngleOfArrivalMeasurement(
+ angleOfArrivalMeasurement);
}
}
- rangingMeasurement = new RangingMeasurement.Builder()
- .setRemoteDeviceAddress(macAddress)
- .setStatus(rangingStatus)
- .setElapsedRealtimeNanos(elapsedRealtimeNanos)
- .setAngleOfArrivalMeasurement(angleOfArrivalMeasurement)
- .setLineOfSight(los)
- .build();
- // TODO(b/246678053): Add rawNtfData[] for the OWR AoA Measurements.
- PersistableBundle rangingReportMetadata = new RangingReportMetadata.Builder()
- .setSessionId(sessionId)
- .build()
- .toBundle();
+ rangingReportBuilder.addMeasurement(rangingMeasurementBuilder.build());
+ }
+ return rangingReportBuilder.build();
+ }
- return new RangingReport.Builder()
- .addMeasurement(rangingMeasurement)
- .addRangingReportMetadata(rangingReportMetadata)
- .build();
+ private static AngleOfArrivalMeasurement computeAngleOfArrivalMeasurement(
+ boolean isAoaAzimuthEnabled, boolean isAoaElevationEnabled, float aoaAzimuth,
+ int aoaAzimuthFom, float aoaElevation, int aoaElevationFom) {
+ // Azimuth is required field (and elevation is an optional field), to build the
+ // AngleOfArrivalMeasurement.
+ if (isAoaAzimuthEnabled) {
+ AngleMeasurement azimuthAngleMeasurement = new AngleMeasurement(
+ UwbUtil.degreeToRadian(aoaAzimuth), 0, aoaAzimuthFom / (double) 100);
+ // AngleOfArrivalMeasurement
+ AngleOfArrivalMeasurement.Builder angleOfArrivalMeasurementBuilder =
+ new AngleOfArrivalMeasurement.Builder(azimuthAngleMeasurement);
+
+ // Elevation is optional field, to build the AngleOfArrivalMeasurement.
+ if (isAoaElevationEnabled) {
+ AngleMeasurement altitudeAngleMeasurement = new AngleMeasurement(
+ UwbUtil.degreeToRadian(aoaElevation), 0, aoaElevationFom / (double) 100);
+ angleOfArrivalMeasurementBuilder.setAltitude(altitudeAngleMeasurement);
+ }
+
+ return angleOfArrivalMeasurementBuilder.build();
}
return null;
}
+
+ private static RangingMeasurement.Builder buildRangingMeasurement(
+ byte[] macAddress, int rangingStatus, long elapsedRealtimeNanos, int los) {
+ return new RangingMeasurement.Builder()
+ .setRemoteDeviceAddress(UwbAddress.fromBytes(TlvUtil.getReverseBytes(macAddress)))
+ .setStatus(rangingStatus)
+ .setElapsedRealtimeNanos(elapsedRealtimeNanos)
+ .setLineOfSight(los);
+ }
+
+ private static DistanceMeasurement buildDistanceMeasurement(int distance) {
+ return new DistanceMeasurement.Builder()
+ .setMeters(distance / (double) 100)
+ .setErrorMeters(0)
+ // TODO: Need to fetch distance FOM once it is added to UCI spec.
+ .setConfidenceLevel(0)
+ .build();
+ }
}
diff --git a/service/java/com/android/server/uwb/UwbTestUtils.java b/service/java/com/android/server/uwb/UwbTestUtils.java
index e969595..83ad2ba 100644
--- a/service/java/com/android/server/uwb/UwbTestUtils.java
+++ b/service/java/com/android/server/uwb/UwbTestUtils.java
@@ -138,40 +138,43 @@
if (isAoaAzimuthEnabled || isAoaElevationEnabled) {
AngleMeasurement aoaAzimuth = null;
AngleMeasurement aoaElevation = null;
+ AngleOfArrivalMeasurement.Builder aoaBuilder = null;
+
if (isAoaAzimuthEnabled) {
- aoaAzimuth =
- new AngleMeasurement(
- degreeToRadian(TEST_AOA_AZIMUTH), 0,
- TEST_AOA_AZIMUTH_FOM / (double) 100);
+ aoaAzimuth = new AngleMeasurement(
+ degreeToRadian(TEST_AOA_AZIMUTH), 0,
+ TEST_AOA_AZIMUTH_FOM / (double) 100);
+ aoaBuilder = new AngleOfArrivalMeasurement.Builder(aoaAzimuth);
}
- if (isAoaElevationEnabled) {
- aoaElevation =
- new AngleMeasurement(
- degreeToRadian(TEST_AOA_ELEVATION), 0,
- TEST_AOA_ELEVATION_FOM / (double) 100);
+ if (isAoaElevationEnabled && aoaBuilder != null) {
+ aoaElevation = new AngleMeasurement(
+ degreeToRadian(TEST_AOA_ELEVATION), 0,
+ TEST_AOA_ELEVATION_FOM / (double) 100);
+ aoaBuilder.setAltitude(aoaElevation);
}
- aoaMeasurement = new AngleOfArrivalMeasurement.Builder(aoaAzimuth)
- .setAltitude(aoaElevation)
- .build();
+
+ aoaMeasurement = (aoaBuilder != null) ? aoaBuilder.build() : null;
}
if (isDestAoaAzimuthEnabled || isDestAoaElevationEnabled) {
AngleMeasurement aoaDestAzimuth = null;
AngleMeasurement aoaDestElevation = null;
+ AngleOfArrivalMeasurement.Builder aoaBuilder = null;
+
if (isDestAoaAzimuthEnabled) {
aoaDestAzimuth =
new AngleMeasurement(
degreeToRadian(TEST_AOA_DEST_AZIMUTH), 0,
TEST_AOA_DEST_AZIMUTH_FOM / (double) 100);
+ aoaBuilder = new AngleOfArrivalMeasurement.Builder(aoaDestAzimuth);
}
- if (isDestAoaElevationEnabled) {
+ if (isDestAoaElevationEnabled && aoaBuilder != null) {
aoaDestElevation =
new AngleMeasurement(
degreeToRadian(TEST_AOA_DEST_ELEVATION), 0,
TEST_AOA_DEST_ELEVATION_FOM / (double) 100);
+ aoaBuilder.setAltitude(aoaDestElevation);
}
- aoaDestMeasurement = new AngleOfArrivalMeasurement.Builder(aoaDestAzimuth)
- .setAltitude(aoaDestElevation)
- .build();
+ aoaDestMeasurement = (aoaBuilder != null) ? aoaBuilder.build() : null;
}
RangingReport rangingReport = buildRangingReport(macAddress, rangingMeasurementType,
diff --git a/service/tests/src/com/android/server/uwb/UwbSessionNotificationManagerTest.java b/service/tests/src/com/android/server/uwb/UwbSessionNotificationManagerTest.java
index f10fa32..7cfce4d 100644
--- a/service/tests/src/com/android/server/uwb/UwbSessionNotificationManagerTest.java
+++ b/service/tests/src/com/android/server/uwb/UwbSessionNotificationManagerTest.java
@@ -146,9 +146,6 @@
mSessionHandle, testRangingDataAndRangingReport.second);
}
- // TODO(b/246678053): Confirm tests are checking case when one of Azimuth/Elevation is null, as
- // code sends null while the AngleOfArrivalMeasurement builder takes only non-null as input.
-
@Test
public void testOnRangingResult_forTwoWay_WithNoAoaElevation() throws Exception {
when(mFiraParams.getAoaResultRequest()).thenReturn(
@@ -195,6 +192,91 @@
}
@Test
+ public void testOnRangingResult_forTwoWay_WithAoaAndNoDestAzimuth() throws Exception {
+ when(mFiraParams.getAoaResultRequest()).thenReturn(
+ FiraParams.AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS);
+ when(mFiraParams.hasResultReportPhase()).thenReturn(true);
+ when(mFiraParams.hasAngleOfArrivalAzimuthReport()).thenReturn(false);
+ when(mFiraParams.hasAngleOfArrivalElevationReport()).thenReturn(true);
+ Pair<UwbRangingData, RangingReport> testRangingDataAndRangingReport =
+ UwbTestUtils.generateRangingDataAndRangingReport(
+ PEER_SHORT_MAC_ADDRESS, RANGING_MEASUREMENT_TYPE_TWO_WAY,
+ true, true, false, true, TEST_ELAPSED_NANOS);
+ mUwbSessionNotificationManager.onRangingResult(
+ mUwbSession, testRangingDataAndRangingReport.first);
+ verify(mIUwbRangingCallbacks).onRangingResult(
+ mSessionHandle, testRangingDataAndRangingReport.second);
+ }
+
+ @Test
+ public void testOnRangingResult_forTwoWay_WithAoaAndNoDestElevation() throws Exception {
+ when(mFiraParams.getAoaResultRequest()).thenReturn(
+ FiraParams.AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS);
+ when(mFiraParams.hasResultReportPhase()).thenReturn(true);
+ when(mFiraParams.hasAngleOfArrivalAzimuthReport()).thenReturn(true);
+ when(mFiraParams.hasAngleOfArrivalElevationReport()).thenReturn(false);
+ Pair<UwbRangingData, RangingReport> testRangingDataAndRangingReport =
+ UwbTestUtils.generateRangingDataAndRangingReport(
+ PEER_SHORT_MAC_ADDRESS, RANGING_MEASUREMENT_TYPE_TWO_WAY,
+ true, true, true, false, TEST_ELAPSED_NANOS);
+ mUwbSessionNotificationManager.onRangingResult(
+ mUwbSession, testRangingDataAndRangingReport.first);
+ verify(mIUwbRangingCallbacks).onRangingResult(
+ mSessionHandle, testRangingDataAndRangingReport.second);
+ }
+
+ @Test
+ public void testOnRangingResult_forTwoWay_WithNoAoaAndDestAoa() throws Exception {
+ when(mFiraParams.getAoaResultRequest()).thenReturn(
+ FiraParams.AOA_RESULT_REQUEST_MODE_NO_AOA_REPORT);
+ when(mFiraParams.hasResultReportPhase()).thenReturn(true);
+ when(mFiraParams.hasAngleOfArrivalAzimuthReport()).thenReturn(true);
+ when(mFiraParams.hasAngleOfArrivalElevationReport()).thenReturn(true);
+ Pair<UwbRangingData, RangingReport> testRangingDataAndRangingReport =
+ UwbTestUtils.generateRangingDataAndRangingReport(
+ PEER_SHORT_MAC_ADDRESS, RANGING_MEASUREMENT_TYPE_TWO_WAY,
+ false, false, true, true, TEST_ELAPSED_NANOS);
+ mUwbSessionNotificationManager.onRangingResult(
+ mUwbSession, testRangingDataAndRangingReport.first);
+ verify(mIUwbRangingCallbacks).onRangingResult(
+ mSessionHandle, testRangingDataAndRangingReport.second);
+ }
+
+ @Test
+ public void testOnRangingResult_forTwoWay_WithNoAoaAzimuthAndDestAoa() throws Exception {
+ when(mFiraParams.getAoaResultRequest()).thenReturn(
+ FiraParams.AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_ELEVATION_ONLY);
+ when(mFiraParams.hasResultReportPhase()).thenReturn(true);
+ when(mFiraParams.hasAngleOfArrivalAzimuthReport()).thenReturn(true);
+ when(mFiraParams.hasAngleOfArrivalElevationReport()).thenReturn(true);
+ Pair<UwbRangingData, RangingReport> testRangingDataAndRangingReport =
+ UwbTestUtils.generateRangingDataAndRangingReport(
+ PEER_SHORT_MAC_ADDRESS, RANGING_MEASUREMENT_TYPE_TWO_WAY,
+ false, true, true, true, TEST_ELAPSED_NANOS);
+ mUwbSessionNotificationManager.onRangingResult(
+ mUwbSession, testRangingDataAndRangingReport.first);
+ verify(mIUwbRangingCallbacks).onRangingResult(
+ mSessionHandle, testRangingDataAndRangingReport.second);
+ }
+
+ @Test
+ public void testOnRangingResult_forTwoWay_WithNoAoaElevationAndDestAoa() throws Exception {
+ when(mFiraParams.getAoaResultRequest()).thenReturn(
+ FiraParams.AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_AZIMUTH_ONLY);
+ when(mFiraParams.hasResultReportPhase()).thenReturn(true);
+ when(mFiraParams.hasAngleOfArrivalAzimuthReport()).thenReturn(true);
+ when(mFiraParams.hasAngleOfArrivalElevationReport()).thenReturn(true);
+ Pair<UwbRangingData, RangingReport> testRangingDataAndRangingReport =
+ UwbTestUtils.generateRangingDataAndRangingReport(
+ PEER_SHORT_MAC_ADDRESS, RANGING_MEASUREMENT_TYPE_TWO_WAY,
+ true, false, true, true, TEST_ELAPSED_NANOS);
+ mUwbSessionNotificationManager.onRangingResult(
+ mUwbSession, testRangingDataAndRangingReport.first);
+ verify(mIUwbRangingCallbacks).onRangingResult(
+ mSessionHandle, testRangingDataAndRangingReport.second);
+ }
+
+ @Test
public void testOnRangingResult_forOwrAoa() throws Exception {
Pair<UwbRangingData, RangingReport> testRangingDataAndRangingReport =
UwbTestUtils.generateRangingDataAndRangingReport(