From 3cd9a8631ca46b4e142c8402329c1ac4b56c6b3d Mon Sep 17 00:00:00 2001 From: Yu-Han Yang Date: Mon, 25 Mar 2019 17:00:03 -0700 Subject: [PATCH] Change elapsedRealtimeUncertaintyNanos from long to double Bug: 129166160 Fixes: 129166160 Test: builds and existing tests passed Change-Id: I948382a9e486b8ddc1ba6a9fe0fd9bb88e9bfb71 --- api/current.txt | 6 +++--- api/test-current.txt | 2 +- location/java/android/location/GnssClock.java | 15 +++++++-------- location/java/android/location/Location.java | 14 +++++++------- .../server/location/GnssLocationProvider.java | 4 ++-- ...droid_server_location_GnssLocationProvider.cpp | 10 +++++----- 6 files changed, 25 insertions(+), 26 deletions(-) diff --git a/api/current.txt b/api/current.txt index 0eb6447ce2916..c88ed28d82d20 100644 --- a/api/current.txt +++ b/api/current.txt @@ -22659,7 +22659,7 @@ package android.location { method public double getDriftNanosPerSecond(); method @FloatRange(from=0.0f) public double getDriftUncertaintyNanosPerSecond(); method public long getElapsedRealtimeNanos(); - method @IntRange(from=0) public long getElapsedRealtimeUncertaintyNanos(); + method @FloatRange(from=0.0f) public double getElapsedRealtimeUncertaintyNanos(); method public long getFullBiasNanos(); method public int getHardwareClockDiscontinuityCount(); method public int getLeapSecond(); @@ -22863,7 +22863,7 @@ package android.location { method public float getBearing(); method public float getBearingAccuracyDegrees(); method public long getElapsedRealtimeNanos(); - method public long getElapsedRealtimeUncertaintyNanos(); + method public double getElapsedRealtimeUncertaintyNanos(); method public android.os.Bundle getExtras(); method public double getLatitude(); method public double getLongitude(); @@ -22892,7 +22892,7 @@ package android.location { method public void setBearing(float); method public void setBearingAccuracyDegrees(float); method public void setElapsedRealtimeNanos(long); - method public void setElapsedRealtimeUncertaintyNanos(long); + method public void setElapsedRealtimeUncertaintyNanos(double); method public void setExtras(android.os.Bundle); method public void setLatitude(double); method public void setLongitude(double); diff --git a/api/test-current.txt b/api/test-current.txt index 67a26f39ebbce..99cdfb012155c 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -954,7 +954,7 @@ package android.location { method public void setDriftNanosPerSecond(double); method public void setDriftUncertaintyNanosPerSecond(@FloatRange(from=0.0f) double); method public void setElapsedRealtimeNanos(long); - method public void setElapsedRealtimeUncertaintyNanos(@IntRange(from=0) long); + method public void setElapsedRealtimeUncertaintyNanos(@FloatRange(from=0.0f) double); method public void setFullBiasNanos(long); method public void setHardwareClockDiscontinuityCount(int); method public void setLeapSecond(int); diff --git a/location/java/android/location/GnssClock.java b/location/java/android/location/GnssClock.java index 538406180367f..8a7878b46e89c 100644 --- a/location/java/android/location/GnssClock.java +++ b/location/java/android/location/GnssClock.java @@ -17,7 +17,6 @@ package android.location; import android.annotation.FloatRange; -import android.annotation.IntRange; import android.annotation.TestApi; import android.os.Parcel; import android.os.Parcelable; @@ -54,7 +53,7 @@ public final class GnssClock implements Parcelable { private double mDriftUncertaintyNanosPerSecond; private int mHardwareClockDiscontinuityCount; private long mElapsedRealtimeNanos; - private long mElapsedRealtimeUncertaintyNanos; + private double mElapsedRealtimeUncertaintyNanos; /** * @hide @@ -469,8 +468,8 @@ public final class GnssClock implements Parcelable { *

The value is only available if {@link #hasElapsedRealtimeUncertaintyNanos()} is * {@code true}. */ - @IntRange(from = 0) - public long getElapsedRealtimeUncertaintyNanos() { + @FloatRange(from = 0.0f) + public double getElapsedRealtimeUncertaintyNanos() { return mElapsedRealtimeUncertaintyNanos; } @@ -482,7 +481,7 @@ public final class GnssClock implements Parcelable { */ @TestApi public void setElapsedRealtimeUncertaintyNanos( - @IntRange(from = 0) long elapsedRealtimeUncertaintyNanos) { + @FloatRange(from = 0.0f) double elapsedRealtimeUncertaintyNanos) { setFlag(HAS_ELAPSED_REALTIME_UNCERTAINTY_NANOS); mElapsedRealtimeUncertaintyNanos = elapsedRealtimeUncertaintyNanos; } @@ -496,7 +495,7 @@ public final class GnssClock implements Parcelable { @TestApi public void resetElapsedRealtimeUncertaintyNanos() { resetFlag(HAS_ELAPSED_REALTIME_UNCERTAINTY_NANOS); - mElapsedRealtimeUncertaintyNanos = Long.MAX_VALUE; + mElapsedRealtimeUncertaintyNanos = Double.NaN; } /** @@ -543,7 +542,7 @@ public final class GnssClock implements Parcelable { gpsClock.mDriftUncertaintyNanosPerSecond = parcel.readDouble(); gpsClock.mHardwareClockDiscontinuityCount = parcel.readInt(); gpsClock.mElapsedRealtimeNanos = parcel.readLong(); - gpsClock.mElapsedRealtimeUncertaintyNanos = parcel.readLong(); + gpsClock.mElapsedRealtimeUncertaintyNanos = parcel.readDouble(); return gpsClock; } @@ -567,7 +566,7 @@ public final class GnssClock implements Parcelable { parcel.writeDouble(mDriftUncertaintyNanosPerSecond); parcel.writeInt(mHardwareClockDiscontinuityCount); parcel.writeLong(mElapsedRealtimeNanos); - parcel.writeLong(mElapsedRealtimeUncertaintyNanos); + parcel.writeDouble(mElapsedRealtimeUncertaintyNanos); } @Override diff --git a/location/java/android/location/Location.java b/location/java/android/location/Location.java index 673b4112d4234..877172af19938 100644 --- a/location/java/android/location/Location.java +++ b/location/java/android/location/Location.java @@ -136,7 +136,7 @@ public class Location implements Parcelable { private long mElapsedRealtimeNanos = 0; // Estimate of the relative precision of the alignment of this SystemClock // timestamp, with the reported measurements in nanoseconds (68% confidence). - private long mElapsedRealtimeUncertaintyNanos = 0; + private double mElapsedRealtimeUncertaintyNanos = 0.0f; private double mLatitude = 0.0; private double mLongitude = 0.0; private double mAltitude = 0.0f; @@ -199,7 +199,7 @@ public class Location implements Parcelable { mProvider = null; mTime = 0; mElapsedRealtimeNanos = 0; - mElapsedRealtimeUncertaintyNanos = 0; + mElapsedRealtimeUncertaintyNanos = 0.0; mFieldsMask = 0; mLatitude = 0; mLongitude = 0; @@ -601,7 +601,7 @@ public class Location implements Parcelable { * * @return uncertainty of elapsed real-time of fix, in nanoseconds. */ - public long getElapsedRealtimeUncertaintyNanos() { + public double getElapsedRealtimeUncertaintyNanos() { return mElapsedRealtimeUncertaintyNanos; } @@ -612,7 +612,7 @@ public class Location implements Parcelable { * * @param time uncertainty of the elapsed real-time of fix, in nanoseconds. */ - public void setElapsedRealtimeUncertaintyNanos(long time) { + public void setElapsedRealtimeUncertaintyNanos(double time) { mElapsedRealtimeUncertaintyNanos = time; mFieldsMask |= HAS_ELAPSED_REALTIME_UNCERTAINTY_MASK; } @@ -1104,7 +1104,7 @@ public class Location implements Parcelable { } if (hasElapsedRealtimeUncertaintyNanos()) { s.append(" etAcc="); - TimeUtils.formatDuration(mElapsedRealtimeUncertaintyNanos / 1000000L, s); + TimeUtils.formatDuration((long) (mElapsedRealtimeUncertaintyNanos / 1000000), s); } if (hasAltitude()) s.append(" alt=").append(mAltitude); if (hasSpeed()) s.append(" vel=").append(mSpeed); @@ -1136,7 +1136,7 @@ public class Location implements Parcelable { Location l = new Location(provider); l.mTime = in.readLong(); l.mElapsedRealtimeNanos = in.readLong(); - l.mElapsedRealtimeUncertaintyNanos = in.readLong(); + l.mElapsedRealtimeUncertaintyNanos = in.readDouble(); l.mFieldsMask = in.readInt(); l.mLatitude = in.readDouble(); l.mLongitude = in.readDouble(); @@ -1167,7 +1167,7 @@ public class Location implements Parcelable { parcel.writeString(mProvider); parcel.writeLong(mTime); parcel.writeLong(mElapsedRealtimeNanos); - parcel.writeLong(mElapsedRealtimeUncertaintyNanos); + parcel.writeDouble(mElapsedRealtimeUncertaintyNanos); parcel.writeInt(mFieldsMask); parcel.writeDouble(mLatitude); parcel.writeDouble(mLongitude); diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java index 4504b2e38e2b1..e28f89c590180 100644 --- a/services/core/java/com/android/server/location/GnssLocationProvider.java +++ b/services/core/java/com/android/server/location/GnssLocationProvider.java @@ -786,7 +786,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements | (location.hasElapsedRealtimeUncertaintyNanos() ? ELAPSED_REALTIME_HAS_TIME_UNCERTAINTY_NS : 0); long elapsedRealtimeNanos = location.getElapsedRealtimeNanos(); - long elapsedRealtimeUncertaintyNanos = location.getElapsedRealtimeUncertaintyNanos(); + double elapsedRealtimeUncertaintyNanos = location.getElapsedRealtimeUncertaintyNanos(); native_inject_best_location( gnssLocationFlags, latitudeDegrees, longitudeDegrees, @@ -2215,7 +2215,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements float horizontalAccuracyMeters, float verticalAccuracyMeters, float speedAccuracyMetersPerSecond, float bearingAccuracyDegrees, long timestamp, int elapsedRealtimeFlags, long elapsedRealtimeNanos, - long elapsedRealtimeUncertaintyNanos); + double elapsedRealtimeUncertaintyNanos); private native void native_inject_location(double latitude, double longitude, float accuracy); diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp index 019cb315bc61d..73e9bf0e12021 100644 --- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp +++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp @@ -499,7 +499,7 @@ static jobject translateGnssLocation(JNIEnv* env, } if (flags & ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS) { - SET(ElapsedRealtimeUncertaintyNanos, location.elapsedRealtime.timeUncertaintyNs); + SET(ElapsedRealtimeUncertaintyNanos, static_cast(location.elapsedRealtime.timeUncertaintyNs)); } return object.get(); @@ -533,7 +533,7 @@ static GnssLocation_V2_0 createGnssLocation_V2_0( jfloat horizontalAccuracyMeters, jfloat verticalAccuracyMeters, jfloat speedAccuracyMetersPerSecond, jfloat bearingAccuracyDegrees, jlong timestamp, jint elapsedRealtimeFlags, jlong elapsedRealtimeNanos, - jlong elapsedRealtimeUncertaintyNanos) { + jdouble elapsedRealtimeUncertaintyNanos) { GnssLocation_V2_0 location; location.v1_0 = createGnssLocation_V1_0( gnssLocationFlags, latitudeDegrees, longitudeDegrees, altitudeMeters, @@ -1162,7 +1162,7 @@ void GnssMeasurementCallback::translateGnssClock( SET(ElapsedRealtimeNanos, static_cast(elapsedRealtime.timestampNs)); } if (flags & ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS) { - SET(ElapsedRealtimeUncertaintyNanos, static_cast(elapsedRealtime.timeUncertaintyNs)); + SET(ElapsedRealtimeUncertaintyNanos, static_cast(elapsedRealtime.timeUncertaintyNs)); } translateGnssClock(object, data.clock); } @@ -2076,7 +2076,7 @@ static void android_location_GnssLocationProvider_inject_best_location( jlong timestamp, jint elapsedRealtimeFlags, jlong elapsedRealtimeNanos, - jlong elapsedRealtimeUncertaintyNanos) { + jdouble elapsedRealtimeUncertaintyNanos) { if (gnssHal_V2_0 != nullptr) { GnssLocation_V2_0 location = createGnssLocation_V2_0( gnssLocationFlags, @@ -2988,7 +2988,7 @@ static const JNINativeMethod sMethods[] = { android_location_GnssLocationProvider_read_nmea)}, {"native_inject_time", "(JJI)V", reinterpret_cast( android_location_GnssLocationProvider_inject_time)}, - {"native_inject_best_location", "(IDDDFFFFFFJIJJ)V", reinterpret_cast( + {"native_inject_best_location", "(IDDDFFFFFFJIJD)V", reinterpret_cast( android_location_GnssLocationProvider_inject_best_location)}, {"native_inject_location", "(DDF)V", reinterpret_cast( android_location_GnssLocationProvider_inject_location)},