Cleanup: SensorManager provides context and handler.

This commit is contained in:
Dennis Guse
2026-01-31 19:04:03 +01:00
parent 24ea718ff2
commit b79acfb942
2 changed files with 24 additions and 42 deletions
@@ -1,7 +1,6 @@
package de.dennisguse.opentracks.sensors;
import android.content.Context;
import android.os.Handler;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
@@ -16,8 +15,6 @@ public abstract class SensorHandler<T> {
private final SensorManager sensorManager;
private Context context;
private Handler handler;
private Driver driver;
private Aggregator<T, ?> aggregator;
@@ -49,19 +46,6 @@ public abstract class SensorHandler<T> {
this.sensorManager = sensorManager;
}
//TODO Do we really need start and stop?
void start(Context context, Handler handler) {
this.context = context;
this.handler = handler;
}
void stop() {
this.context = null;
this.handler = null;
disconnect();
}
void connect() {
disconnect();
@@ -80,7 +64,7 @@ public abstract class SensorHandler<T> {
default -> throw new UnsupportedOperationException();
}
driver.connect(context, handler, address);
driver.connect(sensorManager.getContext(), sensorManager.getHandler(), address);
}
void disconnect() {
@@ -106,7 +90,7 @@ public abstract class SensorHandler<T> {
protected abstract int getSensorPreferenceKey();
protected Context getContext() {
return context;
return sensorManager.getContext();
}
//TODO Try to keep aggregator private.
@@ -32,7 +32,6 @@ import de.dennisguse.opentracks.services.handlers.TrackPointCreator;
import de.dennisguse.opentracks.settings.PreferencesUtils;
import de.dennisguse.opentracks.util.SystemUtils;
//TODO provide context and handler for different Managers (not passing via start(), but similar to getNow()).
public class SensorManager implements SharedPreferences.OnSharedPreferenceChangeListener {
private static final String TAG = SensorManager.class.getSimpleName();
@@ -71,20 +70,12 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
gpsManager = new GpsManager(observer, this);
altitudeChangeHandler = new AltitudeChangeHandler(this);
this.heartRateHandler = new HeartRateHandler(this);
this.temperatureHandler = new TemperatureHandler(this);
this.cyclingCadenceHandler = new CyclingCadenceHandler(this);
this.cyclingDistanceSpeedHandler = new CyclingDistanceSpeedHandler(this);
this.cyclingPowerHandler = new CyclingPowerHandler(this);
this.runningSpeedCadenceDistanceHandler = new RunningSpeedCadenceDistanceHandler(this);
altitudeChangeHandler.start(context, handler);
heartRateHandler.start(context, handler);
temperatureHandler.start(context, handler);
cyclingCadenceHandler.start(context, handler);
cyclingDistanceSpeedHandler.start(context, handler);
cyclingPowerHandler.start(context, handler);
runningSpeedCadenceDistanceHandler.start(context, handler);
heartRateHandler = new HeartRateHandler(this);
temperatureHandler = new TemperatureHandler(this);
cyclingCadenceHandler = new CyclingCadenceHandler(this);
cyclingDistanceSpeedHandler = new CyclingDistanceSpeedHandler(this);
cyclingPowerHandler = new CyclingPowerHandler(this);
runningSpeedCadenceDistanceHandler = new RunningSpeedCadenceDistanceHandler(this);
onSharedPreferenceChanged(null, null);
@@ -94,25 +85,25 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
public void stop() {
wakeLock = SystemUtils.releaseWakeLock(wakeLock);
heartRateHandler.stop();
heartRateHandler.disconnect();
heartRateHandler = null;
temperatureHandler.stop();
temperatureHandler.disconnect();
temperatureHandler = null;
cyclingCadenceHandler.stop();
cyclingCadenceHandler.disconnect();
cyclingCadenceHandler = null;
cyclingDistanceSpeedHandler.stop();
cyclingDistanceSpeedHandler.disconnect();
cyclingDistanceSpeedHandler = null;
cyclingPowerHandler.stop();
cyclingPowerHandler.disconnect();
cyclingPowerHandler = null;
runningSpeedCadenceDistanceHandler.stop();
runningSpeedCadenceDistanceHandler.disconnect();
runningSpeedCadenceDistanceHandler = null;
altitudeChangeHandler.stop();
altitudeChangeHandler.disconnect();
altitudeChangeHandler = null;
gpsManager.stop();
@@ -189,8 +180,15 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
return observer.getNow();
}
@VisibleForTesting
public SensorData<HeartRate> getHeartRate(Instant now) {
public Context getContext() {
return context;
}
public Handler getHandler() {
return handler;
}
private SensorData<HeartRate> getHeartRate(Instant now) {
if (heartRateHandler.getAggregator() != null) {
SensorData<HeartRate> value = ((AggregatorHeartRate) heartRateHandler.getAggregator()).getAggregatedValueWithSensorName(now);
//TODO Move this check into HeartRateHandler