Cleanup: SensorStatistics is a record.

This commit is contained in:
Dennis Guse
2023-09-28 20:06:13 +02:00
parent 684756c264
commit cb3904ee0b
4 changed files with 46 additions and 78 deletions
@@ -986,13 +986,13 @@ public class CustomContentProviderUtilsTest {
// then // then
assertTrue(sensorStatistics.hasHeartRate()); assertTrue(sensorStatistics.hasHeartRate());
assertEquals(sensorStatistics.getAvgHeartRate().getBPM(), stats.avgHr, 0f); assertEquals(sensorStatistics.avgHeartRate().getBPM(), stats.avgHr, 0f);
assertEquals(sensorStatistics.getMaxHeartRate().getBPM(), stats.maxHr, 0f); assertEquals(sensorStatistics.maxHeartRate().getBPM(), stats.maxHr, 0f);
assertTrue(sensorStatistics.hasCadence()); assertTrue(sensorStatistics.hasCadence());
assertEquals(sensorStatistics.getAvgCadence().getRPM(), stats.avgCadence, 0f); assertEquals(sensorStatistics.avgCadence().getRPM(), stats.avgCadence, 0f);
assertEquals(sensorStatistics.getMaxCadence().getRPM(), stats.maxCadence, 0f); assertEquals(sensorStatistics.maxCadence().getRPM(), stats.maxCadence, 0f);
assertTrue(sensorStatistics.hasPower()); assertTrue(sensorStatistics.hasPower());
assertEquals(sensorStatistics.getAvgPower().getW(), stats.avgPower, 0f); assertEquals(sensorStatistics.avgPower().getW(), stats.avgPower, 0f);
} }
@Test @Test
@@ -1018,8 +1018,8 @@ public class CustomContentProviderUtilsTest {
// then // then
assertTrue(sensorStatistics.hasHeartRate()); assertTrue(sensorStatistics.hasHeartRate());
assertEquals(sensorStatistics.getAvgHeartRate().getBPM(), stats.avgHr, 0f); assertEquals(sensorStatistics.avgHeartRate().getBPM(), stats.avgHr, 0f);
assertEquals(sensorStatistics.getMaxHeartRate().getBPM(), stats.maxHr, 0f); assertEquals(sensorStatistics.maxHeartRate().getBPM(), stats.maxHr, 0f);
assertFalse(sensorStatistics.hasCadence()); assertFalse(sensorStatistics.hasCadence());
assertFalse(sensorStatistics.hasPower()); assertFalse(sensorStatistics.hasPower());
} }
@@ -1048,8 +1048,8 @@ public class CustomContentProviderUtilsTest {
// then // then
assertFalse(sensorStatistics.hasHeartRate()); assertFalse(sensorStatistics.hasHeartRate());
assertTrue(sensorStatistics.hasCadence()); assertTrue(sensorStatistics.hasCadence());
assertEquals(sensorStatistics.getAvgCadence().getRPM(), stats.avgCadence, 0f); assertEquals(sensorStatistics.avgCadence().getRPM(), stats.avgCadence, 0f);
assertEquals(sensorStatistics.getMaxCadence().getRPM(), stats.maxCadence, 0f); assertEquals(sensorStatistics.maxCadence().getRPM(), stats.maxCadence, 0f);
assertFalse(sensorStatistics.hasPower()); assertFalse(sensorStatistics.hasPower());
} }
@@ -1078,7 +1078,7 @@ public class CustomContentProviderUtilsTest {
assertFalse(sensorStatistics.hasHeartRate()); assertFalse(sensorStatistics.hasHeartRate());
assertFalse(sensorStatistics.hasCadence()); assertFalse(sensorStatistics.hasCadence());
assertTrue(sensorStatistics.hasPower()); assertTrue(sensorStatistics.hasPower());
assertEquals(sensorStatistics.getAvgPower().getW(), stats.avgPower, 0f); assertEquals(sensorStatistics.avgPower().getW(), stats.avgPower, 0f);
} }
@Test @Test
@@ -1111,11 +1111,11 @@ public class CustomContentProviderUtilsTest {
TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats(); TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats();
// then // then
assertEquals(sensorStatistics.getAvgHeartRate().getBPM(), stats.avgHr, 0f); assertEquals(sensorStatistics.avgHeartRate().getBPM(), stats.avgHr, 0f);
assertEquals(sensorStatistics.getMaxHeartRate().getBPM(), stats.maxHr, 0f); assertEquals(sensorStatistics.maxHeartRate().getBPM(), stats.maxHr, 0f);
assertEquals(sensorStatistics.getAvgCadence().getRPM(), stats.avgCadence, 0f); assertEquals(sensorStatistics.avgCadence().getRPM(), stats.avgCadence, 0f);
assertEquals(sensorStatistics.getMaxCadence().getRPM(), stats.maxCadence, 0f); assertEquals(sensorStatistics.maxCadence().getRPM(), stats.maxCadence, 0f);
assertEquals(sensorStatistics.getAvgPower().getW(), stats.avgPower, 0f); assertEquals(sensorStatistics.avgPower().getW(), stats.avgPower, 0f);
} }
@Test @Test
@@ -1156,11 +1156,11 @@ public class CustomContentProviderUtilsTest {
TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats(); TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats();
// then // then
assertEquals(sensorStatistics.getAvgHeartRate().getBPM(), stats.avgHr, 0f); assertEquals(sensorStatistics.avgHeartRate().getBPM(), stats.avgHr, 0f);
assertEquals(sensorStatistics.getMaxHeartRate().getBPM(), stats.maxHr, 0f); assertEquals(sensorStatistics.maxHeartRate().getBPM(), stats.maxHr, 0f);
assertEquals(sensorStatistics.getAvgCadence().getRPM(), stats.avgCadence, 0f); assertEquals(sensorStatistics.avgCadence().getRPM(), stats.avgCadence, 0f);
assertEquals(sensorStatistics.getMaxCadence().getRPM(), stats.maxCadence, 0f); assertEquals(sensorStatistics.maxCadence().getRPM(), stats.maxCadence, 0f);
assertEquals(sensorStatistics.getAvgPower().getW(), stats.avgPower, 0f); assertEquals(sensorStatistics.avgPower().getW(), stats.avgPower, 0f);
} }
@Test @Test
@@ -1201,11 +1201,11 @@ public class CustomContentProviderUtilsTest {
TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats(); TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats();
// then // then
assertEquals(sensorStatistics.getAvgHeartRate().getBPM(), stats.avgHr, 0f); assertEquals(sensorStatistics.avgHeartRate().getBPM(), stats.avgHr, 0f);
assertEquals(sensorStatistics.getMaxHeartRate().getBPM(), stats.maxHr, 0f); assertEquals(sensorStatistics.maxHeartRate().getBPM(), stats.maxHr, 0f);
assertEquals(sensorStatistics.getAvgCadence().getRPM(), stats.avgCadence, 0f); assertEquals(sensorStatistics.avgCadence().getRPM(), stats.avgCadence, 0f);
assertEquals(sensorStatistics.getMaxCadence().getRPM(), stats.maxCadence, 0f); assertEquals(sensorStatistics.maxCadence().getRPM(), stats.maxCadence, 0f);
assertEquals(sensorStatistics.getAvgPower().getW(), stats.avgPower, 0f); assertEquals(sensorStatistics.avgPower().getW(), stats.avgPower, 0f);
} }
private void testGetSensorStats_randomData(int totalPoints, boolean withStartSegments) { private void testGetSensorStats_randomData(int totalPoints, boolean withStartSegments) {
@@ -1232,11 +1232,11 @@ public class CustomContentProviderUtilsTest {
TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats(); TestSensorDataUtil.SensorDataStats stats = sensorDataUtil.computeStats();
// then // then
assertEquals(sensorStatistics.getAvgHeartRate().getBPM(), stats.avgHr, 0.01f); assertEquals(sensorStatistics.avgHeartRate().getBPM(), stats.avgHr, 0.01f);
assertEquals(sensorStatistics.getMaxHeartRate().getBPM(), stats.maxHr, 0.01f); assertEquals(sensorStatistics.maxHeartRate().getBPM(), stats.maxHr, 0.01f);
assertEquals(sensorStatistics.getAvgCadence().getRPM(), stats.avgCadence, 0.01f); assertEquals(sensorStatistics.avgCadence().getRPM(), stats.avgCadence, 0.01f);
assertEquals(sensorStatistics.getMaxCadence().getRPM(), stats.maxCadence, 0.01f); assertEquals(sensorStatistics.maxCadence().getRPM(), stats.maxCadence, 0.01f);
assertEquals(sensorStatistics.getAvgPower().getW(), stats.avgPower, 0.01f); assertEquals(sensorStatistics.avgPower().getW(), stats.avgPower, 0.01f);
} }
@Test @Test
@@ -254,24 +254,24 @@ public class StatisticsRecordedFragment extends Fragment {
} }
if (sensorStatistics.hasHeartRate()) { if (sensorStatistics.hasHeartRate()) {
String maxBPM = String.valueOf(Math.round(sensorStatistics.getMaxHeartRate().getBPM())); String maxBPM = String.valueOf(Math.round(sensorStatistics.maxHeartRate().getBPM()));
String avgBPM = String.valueOf(Math.round(sensorStatistics.getAvgHeartRate().getBPM())); String avgBPM = String.valueOf(Math.round(sensorStatistics.avgHeartRate().getBPM()));
viewBinding.statsHeartRateGroup.setVisibility(View.VISIBLE); viewBinding.statsHeartRateGroup.setVisibility(View.VISIBLE);
viewBinding.statsMaxHeartRateValue.setText(maxBPM); viewBinding.statsMaxHeartRateValue.setText(maxBPM);
viewBinding.statsAvgHeartRateValue.setText(avgBPM); viewBinding.statsAvgHeartRateValue.setText(avgBPM);
} }
if (sensorStatistics.hasCadence()) { if (sensorStatistics.hasCadence()) {
String maxRPM = String.valueOf(Math.round(sensorStatistics.getMaxCadence().getRPM())); String maxRPM = String.valueOf(Math.round(sensorStatistics.maxCadence().getRPM()));
String avgRPM = String.valueOf(Math.round(sensorStatistics.getAvgCadence().getRPM())); String avgRPM = String.valueOf(Math.round(sensorStatistics.avgCadence().getRPM()));
viewBinding.statsCadenceGroup.setVisibility(View.VISIBLE); viewBinding.statsCadenceGroup.setVisibility(View.VISIBLE);
viewBinding.statsMaxCadenceValue.setText(maxRPM); viewBinding.statsMaxCadenceValue.setText(maxRPM);
viewBinding.statsAvgCadenceValue.setText(avgRPM); viewBinding.statsAvgCadenceValue.setText(avgRPM);
} }
if (sensorStatistics.hasPower()) { if (sensorStatistics.hasPower()) {
String maxW = String.valueOf(Math.round(sensorStatistics.getMaxPower().getW())); String maxW = String.valueOf(Math.round(sensorStatistics.maxPower().getW()));
String avgW = String.valueOf(Math.round(sensorStatistics.getAvgPower().getW())); String avgW = String.valueOf(Math.round(sensorStatistics.avgPower().getW()));
viewBinding.statsPowerGroup.setVisibility(View.VISIBLE); viewBinding.statsPowerGroup.setVisibility(View.VISIBLE);
viewBinding.statsMaxPowerValue.setText(maxW); viewBinding.statsMaxPowerValue.setText(maxW);
@@ -138,7 +138,7 @@ class VoiceAnnouncementUtils {
} }
if (shouldVoiceAnnounceAverageHeartRate() && sensorStatistics != null && sensorStatistics.hasHeartRate()) { if (shouldVoiceAnnounceAverageHeartRate() && sensorStatistics != null && sensorStatistics.hasHeartRate()) {
int averageHeartRate = Math.round(sensorStatistics.getAvgHeartRate().getBPM()); int averageHeartRate = Math.round(sensorStatistics.avgHeartRate().getBPM());
builder.append(" ") builder.append(" ")
.append(context.getString(R.string.average_heart_rate)); .append(context.getString(R.string.average_heart_rate));
@@ -4,56 +4,24 @@ import de.dennisguse.opentracks.data.models.Cadence;
import de.dennisguse.opentracks.data.models.HeartRate; import de.dennisguse.opentracks.data.models.HeartRate;
import de.dennisguse.opentracks.data.models.Power; import de.dennisguse.opentracks.data.models.Power;
public class SensorStatistics { public record SensorStatistics(
private final HeartRate maxHr; HeartRate maxHeartRate,
private final HeartRate avgHr; HeartRate avgHeartRate,
private final Cadence maxCadence; Cadence maxCadence,
private final Cadence avgCadence; Cadence avgCadence,
private final Power maxPower; Power maxPower,
private final Power avgPower; Power avgPower
) {
public SensorStatistics(HeartRate maxHr, HeartRate avgHr, Cadence maxCadence, Cadence avgCadence, Power maxPower, Power avgPower) {
this.maxHr = maxHr;
this.avgHr = avgHr;
this.maxCadence = maxCadence;
this.avgCadence = avgCadence;
this.maxPower = maxPower;
this.avgPower = avgPower;
}
public boolean hasHeartRate() { public boolean hasHeartRate() {
return avgHr != null && maxHr != null; return avgHeartRate != null && maxHeartRate != null;
}
public HeartRate getMaxHeartRate() {
return maxHr;
}
public HeartRate getAvgHeartRate() {
return avgHr;
} }
public boolean hasCadence() { public boolean hasCadence() {
return avgCadence != null && maxCadence != null; return avgCadence != null && maxCadence != null;
} }
public Cadence getMaxCadence() {
return maxCadence;
}
public Cadence getAvgCadence() {
return avgCadence;
}
public boolean hasPower() { public boolean hasPower() {
return avgPower != null; return avgPower != null;
} }
public Power getMaxPower() {
return maxPower;
}
public Power getAvgPower() {
return avgPower;
}
} }