diff options
| -rw-r--r-- | location/java/android/location/LocationManagerInternal.java | 8 | ||||
| -rw-r--r-- | services/core/java/com/android/server/location/LocationManagerService.java | 36 |
2 files changed, 28 insertions, 16 deletions
diff --git a/location/java/android/location/LocationManagerInternal.java b/location/java/android/location/LocationManagerInternal.java index 1027f9c0a7be..a6a0e7aa24ff 100644 --- a/location/java/android/location/LocationManagerInternal.java +++ b/location/java/android/location/LocationManagerInternal.java @@ -80,4 +80,12 @@ public abstract class LocationManagerInternal { */ // TODO: there is no reason for this to exist as part of any API. move all the logic into gnss public abstract void sendNiResponse(int notifId, int userResponse); + + /** + * Returns the GNSS provided time. + * + * @return LocationTime object that includes the current time, according to the GNSS location + * provider, and the elapsed nanos since boot the current time was computed at. + */ + public abstract @Nullable LocationTime getGnssTimeMillis(); } diff --git a/services/core/java/com/android/server/location/LocationManagerService.java b/services/core/java/com/android/server/location/LocationManagerService.java index e8052289cca4..83b6ecae7780 100644 --- a/services/core/java/com/android/server/location/LocationManagerService.java +++ b/services/core/java/com/android/server/location/LocationManagerService.java @@ -807,22 +807,7 @@ public class LocationManagerService extends ILocationManager.Stub { @Override public LocationTime getGnssTimeMillis() { - synchronized (mLock) { - LocationProviderManager gpsManager = getLocationProviderManager(GPS_PROVIDER); - if (gpsManager == null) { - return null; - } - - Location location = gpsManager.getLastLocationUnsafe(UserHandle.USER_ALL, - PERMISSION_FINE, false, Long.MAX_VALUE); - if (location == null) { - return null; - } - - long currentNanos = SystemClock.elapsedRealtimeNanos(); - long deltaMs = NANOSECONDS.toMillis(location.getElapsedRealtimeAgeNanos(currentNanos)); - return new LocationTime(location.getTime() + deltaMs, currentNanos); - } + return mLocalService.getGnssTimeMillis(); } @Override @@ -1292,6 +1277,25 @@ public class LocationManagerService extends ILocationManager.Stub { mGnssManagerService.sendNiResponse(notifId, userResponse); } } + + @Override + public @Nullable LocationTime getGnssTimeMillis() { + LocationProviderManager gpsManager = getLocationProviderManager(GPS_PROVIDER); + if (gpsManager == null) { + return null; + } + + Location location = gpsManager.getLastLocationUnsafe(UserHandle.USER_ALL, + PERMISSION_FINE, false, Long.MAX_VALUE); + if (location == null) { + return null; + } + + long currentNanos = SystemClock.elapsedRealtimeNanos(); + long deltaMs = NANOSECONDS.toMillis( + location.getElapsedRealtimeAgeNanos(currentNanos)); + return new LocationTime(location.getTime() + deltaMs, currentNanos); + } } private static class SystemInjector implements Injector { |