Add getGnssTimeMillis to LocationManagerInternal.

Bug: 157265008
Test: Manual + Presubmit
Change-Id: Ib3477e8da2ac4683d36785ff5a3416020cd17977
This commit is contained in:
Eva Chen
2021-01-12 14:37:33 -08:00
parent 8337a179d4
commit dd73153c68
2 changed files with 28 additions and 16 deletions

View File

@@ -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();
}

View File

@@ -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 {