From ce26e20571b1139b22697ad2d314c54247e1ef54 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Mon, 17 Aug 2026 15:48:21 +0200 Subject: [PATCH] Sensor: on start register GPS only once. Part of #2369. --- .../opentracks/sensors/GpsHandler.java | 5 ++-- .../opentracks/sensors/SensorHandler.java | 4 +-- .../opentracks/sensors/driver/Driver.java | 4 +++ .../sensors/driver/GpsInternal.java | 27 +++++++++++++------ 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/sensors/GpsHandler.java b/src/main/java/de/dennisguse/opentracks/sensors/GpsHandler.java index 5948a4ed8..2ab681310 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/GpsHandler.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/GpsHandler.java @@ -45,8 +45,9 @@ public class GpsHandler extends SensorHandler { gpsStatusManager.onMinSamplingIntervalChanged(PreferencesUtils.getMinSamplingInterval()); } - //TODO - connect(); + if (driver != null) { + driver.updateDriverParameters(getContext(), sensorManager.getHandler()); + } } }; diff --git a/src/main/java/de/dennisguse/opentracks/sensors/SensorHandler.java b/src/main/java/de/dennisguse/opentracks/sensors/SensorHandler.java index 31433932d..971c13307 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/SensorHandler.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/SensorHandler.java @@ -21,11 +21,11 @@ public abstract class SensorHandler implement private static final String TAG = SensorHandler.class.getSimpleName(); - private final SensorManager sensorManager; - @VisibleForTesting public Driver driver; + protected final SensorManager sensorManager; + protected Aggregator aggregator; protected SensorHandler(SensorManager sensorManager) { diff --git a/src/main/java/de/dennisguse/opentracks/sensors/driver/Driver.java b/src/main/java/de/dennisguse/opentracks/sensors/driver/Driver.java index bc5628393..435a9000a 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/driver/Driver.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/driver/Driver.java @@ -11,5 +11,9 @@ public interface Driver { //TODO Remove from interface? boolean isConnected(); + default void updateDriverParameters(Context context, Handler handler) { + throw new UnsupportedOperationException(); + } + void disconnect(); } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/driver/GpsInternal.java b/src/main/java/de/dennisguse/opentracks/sensors/driver/GpsInternal.java index cb9316d56..3b0a0ac51 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/driver/GpsInternal.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/driver/GpsInternal.java @@ -57,16 +57,11 @@ public class GpsInternal implements Driver { return; } - LocationRequestCompat locationRequest = new LocationRequestCompat.Builder(PreferencesUtils.getMinSamplingInterval().toMillis()) - .setQuality(LocationRequestCompat.QUALITY_HIGH_ACCURACY) - .setMaxUpdateDelayMillis(0) - .build(); - if (PermissionRequester.GPS.hasPermission(context)) { try { - Log.i(TAG, "Register for location updates " + context); + Log.i(TAG, "Register for location updates"); driverObserver.onConnected(null, null); - LocationManagerCompat.requestLocationUpdates(locationManager, LOCATION_PROVIDER, locationRequest, handler::post, locationListenerCompat); + LocationManagerCompat.requestLocationUpdates(locationManager, LOCATION_PROVIDER, createLocationRequest(), handler::post, locationListenerCompat); return; } catch (SecurityException e) { Log.e(TAG, "Could not register location listener; permissions not granted.", e); @@ -76,6 +71,16 @@ public class GpsInternal implements Driver { driverObserver.onDisconnected(); } + @SuppressWarnings({"MissingPermission"}) + @Override + public void updateDriverParameters(Context context, Handler handler) { + if (!isConnected()) return; + + Log.i(TAG, "Update for location updates"); + driverObserver.onConnected(null, null); + LocationManagerCompat.requestLocationUpdates(locationManager, LOCATION_PROVIDER, createLocationRequest(), handler::post, locationListenerCompat); + } + @SuppressWarnings({"MissingPermission"}) @Override public void disconnect() { @@ -87,9 +92,15 @@ public class GpsInternal implements Driver { driverObserver.onDisconnected(); } - @Override public boolean isConnected() { return locationManager != null; } + + private LocationRequestCompat createLocationRequest() { + return new LocationRequestCompat.Builder(PreferencesUtils.getMinSamplingInterval().toMillis()) + .setQuality(LocationRequestCompat.QUALITY_HIGH_ACCURACY) + .setMaxUpdateDelayMillis(0) + .build(); + } }