Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5b131bef authored by Yu-Han Yang's avatar Yu-Han Yang Committed by Android (Google) Code Review
Browse files

Merge "Add hasFullTracking for backward compatibility"

parents 25e14cdf dcb79a62
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -19993,8 +19993,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;
  }
@@ -20003,9 +20004,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>);
  }
+38 −7
Original line number Diff line number Diff line
@@ -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());
        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);
        }
    }
}
+20 −2
Original line number Diff line number Diff line
@@ -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);
+5 −2
Original line number Diff line number Diff line
@@ -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);