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

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

Merge "Add isAccumulatedDeltaRangeCapabilityKnown for backward compatibility (frameworks/base)"

parents aa7d3f23 17d08b8f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -20181,6 +20181,7 @@ package android.location {
    method public boolean hasSatellitePvt();
    method public boolean hasScheduling();
    method public boolean hasSingleShotFix();
    method public boolean isAccumulatedDeltaRangeCapabilityKnown();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssCapabilities> CREATOR;
  }
@@ -20189,6 +20190,7 @@ package android.location {
    ctor public GnssCapabilities.Builder();
    ctor public GnssCapabilities.Builder(@NonNull android.location.GnssCapabilities);
    method @NonNull public android.location.GnssCapabilities build();
    method @NonNull public android.location.GnssCapabilities.Builder clearIsAccumulatedDeltaRangeCapabilityKnown();
    method @NonNull public android.location.GnssCapabilities.Builder setGnssSignalTypes(@NonNull java.util.List<android.location.GnssSignalType>);
    method @NonNull public android.location.GnssCapabilities.Builder setHasAccumulatedDeltaRange(boolean);
    method @NonNull public android.location.GnssCapabilities.Builder setHasAntennaInfo(boolean);
+54 −16
Original line number Diff line number Diff line
@@ -129,21 +129,26 @@ public final class GnssCapabilities implements Parcelable {
     * @hide
     */
    public static GnssCapabilities empty() {
        return new GnssCapabilities(0, 0, 0, Collections.emptyList());
        return new GnssCapabilities(/*topFlags=*/ 0, /*isAdrCapabilityKnown=*/ false,
                /*measurementCorrectionsFlags=*/ 0, /*powerFlags=*/ 0, /*gnssSignalTypes=*/
                Collections.emptyList());
    }

    private final @TopHalCapabilityFlags int mTopFlags;
    private final boolean mIsAdrCapabilityKnown;
    private final @SubHalMeasurementCorrectionsCapabilityFlags int mMeasurementCorrectionsFlags;
    private final @SubHalPowerCapabilityFlags int mPowerFlags;
    private final @NonNull List<GnssSignalType> mGnssSignalTypes;

    private GnssCapabilities(
            @TopHalCapabilityFlags int topFlags,
            boolean isAdrCapabilityKnown,
            @SubHalMeasurementCorrectionsCapabilityFlags int measurementCorrectionsFlags,
            @SubHalPowerCapabilityFlags int powerFlags,
            @NonNull List<GnssSignalType> gnssSignalTypes) {
        Objects.requireNonNull(gnssSignalTypes);
        mTopFlags = topFlags;
        mIsAdrCapabilityKnown = isAdrCapabilityKnown;
        mMeasurementCorrectionsFlags = measurementCorrectionsFlags;
        mPowerFlags = powerFlags;
        mGnssSignalTypes = Collections.unmodifiableList(gnssSignalTypes);
@@ -154,12 +159,13 @@ public final class GnssCapabilities implements Parcelable {
     *
     * @hide
     */
    public GnssCapabilities withTopHalFlags(@TopHalCapabilityFlags int flags) {
        if (mTopFlags == flags) {
    public GnssCapabilities withTopHalFlags(@TopHalCapabilityFlags int flags,
            boolean isAdrCapabilityKnown) {
        if (mTopFlags == flags && mIsAdrCapabilityKnown == isAdrCapabilityKnown) {
            return this;
        } else {
            return new GnssCapabilities(flags, mMeasurementCorrectionsFlags, mPowerFlags,
                    mGnssSignalTypes);
            return new GnssCapabilities(flags, isAdrCapabilityKnown,
                    mMeasurementCorrectionsFlags, mPowerFlags, mGnssSignalTypes);
        }
    }

@@ -174,7 +180,7 @@ public final class GnssCapabilities implements Parcelable {
        if (mMeasurementCorrectionsFlags == flags) {
            return this;
        } else {
            return new GnssCapabilities(mTopFlags, flags, mPowerFlags,
            return new GnssCapabilities(mTopFlags, mIsAdrCapabilityKnown, flags, mPowerFlags,
                    mGnssSignalTypes);
        }
    }
@@ -189,8 +195,8 @@ public final class GnssCapabilities implements Parcelable {
        if (mPowerFlags == flags) {
            return this;
        } else {
            return new GnssCapabilities(mTopFlags, mMeasurementCorrectionsFlags, flags,
                    mGnssSignalTypes);
            return new GnssCapabilities(mTopFlags, mIsAdrCapabilityKnown,
                    mMeasurementCorrectionsFlags, flags, mGnssSignalTypes);
        }
    }

@@ -204,8 +210,8 @@ public final class GnssCapabilities implements Parcelable {
        if (mGnssSignalTypes.equals(gnssSignalTypes)) {
            return this;
        } else {
            return new GnssCapabilities(mTopFlags, mMeasurementCorrectionsFlags, mPowerFlags,
                    new ArrayList<>(gnssSignalTypes));
            return new GnssCapabilities(mTopFlags, mIsAdrCapabilityKnown,
                    mMeasurementCorrectionsFlags, mPowerFlags, new ArrayList<>(gnssSignalTypes));
        }
    }

@@ -372,15 +378,29 @@ public final class GnssCapabilities implements Parcelable {
     * Returns {@code true} if GNSS chipset supports accumulated delta range, {@code false}
     * otherwise.
     *
     * <p>The value is only known if {@link #isAccumulatedDeltaRangeCapabilityKnown()} is
     * true.
     *
     * <p>The accumulated delta range information can be queried in
     * {@link android.location.GnssMeasurement#getAccumulatedDeltaRangeState()},
     * {@link android.location.GnssMeasurement#getAccumulatedDeltaRangeMeters()}, and
     * {@link android.location.GnssMeasurement#getAccumulatedDeltaRangeUncertaintyMeters()}.
     */
    public boolean hasAccumulatedDeltaRange() {
        if (!mIsAdrCapabilityKnown) {
            throw new IllegalStateException("Accumulated delta range capability is unknown.");
        }
        return (mTopFlags & TOP_HAL_CAPABILITY_ACCUMULATED_DELTA_RANGE) != 0;
    }

    /**
     * Returns {@code true} if {@link #hasAccumulatedDeltaRange()} is known, {@code false}
     * otherwise.
     */
    public boolean isAccumulatedDeltaRangeCapabilityKnown() {
        return mIsAdrCapabilityKnown;
    }

    /**
     * Returns {@code true} if GNSS chipset supports line-of-sight satellite identification
     * measurement corrections, {@code false} otherwise.
@@ -488,6 +508,7 @@ public final class GnssCapabilities implements Parcelable {

        GnssCapabilities that = (GnssCapabilities) o;
        return mTopFlags == that.mTopFlags
                && mIsAdrCapabilityKnown == that.mIsAdrCapabilityKnown
                && mMeasurementCorrectionsFlags == that.mMeasurementCorrectionsFlags
                && mPowerFlags == that.mPowerFlags
                && mGnssSignalTypes.equals(that.mGnssSignalTypes);
@@ -495,15 +516,16 @@ public final class GnssCapabilities implements Parcelable {

    @Override
    public int hashCode() {
        return Objects.hash(mTopFlags, mMeasurementCorrectionsFlags, mPowerFlags, mGnssSignalTypes);
        return Objects.hash(mTopFlags, mIsAdrCapabilityKnown, mMeasurementCorrectionsFlags,
                mPowerFlags, mGnssSignalTypes);
    }

    public static final @NonNull Creator<GnssCapabilities> CREATOR =
            new Creator<GnssCapabilities>() {
                @Override
                public GnssCapabilities createFromParcel(Parcel in) {
                    return new GnssCapabilities(in.readInt(), in.readInt(), in.readInt(),
                            in.createTypedArrayList(GnssSignalType.CREATOR));
                    return new GnssCapabilities(in.readInt(), in.readBoolean(), in.readInt(),
                            in.readInt(), in.createTypedArrayList(GnssSignalType.CREATOR));
                }

                @Override
@@ -520,6 +542,7 @@ public final class GnssCapabilities implements Parcelable {
    @Override
    public void writeToParcel(@NonNull Parcel parcel, int flags) {
        parcel.writeInt(mTopFlags);
        parcel.writeBoolean(mIsAdrCapabilityKnown);
        parcel.writeInt(mMeasurementCorrectionsFlags);
        parcel.writeInt(mPowerFlags);
        parcel.writeTypedList(mGnssSignalTypes);
@@ -574,8 +597,10 @@ public final class GnssCapabilities implements Parcelable {
        if (hasMeasurementCorrectionsForDriving()) {
            builder.append("MEASUREMENT_CORRECTIONS_FOR_DRIVING ");
        }
        if (hasAccumulatedDeltaRange()) {
        if (mIsAdrCapabilityKnown && hasAccumulatedDeltaRange()) {
            builder.append("ACCUMULATED_DELTA_RANGE ");
        } else if (!mIsAdrCapabilityKnown) {
            builder.append("ACCUMULATED_DELTA_RANGE(unknown) ");
        }
        if (hasMeasurementCorrectionsLosSats()) {
            builder.append("LOS_SATS ");
@@ -622,12 +647,14 @@ public final class GnssCapabilities implements Parcelable {
    public static final class Builder {

        private @TopHalCapabilityFlags int mTopFlags;
        private boolean mIsAdrCapabilityKnown;
        private @SubHalMeasurementCorrectionsCapabilityFlags int mMeasurementCorrectionsFlags;
        private @SubHalPowerCapabilityFlags int mPowerFlags;
        private @NonNull List<GnssSignalType> mGnssSignalTypes;

        public Builder() {
            mTopFlags = 0;
            mIsAdrCapabilityKnown = false;
            mMeasurementCorrectionsFlags = 0;
            mPowerFlags = 0;
            mGnssSignalTypes = Collections.emptyList();
@@ -635,6 +662,7 @@ public final class GnssCapabilities implements Parcelable {

        public Builder(@NonNull GnssCapabilities capabilities) {
            mTopFlags = capabilities.mTopFlags;
            mIsAdrCapabilityKnown = capabilities.mIsAdrCapabilityKnown;
            mMeasurementCorrectionsFlags = capabilities.mMeasurementCorrectionsFlags;
            mPowerFlags = capabilities.mPowerFlags;
            mGnssSignalTypes = capabilities.mGnssSignalTypes;
@@ -768,11 +796,21 @@ public final class GnssCapabilities implements Parcelable {
         * Sets accumulated delta range capability.
         */
        public @NonNull Builder setHasAccumulatedDeltaRange(boolean capable) {
            mIsAdrCapabilityKnown = true;
            mTopFlags = setFlag(mTopFlags, TOP_HAL_CAPABILITY_ACCUMULATED_DELTA_RANGE,
                    capable);
            return this;
        }

        /**
         * Clears accumulated delta range capability and sets it as unknown.
         */
        public @NonNull Builder clearIsAccumulatedDeltaRangeCapabilityKnown() {
            mIsAdrCapabilityKnown = false;
            mTopFlags = setFlag(mTopFlags, TOP_HAL_CAPABILITY_ACCUMULATED_DELTA_RANGE, false);
            return this;
        }

        /**
         * Sets measurement corrections line-of-sight satellites capability.
         */
@@ -864,8 +902,8 @@ public final class GnssCapabilities implements Parcelable {
         * Builds a new GnssCapabilities.
         */
        public @NonNull GnssCapabilities build() {
            return new GnssCapabilities(mTopFlags, mMeasurementCorrectionsFlags, mPowerFlags,
                    new ArrayList<>(mGnssSignalTypes));
            return new GnssCapabilities(mTopFlags, mIsAdrCapabilityKnown,
                    mMeasurementCorrectionsFlags, mPowerFlags, new ArrayList<>(mGnssSignalTypes));
        }

        private static int setFlag(int value, int flag, boolean set) {
+3 −2
Original line number Diff line number Diff line
@@ -1127,13 +1127,14 @@ public class GnssNative {
    }

    @NativeEntryPoint
    void setTopHalCapabilities(@GnssCapabilities.TopHalCapabilityFlags int capabilities) {
    void setTopHalCapabilities(@GnssCapabilities.TopHalCapabilityFlags int capabilities,
            boolean isAdrCapabilityKnown) {
        // Here the bits specified by 'capabilities' are turned on. It is handled differently from
        // sub hal because top hal capabilities could be set by HIDL HAL and/or AIDL HAL. Each of
        // them possesses a different set of capabilities.
        mTopFlags |= capabilities;
        GnssCapabilities oldCapabilities = mCapabilities;
        mCapabilities = oldCapabilities.withTopHalFlags(mTopFlags);
        mCapabilities = oldCapabilities.withTopHalFlags(mTopFlags, isAdrCapabilityKnown);
        onCapabilitiesChanged(oldCapabilities, mCapabilities);
    }

+6 −3
Original line number Diff line number Diff line
@@ -95,7 +95,7 @@ void Gnss_class_init_once(JNIEnv* env, jclass& clazz) {
    method_reportSvStatus = env->GetMethodID(clazz, "reportSvStatus", "(I[I[F[F[F[F[F)V");
    method_reportNmea = env->GetMethodID(clazz, "reportNmea", "(J)V");

    method_setTopHalCapabilities = env->GetMethodID(clazz, "setTopHalCapabilities", "(I)V");
    method_setTopHalCapabilities = env->GetMethodID(clazz, "setTopHalCapabilities", "(IZ)V");
    method_setSignalTypeCapabilities =
            env->GetMethodID(clazz, "setSignalTypeCapabilities", "(Ljava/util/List;)V");
    method_setGnssYearOfHardware = env->GetMethodID(clazz, "setGnssYearOfHardware", "(I)V");
@@ -120,8 +120,10 @@ void Gnss_class_init_once(JNIEnv* env, jclass& clazz) {

Status GnssCallbackAidl::gnssSetCapabilitiesCb(const int capabilities) {
    ALOGD("%s: %du\n", __func__, capabilities);
    bool isAdrCapabilityKnown = (getInterfaceVersion() >= 3) ? true : false;
    JNIEnv* env = getJniEnv();
    env->CallVoidMethod(mCallbacksObj, method_setTopHalCapabilities, capabilities);
    env->CallVoidMethod(mCallbacksObj, method_setTopHalCapabilities, capabilities,
                        isAdrCapabilityKnown);
    checkAndClearExceptionFromCallback(env, __FUNCTION__);
    return Status::ok();
}
@@ -409,7 +411,8 @@ Return<void> GnssCallbackHidl::gnssSetCapabilitesCb(uint32_t capabilities) {
    ALOGD("%s: %du\n", __func__, capabilities);

    JNIEnv* env = getJniEnv();
    env->CallVoidMethod(mCallbacksObj, method_setTopHalCapabilities, capabilities);
    env->CallVoidMethod(mCallbacksObj, method_setTopHalCapabilities, capabilities,
                        /* isAdrCapabilityKnown= */ false);
    checkAndClearExceptionFromCallback(env, __FUNCTION__);
    return Void();
}