diff --git a/src/main/java/de/dennisguse/opentracks/data/models/HeartRate.java b/src/main/java/de/dennisguse/opentracks/data/models/HeartRate.java index 622eda7c1..ea1f4d2b0 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/HeartRate.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/HeartRate.java @@ -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); + } } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/AggregatorHeartRate.java b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/AggregatorHeartRate.java index c46434f88..22c7bea24 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/AggregatorHeartRate.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/AggregatorHeartRate.java @@ -12,7 +12,9 @@ public class AggregatorHeartRate extends Aggregator { @Override protected void computeValue(Raw current) { - this.aggregatedValue = current.value(); + if (current.value().isValid()) { + this.aggregatedValue = current.value(); + } } @Override diff --git a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataSet.java b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataSet.java index eacfc9e49..3cf3b8058 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataSet.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataSet.java @@ -64,7 +64,8 @@ public class SensorDataSet { public Pair getHeartRate() { if (heartRate != null) { - return heartRate.getAggregatedValueWithSensorName(trackPointCreator.createNow()); + Pair value = heartRate.getAggregatedValueWithSensorName(trackPointCreator.createNow()); + if (value.first.isValid()) return value; } return null; diff --git a/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtils.java b/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtils.java index 1c17fc3e2..c14514f86 100644 --- a/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtils.java +++ b/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtils.java @@ -161,7 +161,7 @@ class VoiceAnnouncementUtils { } Pair 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(" ")