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; package de.dennisguse.opentracks.sensors;
import android.content.Context; import android.content.Context;
import android.os.Handler;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
@@ -16,8 +15,6 @@ public abstract class SensorHandler<T> {
private final SensorManager sensorManager; private final SensorManager sensorManager;
private Context context;
private Handler handler;
private Driver driver; private Driver driver;
private Aggregator<T, ?> aggregator; private Aggregator<T, ?> aggregator;
@@ -49,19 +46,6 @@ public abstract class SensorHandler<T> {
this.sensorManager = sensorManager; 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() { void connect() {
disconnect(); disconnect();
@@ -80,7 +64,7 @@ public abstract class SensorHandler<T> {
default -> throw new UnsupportedOperationException(); default -> throw new UnsupportedOperationException();
} }
driver.connect(context, handler, address); driver.connect(sensorManager.getContext(), sensorManager.getHandler(), address);
} }
void disconnect() { void disconnect() {
@@ -106,7 +90,7 @@ public abstract class SensorHandler<T> {
protected abstract int getSensorPreferenceKey(); protected abstract int getSensorPreferenceKey();
protected Context getContext() { protected Context getContext() {
return context; return sensorManager.getContext();
} }
//TODO Try to keep aggregator private. //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.settings.PreferencesUtils;
import de.dennisguse.opentracks.util.SystemUtils; 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 { public class SensorManager implements SharedPreferences.OnSharedPreferenceChangeListener {
private static final String TAG = SensorManager.class.getSimpleName(); private static final String TAG = SensorManager.class.getSimpleName();
@@ -71,20 +70,12 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
gpsManager = new GpsManager(observer, this); gpsManager = new GpsManager(observer, this);
altitudeChangeHandler = new AltitudeChangeHandler(this); altitudeChangeHandler = new AltitudeChangeHandler(this);
this.heartRateHandler = new HeartRateHandler(this); heartRateHandler = new HeartRateHandler(this);
this.temperatureHandler = new TemperatureHandler(this); temperatureHandler = new TemperatureHandler(this);
this.cyclingCadenceHandler = new CyclingCadenceHandler(this); cyclingCadenceHandler = new CyclingCadenceHandler(this);
this.cyclingDistanceSpeedHandler = new CyclingDistanceSpeedHandler(this); cyclingDistanceSpeedHandler = new CyclingDistanceSpeedHandler(this);
this.cyclingPowerHandler = new CyclingPowerHandler(this); cyclingPowerHandler = new CyclingPowerHandler(this);
this.runningSpeedCadenceDistanceHandler = new RunningSpeedCadenceDistanceHandler(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);
onSharedPreferenceChanged(null, null); onSharedPreferenceChanged(null, null);
@@ -94,25 +85,25 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
public void stop() { public void stop() {
wakeLock = SystemUtils.releaseWakeLock(wakeLock); wakeLock = SystemUtils.releaseWakeLock(wakeLock);
heartRateHandler.stop(); heartRateHandler.disconnect();
heartRateHandler = null; heartRateHandler = null;
temperatureHandler.stop(); temperatureHandler.disconnect();
temperatureHandler = null; temperatureHandler = null;
cyclingCadenceHandler.stop(); cyclingCadenceHandler.disconnect();
cyclingCadenceHandler = null; cyclingCadenceHandler = null;
cyclingDistanceSpeedHandler.stop(); cyclingDistanceSpeedHandler.disconnect();
cyclingDistanceSpeedHandler = null; cyclingDistanceSpeedHandler = null;
cyclingPowerHandler.stop(); cyclingPowerHandler.disconnect();
cyclingPowerHandler = null; cyclingPowerHandler = null;
runningSpeedCadenceDistanceHandler.stop(); runningSpeedCadenceDistanceHandler.disconnect();
runningSpeedCadenceDistanceHandler = null; runningSpeedCadenceDistanceHandler = null;
altitudeChangeHandler.stop(); altitudeChangeHandler.disconnect();
altitudeChangeHandler = null; altitudeChangeHandler = null;
gpsManager.stop(); gpsManager.stop();
@@ -189,8 +180,15 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
return observer.getNow(); return observer.getNow();
} }
@VisibleForTesting public Context getContext() {
public SensorData<HeartRate> getHeartRate(Instant now) { return context;
}
public Handler getHandler() {
return handler;
}
private SensorData<HeartRate> getHeartRate(Instant now) {
if (heartRateHandler.getAggregator() != null) { if (heartRateHandler.getAggregator() != null) {
SensorData<HeartRate> value = ((AggregatorHeartRate) heartRateHandler.getAggregator()).getAggregatedValueWithSensorName(now); SensorData<HeartRate> value = ((AggregatorHeartRate) heartRateHandler.getAggregator()).getAggregatedValueWithSensorName(now);
//TODO Move this check into HeartRateHandler //TODO Move this check into HeartRateHandler