summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--location/java/android/location/LocationManagerInternal.java8
-rw-r--r--services/core/java/com/android/server/location/LocationManagerService.java36
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 {