Address UWB API feedback am: 78bce9af5b
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1600815 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: Ib002fee72141f14ac56285152abe758978d1abf0
This commit is contained in:
@@ -12300,6 +12300,7 @@ package android.util {
|
|||||||
package android.uwb {
|
package android.uwb {
|
||||||
|
|
||||||
public final class AngleMeasurement implements android.os.Parcelable {
|
public final class AngleMeasurement implements android.os.Parcelable {
|
||||||
|
ctor public AngleMeasurement(double, double, double);
|
||||||
method public int describeContents();
|
method public int describeContents();
|
||||||
method @FloatRange(from=0.0, to=1.0) public double getConfidenceLevel();
|
method @FloatRange(from=0.0, to=1.0) public double getConfidenceLevel();
|
||||||
method @FloatRange(from=0.0, to=3.141592653589793) public double getErrorRadians();
|
method @FloatRange(from=0.0, to=3.141592653589793) public double getErrorRadians();
|
||||||
@@ -12308,14 +12309,6 @@ package android.uwb {
|
|||||||
field @NonNull public static final android.os.Parcelable.Creator<android.uwb.AngleMeasurement> CREATOR;
|
field @NonNull public static final android.os.Parcelable.Creator<android.uwb.AngleMeasurement> CREATOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class AngleMeasurement.Builder {
|
|
||||||
ctor public AngleMeasurement.Builder();
|
|
||||||
method @NonNull public android.uwb.AngleMeasurement build();
|
|
||||||
method @NonNull public android.uwb.AngleMeasurement.Builder setConfidenceLevel(double);
|
|
||||||
method @NonNull public android.uwb.AngleMeasurement.Builder setErrorRadians(double);
|
|
||||||
method @NonNull public android.uwb.AngleMeasurement.Builder setRadians(double);
|
|
||||||
}
|
|
||||||
|
|
||||||
public final class AngleOfArrivalMeasurement implements android.os.Parcelable {
|
public final class AngleOfArrivalMeasurement implements android.os.Parcelable {
|
||||||
method public int describeContents();
|
method public int describeContents();
|
||||||
method @Nullable public android.uwb.AngleMeasurement getAltitude();
|
method @Nullable public android.uwb.AngleMeasurement getAltitude();
|
||||||
@@ -12325,10 +12318,9 @@ package android.uwb {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static final class AngleOfArrivalMeasurement.Builder {
|
public static final class AngleOfArrivalMeasurement.Builder {
|
||||||
ctor public AngleOfArrivalMeasurement.Builder();
|
ctor public AngleOfArrivalMeasurement.Builder(@NonNull android.uwb.AngleMeasurement);
|
||||||
method @NonNull public android.uwb.AngleOfArrivalMeasurement build();
|
method @NonNull public android.uwb.AngleOfArrivalMeasurement build();
|
||||||
method @NonNull public android.uwb.AngleOfArrivalMeasurement.Builder setAltitude(@NonNull android.uwb.AngleMeasurement);
|
method @NonNull public android.uwb.AngleOfArrivalMeasurement.Builder setAltitude(@NonNull android.uwb.AngleMeasurement);
|
||||||
method @NonNull public android.uwb.AngleOfArrivalMeasurement.Builder setAzimuth(@NonNull android.uwb.AngleMeasurement);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class DistanceMeasurement implements android.os.Parcelable {
|
public final class DistanceMeasurement implements android.os.Parcelable {
|
||||||
|
|||||||
@@ -38,9 +38,30 @@ public final class AngleMeasurement implements Parcelable {
|
|||||||
private final double mErrorRadians;
|
private final double mErrorRadians;
|
||||||
private final double mConfidenceLevel;
|
private final double mConfidenceLevel;
|
||||||
|
|
||||||
private AngleMeasurement(double radians, double errorRadians, double confidenceLevel) {
|
/**
|
||||||
|
* Constructs a new {@link AngleMeasurement} object
|
||||||
|
*
|
||||||
|
* @param radians the angle in radians
|
||||||
|
* @param errorRadians the error of the angle measurement in radians
|
||||||
|
* @param confidenceLevel confidence level of the angle measurement
|
||||||
|
*
|
||||||
|
* @throws IllegalArgumentException if the radians, errorRadians, or confidenceLevel is out of
|
||||||
|
* allowed range
|
||||||
|
*/
|
||||||
|
public AngleMeasurement(double radians, double errorRadians, double confidenceLevel) {
|
||||||
|
if (radians < -Math.PI || radians > Math.PI) {
|
||||||
|
throw new IllegalArgumentException("Invalid radians: " + radians);
|
||||||
|
}
|
||||||
mRadians = radians;
|
mRadians = radians;
|
||||||
|
|
||||||
|
if (errorRadians < 0.0 || errorRadians > Math.PI) {
|
||||||
|
throw new IllegalArgumentException("Invalid error radians: " + errorRadians);
|
||||||
|
}
|
||||||
mErrorRadians = errorRadians;
|
mErrorRadians = errorRadians;
|
||||||
|
|
||||||
|
if (confidenceLevel < 0.0 || confidenceLevel > 1.0) {
|
||||||
|
throw new IllegalArgumentException("Invalid confidence level: " + confidenceLevel);
|
||||||
|
}
|
||||||
mConfidenceLevel = confidenceLevel;
|
mConfidenceLevel = confidenceLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,11 +143,7 @@ public final class AngleMeasurement implements Parcelable {
|
|||||||
new Creator<AngleMeasurement>() {
|
new Creator<AngleMeasurement>() {
|
||||||
@Override
|
@Override
|
||||||
public AngleMeasurement createFromParcel(Parcel in) {
|
public AngleMeasurement createFromParcel(Parcel in) {
|
||||||
Builder builder = new Builder();
|
return new AngleMeasurement(in.readDouble(), in.readDouble(), in.readDouble());
|
||||||
builder.setRadians(in.readDouble());
|
|
||||||
builder.setErrorRadians(in.readDouble());
|
|
||||||
builder.setConfidenceLevel(in.readDouble());
|
|
||||||
return builder.build();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -134,82 +151,4 @@ public final class AngleMeasurement implements Parcelable {
|
|||||||
return new AngleMeasurement[size];
|
return new AngleMeasurement[size];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Builder class for {@link AngleMeasurement}.
|
|
||||||
*/
|
|
||||||
public static final class Builder {
|
|
||||||
private double mRadians = Double.NaN;
|
|
||||||
private double mErrorRadians = Double.NaN;
|
|
||||||
private double mConfidenceLevel = Double.NaN;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the angle in radians
|
|
||||||
*
|
|
||||||
* @param radians angle in radians
|
|
||||||
* @throws IllegalArgumentException if angle exceeds allowed limits of [-Math.PI, +Math.PI]
|
|
||||||
*/
|
|
||||||
@NonNull
|
|
||||||
public Builder setRadians(double radians) {
|
|
||||||
if (radians < -Math.PI || radians > Math.PI) {
|
|
||||||
throw new IllegalArgumentException("Invalid radians: " + radians);
|
|
||||||
}
|
|
||||||
mRadians = radians;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the angle error in radians
|
|
||||||
*
|
|
||||||
* @param errorRadians error of the angle in radians
|
|
||||||
* @throws IllegalArgumentException if the error exceeds the allowed limits of [0, +Math.PI]
|
|
||||||
*/
|
|
||||||
@NonNull
|
|
||||||
public Builder setErrorRadians(double errorRadians) {
|
|
||||||
if (errorRadians < 0.0 || errorRadians > Math.PI) {
|
|
||||||
throw new IllegalArgumentException(
|
|
||||||
"Invalid error radians: " + errorRadians);
|
|
||||||
}
|
|
||||||
mErrorRadians = errorRadians;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the angle confidence level
|
|
||||||
*
|
|
||||||
* @param confidenceLevel level of confidence of the angle measurement
|
|
||||||
* @throws IllegalArgumentException if the error exceeds the allowed limits of [0.0, 1.0]
|
|
||||||
*/
|
|
||||||
@NonNull
|
|
||||||
public Builder setConfidenceLevel(double confidenceLevel) {
|
|
||||||
if (confidenceLevel < 0.0 || confidenceLevel > 1.0) {
|
|
||||||
throw new IllegalArgumentException(
|
|
||||||
"Invalid confidence level: " + confidenceLevel);
|
|
||||||
}
|
|
||||||
mConfidenceLevel = confidenceLevel;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build the {@link AngleMeasurement} object
|
|
||||||
*
|
|
||||||
* @throws IllegalStateException if angle, error, or confidence values are missing
|
|
||||||
*/
|
|
||||||
@NonNull
|
|
||||||
public AngleMeasurement build() {
|
|
||||||
if (Double.isNaN(mRadians)) {
|
|
||||||
throw new IllegalStateException("Angle is not set");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Double.isNaN(mErrorRadians)) {
|
|
||||||
throw new IllegalStateException("Angle error is not set");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Double.isNaN(mConfidenceLevel)) {
|
|
||||||
throw new IllegalStateException("Angle confidence level is not set");
|
|
||||||
}
|
|
||||||
|
|
||||||
return new AngleMeasurement(mRadians, mErrorRadians, mConfidenceLevel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -116,9 +116,8 @@ public final class AngleOfArrivalMeasurement implements Parcelable {
|
|||||||
new Creator<AngleOfArrivalMeasurement>() {
|
new Creator<AngleOfArrivalMeasurement>() {
|
||||||
@Override
|
@Override
|
||||||
public AngleOfArrivalMeasurement createFromParcel(Parcel in) {
|
public AngleOfArrivalMeasurement createFromParcel(Parcel in) {
|
||||||
Builder builder = new Builder();
|
Builder builder =
|
||||||
|
new Builder(in.readParcelable(AngleMeasurement.class.getClassLoader()));
|
||||||
builder.setAzimuth(in.readParcelable(AngleMeasurement.class.getClassLoader()));
|
|
||||||
|
|
||||||
builder.setAltitude(in.readParcelable(AngleMeasurement.class.getClassLoader()));
|
builder.setAltitude(in.readParcelable(AngleMeasurement.class.getClassLoader()));
|
||||||
|
|
||||||
@@ -135,18 +134,16 @@ public final class AngleOfArrivalMeasurement implements Parcelable {
|
|||||||
* Builder class for {@link AngleOfArrivalMeasurement}.
|
* Builder class for {@link AngleOfArrivalMeasurement}.
|
||||||
*/
|
*/
|
||||||
public static final class Builder {
|
public static final class Builder {
|
||||||
private AngleMeasurement mAzimuthAngleMeasurement = null;
|
private final AngleMeasurement mAzimuthAngleMeasurement;
|
||||||
private AngleMeasurement mAltitudeAngleMeasurement = null;
|
private AngleMeasurement mAltitudeAngleMeasurement = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the azimuth angle
|
* Constructs an {@link AngleOfArrivalMeasurement} object
|
||||||
*
|
*
|
||||||
* @param azimuthAngle azimuth angle
|
* @param azimuthAngle the azimuth angle of the measurement
|
||||||
*/
|
*/
|
||||||
@NonNull
|
public Builder(@NonNull AngleMeasurement azimuthAngle) {
|
||||||
public Builder setAzimuth(@NonNull AngleMeasurement azimuthAngle) {
|
|
||||||
mAzimuthAngleMeasurement = azimuthAngle;
|
mAzimuthAngleMeasurement = azimuthAngle;
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -162,15 +159,9 @@ public final class AngleOfArrivalMeasurement implements Parcelable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Build the {@link AngleOfArrivalMeasurement} object
|
* Build the {@link AngleOfArrivalMeasurement} object
|
||||||
*
|
|
||||||
* @throws IllegalStateException if the required azimuth angle is not provided
|
|
||||||
*/
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public AngleOfArrivalMeasurement build() {
|
public AngleOfArrivalMeasurement build() {
|
||||||
if (mAzimuthAngleMeasurement == null) {
|
|
||||||
throw new IllegalStateException("Azimuth angle measurement is not set");
|
|
||||||
}
|
|
||||||
|
|
||||||
return new AngleOfArrivalMeasurement(mAzimuthAngleMeasurement,
|
return new AngleOfArrivalMeasurement(mAzimuthAngleMeasurement,
|
||||||
mAltitudeAngleMeasurement);
|
mAltitudeAngleMeasurement);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,34 +16,23 @@
|
|||||||
|
|
||||||
package android.uwb;
|
package android.uwb;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.pm.PackageManager;
|
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
public class UwbTestUtils {
|
public class UwbTestUtils {
|
||||||
private UwbTestUtils() {}
|
private UwbTestUtils() {}
|
||||||
|
|
||||||
public static boolean isUwbSupported(Context context) {
|
|
||||||
PackageManager packageManager = context.getPackageManager();
|
|
||||||
return packageManager.hasSystemFeature(PackageManager.FEATURE_UWB);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static AngleMeasurement getAngleMeasurement() {
|
public static AngleMeasurement getAngleMeasurement() {
|
||||||
return new AngleMeasurement.Builder()
|
return new AngleMeasurement(
|
||||||
.setRadians(getDoubleInRange(-Math.PI, Math.PI))
|
getDoubleInRange(-Math.PI, Math.PI),
|
||||||
.setErrorRadians(getDoubleInRange(0, Math.PI))
|
getDoubleInRange(0, Math.PI),
|
||||||
.setConfidenceLevel(getDoubleInRange(0, 1))
|
getDoubleInRange(0, 1));
|
||||||
.build();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AngleOfArrivalMeasurement getAngleOfArrivalMeasurement() {
|
public static AngleOfArrivalMeasurement getAngleOfArrivalMeasurement() {
|
||||||
return new AngleOfArrivalMeasurement.Builder()
|
return new AngleOfArrivalMeasurement.Builder(getAngleMeasurement())
|
||||||
.setAltitude(getAngleMeasurement())
|
.setAltitude(getAngleMeasurement())
|
||||||
.setAzimuth(getAngleMeasurement())
|
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,14 +58,6 @@ public class UwbTestUtils {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<RangingMeasurement> getRangingMeasurements(int num) {
|
|
||||||
List<RangingMeasurement> result = new ArrayList<>();
|
|
||||||
for (int i = 0; i < num; i++) {
|
|
||||||
result.add(getRangingMeasurement());
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RangingReport getRangingReports(int numMeasurements) {
|
public static RangingReport getRangingReports(int numMeasurements) {
|
||||||
RangingReport.Builder builder = new RangingReport.Builder();
|
RangingReport.Builder builder = new RangingReport.Builder();
|
||||||
for (int i = 0; i < numMeasurements; i++) {
|
for (int i = 0; i < numMeasurements; i++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user