diff --git a/core/api/current.txt b/core/api/current.txt index 98d3a91c99446..c1d4a99813a96 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -20245,6 +20245,7 @@ package android.location { public final class GnssMeasurementRequest implements android.os.Parcelable { method public int describeContents(); + method @IntRange(from=0) public int getIntervalMillis(); method public boolean isFullTracking(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator CREATOR; @@ -20255,6 +20256,7 @@ package android.location { ctor public GnssMeasurementRequest.Builder(@NonNull android.location.GnssMeasurementRequest); method @NonNull public android.location.GnssMeasurementRequest build(); method @NonNull public android.location.GnssMeasurementRequest.Builder setFullTracking(boolean); + method @NonNull public android.location.GnssMeasurementRequest.Builder setIntervalMillis(@IntRange(from=0) int); } public final class GnssMeasurementsEvent implements android.os.Parcelable { diff --git a/location/java/android/location/GnssMeasurementRequest.java b/location/java/android/location/GnssMeasurementRequest.java index f509252e7542e..71cb0e32a706c 100644 --- a/location/java/android/location/GnssMeasurementRequest.java +++ b/location/java/android/location/GnssMeasurementRequest.java @@ -16,10 +16,14 @@ package android.location; +import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; +import android.util.TimeUtils; + +import com.android.internal.util.Preconditions; import java.util.Objects; @@ -29,13 +33,16 @@ import java.util.Objects; public final class GnssMeasurementRequest implements Parcelable { private final boolean mCorrelationVectorOutputsEnabled; private final boolean mFullTracking; + private final int mIntervalMillis; /** * Creates a {@link GnssMeasurementRequest} with a full list of parameters. */ - private GnssMeasurementRequest(boolean fullTracking, boolean correlationVectorOutputsEnabled) { + private GnssMeasurementRequest(boolean fullTracking, boolean correlationVectorOutputsEnabled, + int intervalMillis) { mFullTracking = fullTracking; mCorrelationVectorOutputsEnabled = correlationVectorOutputsEnabled; + mIntervalMillis = intervalMillis; } /** @@ -68,13 +75,26 @@ public final class GnssMeasurementRequest implements Parcelable { return mFullTracking; } + /** + * Represents the requested time interval between the reported measurements in milliseconds. + * + *

If the time interval is not set, the default value is 0, which means the fastest rate the + * GNSS chipset can report. + * + *

The GNSS chipset may report measurements with a rate faster than requested. + */ + public @IntRange(from = 0) int getIntervalMillis() { + return mIntervalMillis; + } + @NonNull public static final Creator CREATOR = new Creator() { @Override @NonNull public GnssMeasurementRequest createFromParcel(@NonNull Parcel parcel) { - return new GnssMeasurementRequest(parcel.readBoolean(), parcel.readBoolean()); + return new GnssMeasurementRequest(parcel.readBoolean(), parcel.readBoolean(), + parcel.readInt()); } @Override @@ -87,6 +107,7 @@ public final class GnssMeasurementRequest implements Parcelable { public void writeToParcel(@NonNull Parcel parcel, int flags) { parcel.writeBoolean(mFullTracking); parcel.writeBoolean(mCorrelationVectorOutputsEnabled); + parcel.writeInt(mIntervalMillis); } @NonNull @@ -94,11 +115,13 @@ public final class GnssMeasurementRequest implements Parcelable { public String toString() { StringBuilder s = new StringBuilder(); s.append("GnssMeasurementRequest["); + s.append("@"); + TimeUtils.formatDuration(mIntervalMillis, s); if (mFullTracking) { - s.append("FullTracking"); + s.append(", FullTracking"); } if (mCorrelationVectorOutputsEnabled) { - s.append(", CorrelationVectorOutPuts"); + s.append(", CorrelationVectorOutputs"); } s.append(']'); return s.toString(); @@ -115,12 +138,15 @@ public final class GnssMeasurementRequest implements Parcelable { if (mCorrelationVectorOutputsEnabled != other.mCorrelationVectorOutputsEnabled) { return false; } + if (mIntervalMillis != other.mIntervalMillis) { + return false; + } return true; } @Override public int hashCode() { - return Objects.hash(mFullTracking, mCorrelationVectorOutputsEnabled); + return Objects.hash(mFullTracking, mCorrelationVectorOutputsEnabled, mIntervalMillis); } @Override @@ -132,6 +158,7 @@ public final class GnssMeasurementRequest implements Parcelable { public static final class Builder { private boolean mCorrelationVectorOutputsEnabled; private boolean mFullTracking; + private int mIntervalMillis; /** * Constructs a {@link Builder} instance. @@ -145,6 +172,7 @@ public final class GnssMeasurementRequest implements Parcelable { public Builder(@NonNull GnssMeasurementRequest request) { mCorrelationVectorOutputsEnabled = request.isCorrelationVectorOutputsEnabled(); mFullTracking = request.isFullTracking(); + mIntervalMillis = request.getIntervalMillis(); } /** @@ -183,10 +211,25 @@ public final class GnssMeasurementRequest implements Parcelable { return this; } + /** + * Set the time interval between the reported measurements in milliseconds, which is 0 by + * default. + * + *

An interval of 0 milliseconds means the fastest rate the chipset can report. + * + *

The GNSS chipset may report measurements with a rate faster than requested. + */ + @NonNull public Builder setIntervalMillis(@IntRange(from = 0) int value) { + mIntervalMillis = Preconditions.checkArgumentInRange(value, 0, Integer.MAX_VALUE, + "intervalMillis"); + return this; + } + /** Builds a {@link GnssMeasurementRequest} instance as specified by this builder. */ @NonNull public GnssMeasurementRequest build() { - return new GnssMeasurementRequest(mFullTracking, mCorrelationVectorOutputsEnabled); + return new GnssMeasurementRequest(mFullTracking, mCorrelationVectorOutputsEnabled, + mIntervalMillis); } } }