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:
Brian Stack
2021-03-12 22:16:27 +00:00
committed by Automerger Merge Worker
4 changed files with 36 additions and 133 deletions

View File

@@ -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 {

View File

@@ -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);
}
}
} }

View File

@@ -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);
} }

View File

@@ -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++) {