Merge "Ensure UWB conforms to API guidelines" am: 0070e26a5e am: a0e1666a74

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1518203

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I561ea72833cbadcae45cff01edf310fee80c6532
This commit is contained in:
Brian Stack
2020-12-16 01:05:55 +00:00
committed by Automerger Merge Worker
10 changed files with 57 additions and 22 deletions

View File

@@ -17,6 +17,7 @@
package android.uwb; package android.uwb;
import android.annotation.FloatRange; import android.annotation.FloatRange;
import android.annotation.NonNull;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
@@ -109,7 +110,7 @@ public final class AngleMeasurement implements Parcelable {
} }
@Override @Override
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeDouble(mRadians); dest.writeDouble(mRadians);
dest.writeDouble(mErrorRadians); dest.writeDouble(mErrorRadians);
dest.writeDouble(mConfidenceLevel); dest.writeDouble(mConfidenceLevel);
@@ -146,6 +147,7 @@ public final class AngleMeasurement implements Parcelable {
* @param radians angle in radians * @param radians angle in radians
* @throws IllegalArgumentException if angle exceeds allowed limits of [-Math.PI, +Math.PI] * @throws IllegalArgumentException if angle exceeds allowed limits of [-Math.PI, +Math.PI]
*/ */
@NonNull
public Builder setRadians(double radians) { public Builder setRadians(double radians) {
if (radians < -Math.PI || radians > Math.PI) { if (radians < -Math.PI || radians > Math.PI) {
throw new IllegalArgumentException("Invalid radians: " + radians); throw new IllegalArgumentException("Invalid radians: " + radians);
@@ -160,6 +162,7 @@ public final class AngleMeasurement implements Parcelable {
* @param errorRadians error of the angle in radians * @param errorRadians error of the angle in radians
* @throws IllegalArgumentException if the error exceeds the allowed limits of [0, +Math.PI] * @throws IllegalArgumentException if the error exceeds the allowed limits of [0, +Math.PI]
*/ */
@NonNull
public Builder setErrorRadians(double errorRadians) { public Builder setErrorRadians(double errorRadians) {
if (errorRadians < 0.0 || errorRadians > Math.PI) { if (errorRadians < 0.0 || errorRadians > Math.PI) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
@@ -175,6 +178,7 @@ public final class AngleMeasurement implements Parcelable {
* @param confidenceLevel level of confidence of the angle measurement * @param confidenceLevel level of confidence of the angle measurement
* @throws IllegalArgumentException if the error exceeds the allowed limits of [0.0, 1.0] * @throws IllegalArgumentException if the error exceeds the allowed limits of [0.0, 1.0]
*/ */
@NonNull
public Builder setConfidenceLevel(double confidenceLevel) { public Builder setConfidenceLevel(double confidenceLevel) {
if (confidenceLevel < 0.0 || confidenceLevel > 1.0) { if (confidenceLevel < 0.0 || confidenceLevel > 1.0) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
@@ -189,6 +193,7 @@ public final class AngleMeasurement implements Parcelable {
* *
* @throws IllegalStateException if angle, error, or confidence values are missing * @throws IllegalStateException if angle, error, or confidence values are missing
*/ */
@NonNull
public AngleMeasurement build() { public AngleMeasurement build() {
if (Double.isNaN(mRadians)) { if (Double.isNaN(mRadians)) {
throw new IllegalStateException("Angle is not set"); throw new IllegalStateException("Angle is not set");

View File

@@ -53,7 +53,7 @@ public final class AngleOfArrivalMeasurement implements Parcelable {
* @return the azimuth {@link AngleMeasurement} * @return the azimuth {@link AngleMeasurement}
*/ */
@NonNull @NonNull
public AngleMeasurement getAzimuth() { public AngleMeasurement getAzimuthAngleMeasurement() {
return mAzimuthAngleMeasurement; return mAzimuthAngleMeasurement;
} }
@@ -70,7 +70,7 @@ public final class AngleOfArrivalMeasurement implements Parcelable {
* @return altitude {@link AngleMeasurement} or null when this is not available * @return altitude {@link AngleMeasurement} or null when this is not available
*/ */
@Nullable @Nullable
public AngleMeasurement getAltitude() { public AngleMeasurement getAltitudeAngleMeasurement() {
return mAltitudeAngleMeasurement; return mAltitudeAngleMeasurement;
} }
@@ -85,8 +85,8 @@ public final class AngleOfArrivalMeasurement implements Parcelable {
if (obj instanceof AngleOfArrivalMeasurement) { if (obj instanceof AngleOfArrivalMeasurement) {
AngleOfArrivalMeasurement other = (AngleOfArrivalMeasurement) obj; AngleOfArrivalMeasurement other = (AngleOfArrivalMeasurement) obj;
return mAzimuthAngleMeasurement.equals(other.getAzimuth()) return mAzimuthAngleMeasurement.equals(other.getAzimuthAngleMeasurement())
&& mAltitudeAngleMeasurement.equals(other.getAltitude()); && mAltitudeAngleMeasurement.equals(other.getAltitudeAngleMeasurement());
} }
return false; return false;
} }
@@ -105,7 +105,7 @@ public final class AngleOfArrivalMeasurement implements Parcelable {
} }
@Override @Override
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeParcelable(mAzimuthAngleMeasurement, flags); dest.writeParcelable(mAzimuthAngleMeasurement, flags);
dest.writeParcelable(mAltitudeAngleMeasurement, flags); dest.writeParcelable(mAltitudeAngleMeasurement, flags);
} }
@@ -143,6 +143,7 @@ public final class AngleOfArrivalMeasurement implements Parcelable {
* *
* @param azimuthAngle azimuth angle * @param azimuthAngle azimuth angle
*/ */
@NonNull
public Builder setAzimuthAngleMeasurement(@NonNull AngleMeasurement azimuthAngle) { public Builder setAzimuthAngleMeasurement(@NonNull AngleMeasurement azimuthAngle) {
mAzimuthAngleMeasurement = azimuthAngle; mAzimuthAngleMeasurement = azimuthAngle;
return this; return this;
@@ -153,6 +154,7 @@ public final class AngleOfArrivalMeasurement implements Parcelable {
* *
* @param altitudeAngle altitude angle * @param altitudeAngle altitude angle
*/ */
@NonNull
public Builder setAltitudeAngleMeasurement(@NonNull AngleMeasurement altitudeAngle) { public Builder setAltitudeAngleMeasurement(@NonNull AngleMeasurement altitudeAngle) {
mAltitudeAngleMeasurement = altitudeAngle; mAltitudeAngleMeasurement = altitudeAngle;
return this; return this;
@@ -163,6 +165,7 @@ public final class AngleOfArrivalMeasurement implements Parcelable {
* *
* @throws IllegalStateException if the required azimuth angle is not provided * @throws IllegalStateException if the required azimuth angle is not provided
*/ */
@NonNull
public AngleOfArrivalMeasurement build() { public AngleOfArrivalMeasurement build() {
if (mAzimuthAngleMeasurement == null) { if (mAzimuthAngleMeasurement == null) {
throw new IllegalStateException("Azimuth angle measurement is not set"); throw new IllegalStateException("Azimuth angle measurement is not set");

View File

@@ -17,6 +17,7 @@
package android.uwb; package android.uwb;
import android.annotation.FloatRange; import android.annotation.FloatRange;
import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
@@ -106,7 +107,7 @@ public final class DistanceMeasurement implements Parcelable {
} }
@Override @Override
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeDouble(mMeters); dest.writeDouble(mMeters);
dest.writeDouble(mErrorMeters); dest.writeDouble(mErrorMeters);
dest.writeDouble(mConfidenceLevel); dest.writeDouble(mConfidenceLevel);
@@ -143,6 +144,7 @@ public final class DistanceMeasurement implements Parcelable {
* @param meters distance in meters * @param meters distance in meters
* @throws IllegalArgumentException if meters is NaN * @throws IllegalArgumentException if meters is NaN
*/ */
@NonNull
public Builder setMeters(double meters) { public Builder setMeters(double meters) {
if (Double.isNaN(meters)) { if (Double.isNaN(meters)) {
throw new IllegalArgumentException("meters cannot be NaN"); throw new IllegalArgumentException("meters cannot be NaN");
@@ -157,6 +159,7 @@ public final class DistanceMeasurement implements Parcelable {
* @param errorMeters distance error in meters * @param errorMeters distance error in meters
* @throws IllegalArgumentException if error is negative or NaN * @throws IllegalArgumentException if error is negative or NaN
*/ */
@NonNull
public Builder setErrorMeters(double errorMeters) { public Builder setErrorMeters(double errorMeters) {
if (Double.isNaN(errorMeters) || errorMeters < 0.0) { if (Double.isNaN(errorMeters) || errorMeters < 0.0) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
@@ -172,6 +175,7 @@ public final class DistanceMeasurement implements Parcelable {
* @param confidenceLevel the confidence level in the distance measurement * @param confidenceLevel the confidence level in the distance measurement
* @throws IllegalArgumentException if confidence level is not in the range of [0.0, 1.0] * @throws IllegalArgumentException if confidence level is not in the range of [0.0, 1.0]
*/ */
@NonNull
public Builder setConfidenceLevel(double confidenceLevel) { public Builder setConfidenceLevel(double confidenceLevel) {
if (confidenceLevel < 0.0 || confidenceLevel > 1.0) { if (confidenceLevel < 0.0 || confidenceLevel > 1.0) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
@@ -186,6 +190,7 @@ public final class DistanceMeasurement implements Parcelable {
* *
* @throws IllegalStateException if meters, error, or confidence are not set * @throws IllegalStateException if meters, error, or confidence are not set
*/ */
@NonNull
public DistanceMeasurement build() { public DistanceMeasurement build() {
if (Double.isNaN(mMeters)) { if (Double.isNaN(mMeters)) {
throw new IllegalStateException("Meters cannot be NaN"); throw new IllegalStateException("Meters cannot be NaN");

View File

@@ -60,6 +60,9 @@ public final class RangingMeasurement implements Parcelable {
return mRemoteDeviceAddress; return mRemoteDeviceAddress;
} }
/**
* @hide
*/
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@IntDef(value = { @IntDef(value = {
RANGING_STATUS_SUCCESS, RANGING_STATUS_SUCCESS,
@@ -115,7 +118,7 @@ public final class RangingMeasurement implements Parcelable {
* {@link #RANGING_STATUS_SUCCESS} * {@link #RANGING_STATUS_SUCCESS}
*/ */
@Nullable @Nullable
public DistanceMeasurement getDistance() { public DistanceMeasurement getDistanceMeasurement() {
return mDistanceMeasurement; return mDistanceMeasurement;
} }
@@ -126,7 +129,7 @@ public final class RangingMeasurement implements Parcelable {
* {@link #RANGING_STATUS_SUCCESS} * {@link #RANGING_STATUS_SUCCESS}
*/ */
@Nullable @Nullable
public AngleOfArrivalMeasurement getAngleOfArrival() { public AngleOfArrivalMeasurement getAngleOfArrivalMeasurement() {
return mAngleOfArrivalMeasurement; return mAngleOfArrivalMeasurement;
} }
@@ -144,8 +147,8 @@ public final class RangingMeasurement implements Parcelable {
return mRemoteDeviceAddress.equals(other.getRemoteDeviceAddress()) return mRemoteDeviceAddress.equals(other.getRemoteDeviceAddress())
&& mStatus == other.getStatus() && mStatus == other.getStatus()
&& mElapsedRealtimeNanos == other.getElapsedRealtimeNanos() && mElapsedRealtimeNanos == other.getElapsedRealtimeNanos()
&& mDistanceMeasurement.equals(other.getDistance()) && mDistanceMeasurement.equals(other.getDistanceMeasurement())
&& mAngleOfArrivalMeasurement.equals(other.getAngleOfArrival()); && mAngleOfArrivalMeasurement.equals(other.getAngleOfArrivalMeasurement());
} }
return false; return false;
} }
@@ -165,7 +168,7 @@ public final class RangingMeasurement implements Parcelable {
} }
@Override @Override
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeParcelable(mRemoteDeviceAddress, flags); dest.writeParcelable(mRemoteDeviceAddress, flags);
dest.writeInt(mStatus); dest.writeInt(mStatus);
dest.writeLong(mElapsedRealtimeNanos); dest.writeLong(mElapsedRealtimeNanos);
@@ -210,6 +213,7 @@ public final class RangingMeasurement implements Parcelable {
* *
* @param remoteDeviceAddress remote device's address * @param remoteDeviceAddress remote device's address
*/ */
@NonNull
public Builder setRemoteDeviceAddress(@NonNull UwbAddress remoteDeviceAddress) { public Builder setRemoteDeviceAddress(@NonNull UwbAddress remoteDeviceAddress) {
mRemoteDeviceAddress = remoteDeviceAddress; mRemoteDeviceAddress = remoteDeviceAddress;
return this; return this;
@@ -220,6 +224,7 @@ public final class RangingMeasurement implements Parcelable {
* *
* @param status the status of the ranging measurement * @param status the status of the ranging measurement
*/ */
@NonNull
public Builder setStatus(@Status int status) { public Builder setStatus(@Status int status) {
mStatus = status; mStatus = status;
return this; return this;
@@ -230,6 +235,7 @@ public final class RangingMeasurement implements Parcelable {
* *
* @param elapsedRealtimeNanos time the ranging measurement occurred * @param elapsedRealtimeNanos time the ranging measurement occurred
*/ */
@NonNull
public Builder setElapsedRealtimeNanos(long elapsedRealtimeNanos) { public Builder setElapsedRealtimeNanos(long elapsedRealtimeNanos) {
if (elapsedRealtimeNanos < 0) { if (elapsedRealtimeNanos < 0) {
throw new IllegalArgumentException("elapsedRealtimeNanos must be >= 0"); throw new IllegalArgumentException("elapsedRealtimeNanos must be >= 0");
@@ -243,6 +249,7 @@ public final class RangingMeasurement implements Parcelable {
* *
* @param distanceMeasurement the distance measurement for this ranging measurement * @param distanceMeasurement the distance measurement for this ranging measurement
*/ */
@NonNull
public Builder setDistanceMeasurement(@NonNull DistanceMeasurement distanceMeasurement) { public Builder setDistanceMeasurement(@NonNull DistanceMeasurement distanceMeasurement) {
mDistanceMeasurement = distanceMeasurement; mDistanceMeasurement = distanceMeasurement;
return this; return this;
@@ -254,6 +261,7 @@ public final class RangingMeasurement implements Parcelable {
* @param angleOfArrivalMeasurement the angle of arrival measurement for this ranging * @param angleOfArrivalMeasurement the angle of arrival measurement for this ranging
* measurement * measurement
*/ */
@NonNull
public Builder setAngleOfArrivalMeasurement( public Builder setAngleOfArrivalMeasurement(
@NonNull AngleOfArrivalMeasurement angleOfArrivalMeasurement) { @NonNull AngleOfArrivalMeasurement angleOfArrivalMeasurement) {
mAngleOfArrivalMeasurement = angleOfArrivalMeasurement; mAngleOfArrivalMeasurement = angleOfArrivalMeasurement;
@@ -268,6 +276,7 @@ public final class RangingMeasurement implements Parcelable {
* elapsedRealtimeNanos of the measurement is invalid, or * elapsedRealtimeNanos of the measurement is invalid, or
* if no remote device address is set * if no remote device address is set
*/ */
@NonNull
public RangingMeasurement build() { public RangingMeasurement build() {
if (mStatus != RANGING_STATUS_SUCCESS) { if (mStatus != RANGING_STATUS_SUCCESS) {
if (mDistanceMeasurement != null) { if (mDistanceMeasurement != null) {

View File

@@ -83,7 +83,7 @@ public final class RangingReport implements Parcelable {
} }
@Override @Override
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeTypedList(mRangingMeasurements); dest.writeTypedList(mRangingMeasurements);
} }
@@ -113,6 +113,7 @@ public final class RangingReport implements Parcelable {
* *
* @param rangingMeasurement a ranging measurement * @param rangingMeasurement a ranging measurement
*/ */
@NonNull
public Builder addMeasurement(@NonNull RangingMeasurement rangingMeasurement) { public Builder addMeasurement(@NonNull RangingMeasurement rangingMeasurement) {
mMeasurements.add(rangingMeasurement); mMeasurements.add(rangingMeasurement);
return this; return this;
@@ -123,6 +124,7 @@ public final class RangingReport implements Parcelable {
* *
* @param rangingMeasurements {@link List} of {@link RangingMeasurement}s to add * @param rangingMeasurements {@link List} of {@link RangingMeasurement}s to add
*/ */
@NonNull
public Builder addMeasurements(@NonNull List<RangingMeasurement> rangingMeasurements) { public Builder addMeasurements(@NonNull List<RangingMeasurement> rangingMeasurements) {
mMeasurements.addAll(rangingMeasurements); mMeasurements.addAll(rangingMeasurements);
return this; return this;
@@ -133,6 +135,7 @@ public final class RangingReport implements Parcelable {
* *
* @throws IllegalStateException if measurements are not in monotonically increasing order * @throws IllegalStateException if measurements are not in monotonically increasing order
*/ */
@NonNull
public RangingReport build() { public RangingReport build() {
// Verify that all measurement timestamps are monotonically increasing // Verify that all measurement timestamps are monotonically increasing
RangingMeasurement prevMeasurement = null; RangingMeasurement prevMeasurement = null;

View File

@@ -17,6 +17,7 @@
package android.uwb; package android.uwb;
import android.annotation.IntDef; import android.annotation.IntDef;
import android.annotation.NonNull;
import android.os.PersistableBundle; import android.os.PersistableBundle;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
@@ -50,8 +51,11 @@ public final class RangingSession implements AutoCloseable {
* @param session the newly opened {@link RangingSession} * @param session the newly opened {@link RangingSession}
* @param sessionInfo session specific parameters from lower layers * @param sessionInfo session specific parameters from lower layers
*/ */
void onOpenSuccess(RangingSession session, PersistableBundle sessionInfo); void onOpenSuccess(@NonNull RangingSession session, @NonNull PersistableBundle sessionInfo);
/**
* @hide
*/
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@IntDef(value = { @IntDef(value = {
CLOSE_REASON_UNKNOWN, CLOSE_REASON_UNKNOWN,
@@ -125,7 +129,7 @@ public final class RangingSession implements AutoCloseable {
* *
* @param rangingReport ranging report for this interval's measurements * @param rangingReport ranging report for this interval's measurements
*/ */
void onReportReceived(RangingReport rangingReport); void onReportReceived(@NonNull RangingReport rangingReport);
} }
/** /**

View File

@@ -51,7 +51,7 @@ public final class UwbAddress implements Parcelable {
* {@link #SHORT_ADDRESS_BYTE_LENGTH} or {@link #EXTENDED_ADDRESS_BYTE_LENGTH} bytes * {@link #SHORT_ADDRESS_BYTE_LENGTH} or {@link #EXTENDED_ADDRESS_BYTE_LENGTH} bytes
*/ */
@NonNull @NonNull
public static UwbAddress fromBytes(@NonNull byte[] address) throws IllegalArgumentException { public static UwbAddress fromBytes(@NonNull byte[] address) {
if (address.length != SHORT_ADDRESS_BYTE_LENGTH if (address.length != SHORT_ADDRESS_BYTE_LENGTH
&& address.length != EXTENDED_ADDRESS_BYTE_LENGTH) { && address.length != EXTENDED_ADDRESS_BYTE_LENGTH) {
throw new IllegalArgumentException("Invalid UwbAddress length " + address.length); throw new IllegalArgumentException("Invalid UwbAddress length " + address.length);
@@ -107,7 +107,7 @@ public final class UwbAddress implements Parcelable {
} }
@Override @Override
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeInt(mAddressBytes.length); dest.writeInt(mAddressBytes.length);
dest.writeByteArray(mAddressBytes); dest.writeByteArray(mAddressBytes);
} }

View File

@@ -55,6 +55,9 @@ public final class UwbManager {
* Interface for receiving UWB adapter state changes * Interface for receiving UWB adapter state changes
*/ */
public interface AdapterStateCallback { public interface AdapterStateCallback {
/**
* @hide
*/
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@IntDef(value = { @IntDef(value = {
STATE_CHANGED_REASON_SESSION_STARTED, STATE_CHANGED_REASON_SESSION_STARTED,
@@ -195,6 +198,9 @@ public final class UwbManager {
} }
} }
/**
* @hide
*/
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@IntDef(value = { @IntDef(value = {
ANGLE_OF_ARRIVAL_SUPPORT_TYPE_NONE, ANGLE_OF_ARRIVAL_SUPPORT_TYPE_NONE,
@@ -387,7 +393,7 @@ public final class UwbManager {
*/ */
@NonNull @NonNull
public AutoCloseable openRangingSession(@NonNull PersistableBundle parameters, public AutoCloseable openRangingSession(@NonNull PersistableBundle parameters,
@NonNull Executor executor, @NonNull @CallbackExecutor Executor executor,
@NonNull RangingSession.Callback callbacks) { @NonNull RangingSession.Callback callbacks) {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }

View File

@@ -48,8 +48,8 @@ public class AngleOfArrivalMeasurementTest {
builder.setAzimuthAngleMeasurement(azimuth); builder.setAzimuthAngleMeasurement(azimuth);
AngleOfArrivalMeasurement measurement = tryBuild(builder, true); AngleOfArrivalMeasurement measurement = tryBuild(builder, true);
assertEquals(azimuth, measurement.getAzimuth()); assertEquals(azimuth, measurement.getAzimuthAngleMeasurement());
assertEquals(altitude, measurement.getAltitude()); assertEquals(altitude, measurement.getAltitudeAngleMeasurement());
} }
private AngleMeasurement getAngleMeasurement(double radian, double error, double confidence) { private AngleMeasurement getAngleMeasurement(double radian, double error, double confidence) {

View File

@@ -63,8 +63,8 @@ public class RangingMeasurementTest {
assertEquals(status, measurement.getStatus()); assertEquals(status, measurement.getStatus());
assertEquals(address, measurement.getRemoteDeviceAddress()); assertEquals(address, measurement.getRemoteDeviceAddress());
assertEquals(time, measurement.getElapsedRealtimeNanos()); assertEquals(time, measurement.getElapsedRealtimeNanos());
assertEquals(angleMeasurement, measurement.getAngleOfArrival()); assertEquals(angleMeasurement, measurement.getAngleOfArrivalMeasurement());
assertEquals(distanceMeasurement, measurement.getDistance()); assertEquals(distanceMeasurement, measurement.getDistanceMeasurement());
} }
private RangingMeasurement tryBuild(RangingMeasurement.Builder builder, private RangingMeasurement tryBuild(RangingMeasurement.Builder builder,