Add an optional filter for invalid (0 bpm) heart rate readings

This commit is contained in:
frazou
2025-11-16 22:04:02 +01:00
parent c259f9b8bd
commit a3407ccbea
4 changed files with 11 additions and 3 deletions
@@ -1,6 +1,7 @@
package de.dennisguse.opentracks.data.models;
public record HeartRate(float value) {
public static HeartRate INVALID = HeartRate.of(0.0f);
public static HeartRate of(float value) {
return new HeartRate(value);
@@ -9,4 +10,8 @@ public record HeartRate(float value) {
public float getBPM() {
return value;
}
public boolean isValid() {
return !this.equals(INVALID);
}
}
@@ -12,7 +12,9 @@ public class AggregatorHeartRate extends Aggregator<HeartRate, HeartRate> {
@Override
protected void computeValue(Raw<HeartRate> current) {
this.aggregatedValue = current.value();
if (current.value().isValid()) {
this.aggregatedValue = current.value();
}
}
@Override
@@ -64,7 +64,8 @@ public class SensorDataSet {
public Pair<HeartRate, String> getHeartRate() {
if (heartRate != null) {
return heartRate.getAggregatedValueWithSensorName(trackPointCreator.createNow());
Pair<HeartRate, String> value = heartRate.getAggregatedValueWithSensorName(trackPointCreator.createNow());
if (value.first.isValid()) return value;
}
return null;
@@ -161,7 +161,7 @@ class VoiceAnnouncementUtils {
}
Pair<HeartRate, String> heartrate = sensorDataSet.getHeartRate();
if (shouldVoiceAnnounceHeartRateCurrent() && heartrate != null && heartrate.first != null) { //TODO Check has an announcable value?
if (shouldVoiceAnnounceHeartRateCurrent() && heartrate != null && heartrate.first != null && heartrate.first.isValid()) { //TODO Check has an announcable value?
int averageHeartRate = Math.round(heartrate.first.getBPM());
builder.append(" ")