diff options
| -rw-r--r-- | services/core/java/com/android/server/location/GnssLocationProvider.java | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java index e7636ae8acb4..c312b76cc463 100644 --- a/services/core/java/com/android/server/location/GnssLocationProvider.java +++ b/services/core/java/com/android/server/location/GnssLocationProvider.java @@ -222,6 +222,8 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private static final long LOCATION_UPDATE_MIN_TIME_INTERVAL_MILLIS = 1000; // Default update duration in milliseconds for REQUEST_LOCATION. private static final long LOCATION_UPDATE_DURATION_MILLIS = 10 * 1000; + // Update duration extension multiplier for emergency REQUEST_LOCATION. + private static final int EMERGENCY_LOCATION_UPDATE_DURATION_MULTIPLIER = 3; /** simpler wrapper for ProviderRequest + Worksource */ private static class GpsRequest { @@ -724,30 +726,35 @@ public class GnssLocationProvider extends AbstractLocationProvider implements Context.LOCATION_SERVICE); String provider; LocationChangeListener locationListener; + LocationRequest locationRequest = new LocationRequest() + .setInterval(LOCATION_UPDATE_MIN_TIME_INTERVAL_MILLIS) + .setFastestInterval(LOCATION_UPDATE_MIN_TIME_INTERVAL_MILLIS); if (independentFromGnss) { // For fast GNSS TTFF provider = LocationManager.NETWORK_PROVIDER; locationListener = mNetworkLocationListener; + locationRequest.setQuality(LocationRequest.POWER_LOW); } else { // For Device-Based Hybrid (E911) provider = LocationManager.FUSED_PROVIDER; locationListener = mFusedLocationListener; + locationRequest.setQuality(LocationRequest.ACCURACY_FINE); } - Log.i(TAG, - String.format( - "GNSS HAL Requesting location updates from %s provider for %d millis.", - provider, durationMillis)); - - LocationRequest locationRequest = LocationRequest.createFromDeprecatedProvider(provider, - LOCATION_UPDATE_MIN_TIME_INTERVAL_MILLIS, /* minDistance= */ 0, - /* singleShot= */ false); + locationRequest.setProvider(provider); // Ignore location settings if in emergency mode. if (isUserEmergency && mNIHandler.getInEmergency()) { locationRequest.setLocationSettingsIgnored(true); + durationMillis *= EMERGENCY_LOCATION_UPDATE_DURATION_MULTIPLIER; } + + Log.i(TAG, + String.format( + "GNSS HAL Requesting location updates from %s provider for %d millis.", + provider, durationMillis)); + try { locationManager.requestLocationUpdates(locationRequest, locationListener, mHandler.getLooper()); @@ -765,6 +772,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } private void injectBestLocation(Location location) { + if (DEBUG) { + Log.d(TAG, "injectBestLocation: " + location); + } int gnssLocationFlags = LOCATION_HAS_LAT_LONG | (location.hasAltitude() ? LOCATION_HAS_ALTITUDE : 0) | (location.hasSpeed() ? LOCATION_HAS_SPEED : 0) | @@ -869,6 +879,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private void handleUpdateLocation(Location location) { if (location.hasAccuracy()) { + if (DEBUG) { + Log.d(TAG, "injectLocation: " + location); + } native_inject_location(location.getLatitude(), location.getLongitude(), location.getAccuracy()); } |