Add hasFullTracking for backward compatibility
Also add plumbing for isFullTracking in JNI Bug: 257549183 Test: atest GnssMeasurementRegistrationTest Change-Id: I2d41b7aaaceb225c29cf282a2733ab9dfdd9d6c0
This commit is contained in:
@@ -19872,8 +19872,9 @@ package android.location {
|
||||
method public int describeContents();
|
||||
method @NonNull public android.location.GnssClock getClock();
|
||||
method @NonNull public java.util.Collection<android.location.GnssAutomaticGainControl> getGnssAutomaticGainControls();
|
||||
method public boolean getIsFullTracking();
|
||||
method @NonNull public java.util.Collection<android.location.GnssMeasurement> getMeasurements();
|
||||
method public boolean hasFullTracking();
|
||||
method public boolean isFullTracking();
|
||||
method public void writeToParcel(android.os.Parcel, int);
|
||||
field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssMeasurementsEvent> CREATOR;
|
||||
}
|
||||
@@ -19882,9 +19883,10 @@ package android.location {
|
||||
ctor public GnssMeasurementsEvent.Builder();
|
||||
ctor public GnssMeasurementsEvent.Builder(@NonNull android.location.GnssMeasurementsEvent);
|
||||
method @NonNull public android.location.GnssMeasurementsEvent build();
|
||||
method @NonNull public android.location.GnssMeasurementsEvent.Builder clearFullTracking();
|
||||
method @NonNull public android.location.GnssMeasurementsEvent.Builder setClock(@NonNull android.location.GnssClock);
|
||||
method @NonNull public android.location.GnssMeasurementsEvent.Builder setFullTracking(boolean);
|
||||
method @NonNull public android.location.GnssMeasurementsEvent.Builder setGnssAutomaticGainControls(@NonNull java.util.Collection<android.location.GnssAutomaticGainControl>);
|
||||
method @NonNull public android.location.GnssMeasurementsEvent.Builder setIsFullTracking(boolean);
|
||||
method @NonNull public android.location.GnssMeasurementsEvent.Builder setMeasurements(@NonNull java.util.Collection<android.location.GnssMeasurement>);
|
||||
}
|
||||
|
||||
|
||||
@@ -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<GnssMeasurement> mMeasurements;
|
||||
private final List<GnssAutomaticGainControl> 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<GnssMeasurement> measurements,
|
||||
@NonNull List<GnssAutomaticGainControl> 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.
|
||||
*
|
||||
* <p>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<GnssMeasurementsEvent> CREATOR =
|
||||
new Creator<GnssMeasurementsEvent>() {
|
||||
@Override
|
||||
public GnssMeasurementsEvent createFromParcel(Parcel in) {
|
||||
int flag = in.readInt();
|
||||
GnssClock clock = in.readParcelable(getClass().getClassLoader(),
|
||||
android.location.GnssClock.class);
|
||||
List<GnssMeasurement> measurements = in.createTypedArrayList(GnssMeasurement.CREATOR);
|
||||
List<GnssAutomaticGainControl> 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<GnssMeasurement> mMeasurements;
|
||||
private List<GnssAutomaticGainControl> 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<GnssMeasurement>) event.getMeasurements();
|
||||
mGnssAgcs = (List<GnssAutomaticGainControl>) 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,6 +58,7 @@ jmethodID method_gnssAgcBuilderSetCarrierFrequencyHz;
|
||||
jmethodID method_gnssAgcBuilderBuild;
|
||||
jmethodID method_gnssMeasurementsEventBuilderCtor;
|
||||
jmethodID method_gnssMeasurementsEventBuilderSetClock;
|
||||
jmethodID method_gnssMeasurementsEventBuilderSetFullTracking;
|
||||
jmethodID method_gnssMeasurementsEventBuilderSetMeasurements;
|
||||
jmethodID method_gnssMeasurementsEventBuilderSetGnssAutomaticGainControls;
|
||||
jmethodID method_gnssMeasurementsEventBuilderBuild;
|
||||
@@ -109,6 +110,10 @@ void GnssMeasurement_class_init_once(JNIEnv* env, jclass& clazz) {
|
||||
env->GetMethodID(class_gnssMeasurementsEventBuilder, "setGnssAutomaticGainControls",
|
||||
"([Landroid/location/GnssAutomaticGainControl;)"
|
||||
"Landroid/location/GnssMeasurementsEvent$Builder;");
|
||||
method_gnssMeasurementsEventBuilderSetFullTracking =
|
||||
env->GetMethodID(class_gnssMeasurementsEventBuilder, "setFullTracking",
|
||||
"(Z)"
|
||||
"Landroid/location/GnssMeasurementsEvent$Builder;");
|
||||
method_gnssMeasurementsEventBuilderBuild =
|
||||
env->GetMethodID(class_gnssMeasurementsEventBuilder, "build",
|
||||
"()Landroid/location/GnssMeasurementsEvent;");
|
||||
@@ -228,7 +233,8 @@ void GnssMeasurement_class_init_once(JNIEnv* env, jclass& clazz) {
|
||||
}
|
||||
|
||||
void setMeasurementData(JNIEnv* env, jobject& callbacksObj, jobject clock,
|
||||
jobjectArray measurementArray, jobjectArray gnssAgcArray) {
|
||||
jobjectArray measurementArray, jobjectArray gnssAgcArray,
|
||||
bool hasFullTracking, jboolean isFullTracking) {
|
||||
jobject gnssMeasurementsEventBuilderObject =
|
||||
env->NewObject(class_gnssMeasurementsEventBuilder,
|
||||
method_gnssMeasurementsEventBuilderCtor);
|
||||
@@ -240,6 +246,11 @@ void setMeasurementData(JNIEnv* env, jobject& callbacksObj, jobject clock,
|
||||
callObjectMethodIgnoringResult(env, gnssMeasurementsEventBuilderObject,
|
||||
method_gnssMeasurementsEventBuilderSetGnssAutomaticGainControls,
|
||||
gnssAgcArray);
|
||||
if (hasFullTracking) {
|
||||
callObjectMethodIgnoringResult(env, gnssMeasurementsEventBuilderObject,
|
||||
method_gnssMeasurementsEventBuilderSetFullTracking,
|
||||
isFullTracking);
|
||||
}
|
||||
jobject gnssMeasurementsEventObject =
|
||||
env->CallObjectMethod(gnssMeasurementsEventBuilderObject,
|
||||
method_gnssMeasurementsEventBuilderBuild);
|
||||
@@ -381,7 +392,14 @@ void GnssMeasurementCallbackAidl::translateAndSetGnssData(const GnssData& data)
|
||||
|
||||
jobjectArray gnssAgcArray = nullptr;
|
||||
gnssAgcArray = translateAllGnssAgcs(env, data.gnssAgcs);
|
||||
setMeasurementData(env, mCallbacksObj, clock, measurementArray, gnssAgcArray);
|
||||
if (this->getInterfaceVersion() >= 3) {
|
||||
setMeasurementData(env, mCallbacksObj, clock, measurementArray, gnssAgcArray,
|
||||
/*hasFullTracking=*/true, data.isFullTracking);
|
||||
} else {
|
||||
setMeasurementData(env, mCallbacksObj, clock, measurementArray, gnssAgcArray,
|
||||
/*hasFullTracking=*/false,
|
||||
/*isFullTracking=*/JNI_FALSE);
|
||||
}
|
||||
|
||||
env->DeleteLocalRef(clock);
|
||||
env->DeleteLocalRef(measurementArray);
|
||||
|
||||
@@ -48,7 +48,8 @@ extern jmethodID method_reportMeasurementData;
|
||||
void GnssMeasurement_class_init_once(JNIEnv* env, jclass& clazz);
|
||||
|
||||
void setMeasurementData(JNIEnv* env, jobject& callbacksObj, jobject clock,
|
||||
jobjectArray measurementArray, jobjectArray gnssAgcArray);
|
||||
jobjectArray measurementArray, jobjectArray gnssAgcArray,
|
||||
bool hasFullTracking, jboolean isFullTracking);
|
||||
|
||||
class GnssMeasurementCallbackAidl : public hardware::gnss::BnGnssMeasurementCallback {
|
||||
public:
|
||||
@@ -140,7 +141,9 @@ void GnssMeasurementCallbackHidl::translateAndSetGnssData(const T& data) {
|
||||
size_t count = getMeasurementCount(data);
|
||||
jobjectArray measurementArray =
|
||||
translateAllGnssMeasurements(env, data.measurements.data(), count);
|
||||
setMeasurementData(env, mCallbacksObj, clock, measurementArray, nullptr);
|
||||
setMeasurementData(env, mCallbacksObj, clock, measurementArray, /*gnssAgcArray=*/nullptr,
|
||||
/*hasFullTracking=*/false,
|
||||
/*isFullTracking=*/JNI_FALSE);
|
||||
|
||||
env->DeleteLocalRef(clock);
|
||||
env->DeleteLocalRef(measurementArray);
|
||||
|
||||
Reference in New Issue
Block a user