From dcb79a624f2ca07b70928bed9a0cdb9256492746 Mon Sep 17 00:00:00 2001 From: Yu-Han Yang Date: Tue, 22 Nov 2022 18:58:23 +0000 Subject: Add hasFullTracking for backward compatibility Also add plumbing for isFullTracking in JNI Bug: 257549183 Test: atest GnssMeasurementRegistrationTest Change-Id: I2d41b7aaaceb225c29cf282a2733ab9dfdd9d6c0 --- .../android/location/GnssMeasurementsEvent.java | 45 ++++++++++++++++++---- 1 file changed, 38 insertions(+), 7 deletions(-) (limited to 'location/java') diff --git a/location/java/android/location/GnssMeasurementsEvent.java b/location/java/android/location/GnssMeasurementsEvent.java index a8b0dc235b43..8b96974f4d2e 100644 --- a/location/java/android/location/GnssMeasurementsEvent.java +++ b/location/java/android/location/GnssMeasurementsEvent.java @@ -37,11 +37,14 @@ import java.util.List; * Events are delivered to registered instances of {@link Callback}. */ public final class GnssMeasurementsEvent implements Parcelable { + private final int mFlag; private final GnssClock mClock; private final List mMeasurements; private final List mGnssAgcs; private final boolean mIsFullTracking; + private static final int HAS_FULL_TRACKING = 1; + /** * Used for receiving GNSS satellite measurements from the GNSS engine. * Each measurement contains raw and computed data identifying a satellite. @@ -123,10 +126,12 @@ public final class GnssMeasurementsEvent implements Parcelable { /** * Create a {@link GnssMeasurementsEvent} instance with a full list of parameters. */ - private GnssMeasurementsEvent(@NonNull GnssClock clock, + private GnssMeasurementsEvent(int flag, + @NonNull GnssClock clock, @NonNull List measurements, @NonNull List agcs, boolean isFullTracking) { + mFlag = flag; mMeasurements = measurements; mGnssAgcs = agcs; mClock = clock; @@ -168,22 +173,32 @@ public final class GnssMeasurementsEvent implements Parcelable { * * False indicates that the GNSS chipset may optimize power via duty cycling, constellations and * frequency limits, etc. + * + *

The value is only available if {@link #hasFullTracking()} is {@code true}. */ - public boolean getIsFullTracking() { + public boolean isFullTracking() { return mIsFullTracking; } + /** + * Return {@code true} if {@link #isFullTracking()} is available, {@code false} otherwise. + */ + public boolean hasFullTracking() { + return (mFlag & HAS_FULL_TRACKING) == HAS_FULL_TRACKING; + } + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public GnssMeasurementsEvent createFromParcel(Parcel in) { + int flag = in.readInt(); GnssClock clock = in.readParcelable(getClass().getClassLoader(), android.location.GnssClock.class); List measurements = in.createTypedArrayList(GnssMeasurement.CREATOR); List agcs = in.createTypedArrayList( GnssAutomaticGainControl.CREATOR); boolean isFullTracking = in.readBoolean(); - return new GnssMeasurementsEvent(clock, measurements, agcs, isFullTracking); + return new GnssMeasurementsEvent(flag, clock, measurements, agcs, isFullTracking); } @Override @@ -199,6 +214,7 @@ public final class GnssMeasurementsEvent implements Parcelable { @Override public void writeToParcel(Parcel parcel, int flags) { + parcel.writeInt(mFlag); parcel.writeParcelable(mClock, flags); parcel.writeTypedList(mMeasurements); parcel.writeTypedList(mGnssAgcs); @@ -211,13 +227,16 @@ public final class GnssMeasurementsEvent implements Parcelable { builder.append(mClock); builder.append(' ').append(mMeasurements.toString()); builder.append(' ').append(mGnssAgcs.toString()); - builder.append(" isFullTracking=").append(mIsFullTracking); + if (hasFullTracking()) { + builder.append(" isFullTracking=").append(mIsFullTracking); + } builder.append("]"); return builder.toString(); } /** Builder for {@link GnssMeasurementsEvent} */ public static final class Builder { + private int mFlag; private GnssClock mClock; private List mMeasurements; private List mGnssAgcs; @@ -237,10 +256,11 @@ public final class GnssMeasurementsEvent implements Parcelable { * {@link GnssMeasurementsEvent}. */ public Builder(@NonNull GnssMeasurementsEvent event) { + mFlag = event.mFlag; mClock = event.getClock(); mMeasurements = (List) event.getMeasurements(); mGnssAgcs = (List) event.getGnssAutomaticGainControls(); - mIsFullTracking = event.getIsFullTracking(); + mIsFullTracking = event.isFullTracking(); } /** @@ -313,15 +333,26 @@ public final class GnssMeasurementsEvent implements Parcelable { * and frequency limits, etc. */ @NonNull - public Builder setIsFullTracking(boolean isFullTracking) { + public Builder setFullTracking(boolean isFullTracking) { + mFlag |= HAS_FULL_TRACKING; mIsFullTracking = isFullTracking; return this; } + /** + * Clears the full tracking mode indicator. + */ + @NonNull + public Builder clearFullTracking() { + mFlag &= ~HAS_FULL_TRACKING; + return this; + } + /** Builds a {@link GnssMeasurementsEvent} instance as specified by this builder. */ @NonNull public GnssMeasurementsEvent build() { - return new GnssMeasurementsEvent(mClock, mMeasurements, mGnssAgcs, mIsFullTracking); + return new GnssMeasurementsEvent(mFlag, mClock, mMeasurements, mGnssAgcs, + mIsFullTracking); } } } -- cgit v1.2.3-59-g8ed1b