diff options
-rw-r--r-- | core/api/system-current.txt | 6 | ||||
-rw-r--r-- | location/java/android/location/SatellitePvt.java | 36 | ||||
-rw-r--r-- | services/core/jni/gnss/GnssMeasurementCallback.cpp | 41 |
3 files changed, 36 insertions, 47 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index e28ac6ea9146..498afa144af9 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -5003,7 +5003,6 @@ package android.location { public final class SatellitePvt implements android.os.Parcelable { method public int describeContents(); method @Nullable public android.location.SatellitePvt.ClockInfo getClockInfo(); - method public int getFlags(); method @FloatRange public double getIonoDelayMeters(); method @Nullable public android.location.SatellitePvt.PositionEcef getPositionEcef(); method @FloatRange public double getTropoDelayMeters(); @@ -5019,10 +5018,9 @@ package android.location { ctor public SatellitePvt.Builder(); method @NonNull public android.location.SatellitePvt build(); method @NonNull public android.location.SatellitePvt.Builder setClockInfo(@NonNull android.location.SatellitePvt.ClockInfo); - method @NonNull public android.location.SatellitePvt.Builder setFlags(int); - method @NonNull public android.location.SatellitePvt.Builder setIonoDelayMeters(@FloatRange double); + method @NonNull public android.location.SatellitePvt.Builder setIonoDelayMeters(@FloatRange(from=0.0f, to=100.0f) double); method @NonNull public android.location.SatellitePvt.Builder setPositionEcef(@NonNull android.location.SatellitePvt.PositionEcef); - method @NonNull public android.location.SatellitePvt.Builder setTropoDelayMeters(@FloatRange double); + method @NonNull public android.location.SatellitePvt.Builder setTropoDelayMeters(@FloatRange(from=0.0f, to=100.0f) double); method @NonNull public android.location.SatellitePvt.Builder setVelocityEcef(@NonNull android.location.SatellitePvt.VelocityEcef); } diff --git a/location/java/android/location/SatellitePvt.java b/location/java/android/location/SatellitePvt.java index bb9ae6e661ef..794a8d0731f9 100644 --- a/location/java/android/location/SatellitePvt.java +++ b/location/java/android/location/SatellitePvt.java @@ -399,13 +399,6 @@ public final class SatellitePvt implements Parcelable { } /** - * Gets a bitmask of fields present in this object - */ - public int getFlags() { - return mFlags; - } - - /** * Returns a {@link PositionEcef} object that contains estimates of the satellite * position fields in ECEF coordinate frame. */ @@ -536,18 +529,6 @@ public final class SatellitePvt implements Parcelable { private double mTropoDelayMeters; /** - * Sets a bitmask of fields present in this object - * - * @param flags int flags - * @return Builder builder object - */ - @NonNull - public Builder setFlags(int flags) { - mFlags = flags; - return this; - } - - /** * Set position ECEF. * * @param positionEcef position ECEF object @@ -557,6 +538,7 @@ public final class SatellitePvt implements Parcelable { public Builder setPositionEcef( @NonNull PositionEcef positionEcef) { mPositionEcef = positionEcef; + updateFlags(); return this; } @@ -570,6 +552,7 @@ public final class SatellitePvt implements Parcelable { public Builder setVelocityEcef( @NonNull VelocityEcef velocityEcef) { mVelocityEcef = velocityEcef; + updateFlags(); return this; } @@ -583,9 +566,16 @@ public final class SatellitePvt implements Parcelable { public Builder setClockInfo( @NonNull ClockInfo clockInfo) { mClockInfo = clockInfo; + updateFlags(); return this; } + private void updateFlags() { + if (mPositionEcef != null && mVelocityEcef != null && mClockInfo != null) { + mFlags = (byte) (mFlags | HAS_POSITION_VELOCITY_CLOCK_INFO); + } + } + /** * Set ionospheric delay in meters. * @@ -593,8 +583,10 @@ public final class SatellitePvt implements Parcelable { * @return Builder builder object */ @NonNull - public Builder setIonoDelayMeters(@FloatRange() double ionoDelayMeters) { + public Builder setIonoDelayMeters( + @FloatRange(from = 0.0f, to = 100.0f) double ionoDelayMeters) { mIonoDelayMeters = ionoDelayMeters; + mFlags = (byte) (mFlags | HAS_IONO); return this; } @@ -605,8 +597,10 @@ public final class SatellitePvt implements Parcelable { * @return Builder builder object */ @NonNull - public Builder setTropoDelayMeters(@FloatRange() double tropoDelayMeters) { + public Builder setTropoDelayMeters( + @FloatRange(from = 0.0f, to = 100.0f) double tropoDelayMeters) { mTropoDelayMeters = tropoDelayMeters; + mFlags = (byte) (mFlags | HAS_TROPO); return this; } diff --git a/services/core/jni/gnss/GnssMeasurementCallback.cpp b/services/core/jni/gnss/GnssMeasurementCallback.cpp index dd9a52578477..8c6c673fb5b2 100644 --- a/services/core/jni/gnss/GnssMeasurementCallback.cpp +++ b/services/core/jni/gnss/GnssMeasurementCallback.cpp @@ -54,7 +54,6 @@ jmethodID method_gnssMeasurementCtor; jmethodID method_reportMeasurementData; jmethodID method_satellitePvtBuilderBuild; jmethodID method_satellitePvtBuilderCtor; -jmethodID method_satellitePvtBuilderSetFlags; jmethodID method_satellitePvtBuilderSetPositionEcef; jmethodID method_satellitePvtBuilderSetVelocityEcef; jmethodID method_satellitePvtBuilderSetClockInfo; @@ -90,9 +89,6 @@ void GnssMeasurement_class_init_once(JNIEnv* env, jclass& clazz) { jclass satellitePvtBuilder = env->FindClass("android/location/SatellitePvt$Builder"); class_satellitePvtBuilder = (jclass)env->NewGlobalRef(satellitePvtBuilder); method_satellitePvtBuilderCtor = env->GetMethodID(class_satellitePvtBuilder, "<init>", "()V"); - method_satellitePvtBuilderSetFlags = - env->GetMethodID(class_satellitePvtBuilder, "setFlags", - "(I)Landroid/location/SatellitePvt$Builder;"); method_satellitePvtBuilderSetPositionEcef = env->GetMethodID(class_satellitePvtBuilder, "setPositionEcef", "(Landroid/location/SatellitePvt$PositionEcef;)" @@ -321,6 +317,8 @@ void GnssMeasurementCallbackAidl::translateSingleGnssMeasurement(JNIEnv* env, jobject positionEcef = nullptr; jobject velocityEcef = nullptr; jobject clockInfo = nullptr; + jobject satellitePvtBuilderObject = + env->NewObject(class_satellitePvtBuilder, method_satellitePvtBuilderCtor); if (satFlags & SatellitePvt::HAS_POSITION_VELOCITY_CLOCK_INFO) { positionEcef = env->NewObject(class_positionEcef, method_positionEcef, @@ -337,31 +335,30 @@ void GnssMeasurementCallbackAidl::translateSingleGnssMeasurement(JNIEnv* env, satellitePvt.satClockInfo.satHardwareCodeBiasMeters, satellitePvt.satClockInfo.satTimeCorrectionMeters, satellitePvt.satClockInfo.satClkDriftMps); + env->CallObjectMethod(satellitePvtBuilderObject, + method_satellitePvtBuilderSetPositionEcef, positionEcef); + env->CallObjectMethod(satellitePvtBuilderObject, + method_satellitePvtBuilderSetVelocityEcef, velocityEcef); + env->CallObjectMethod(satellitePvtBuilderObject, method_satellitePvtBuilderSetClockInfo, + clockInfo); } - jobject satellitePvtBuilderObject = - env->NewObject(class_satellitePvtBuilder, method_satellitePvtBuilderCtor); + if (satFlags & SatellitePvt::HAS_IONO) { + env->CallObjectMethod(satellitePvtBuilderObject, + method_satellitePvtBuilderSetIonoDelayMeters, + satellitePvt.ionoDelayMeters); + } + + if (satFlags & SatellitePvt::HAS_TROPO) { + env->CallObjectMethod(satellitePvtBuilderObject, + method_satellitePvtBuilderSetTropoDelayMeters, + satellitePvt.tropoDelayMeters); + } - env->CallObjectMethod(satellitePvtBuilderObject, method_satellitePvtBuilderSetFlags, - satellitePvt.flags); - env->CallObjectMethod(satellitePvtBuilderObject, method_satellitePvtBuilderSetPositionEcef, - positionEcef); - env->CallObjectMethod(satellitePvtBuilderObject, method_satellitePvtBuilderSetVelocityEcef, - velocityEcef); - env->CallObjectMethod(satellitePvtBuilderObject, method_satellitePvtBuilderSetClockInfo, - clockInfo); - env->CallObjectMethod(satellitePvtBuilderObject, - method_satellitePvtBuilderSetIonoDelayMeters, - satellitePvt.ionoDelayMeters); - env->CallObjectMethod(satellitePvtBuilderObject, - method_satellitePvtBuilderSetTropoDelayMeters, - satellitePvt.tropoDelayMeters); jobject satellitePvtObject = env->CallObjectMethod(satellitePvtBuilderObject, method_satellitePvtBuilderBuild); - env->CallVoidMethod(object.get(), method_gnssMeasurementsSetSatellitePvt, satellitePvtObject); - env->DeleteLocalRef(positionEcef); env->DeleteLocalRef(velocityEcef); env->DeleteLocalRef(clockInfo); |