From 55238f4ee9a0a41809ea2fb71784e41c8f8b6584 Mon Sep 17 00:00:00 2001 From: a0z Date: Sat, 7 Dec 2024 00:10:31 +0100 Subject: [PATCH] AbstractActivityChartFragment: heart rate gap support --- .../charts/AbstractActivityChartFragment.java | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractActivityChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractActivityChartFragment.java index 5fef1c0a2..1fdccd56b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractActivityChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractActivityChartFragment.java @@ -219,12 +219,6 @@ public abstract class AbstractActivityChartFragment extend entries.add(new ArrayList<>()); } - boolean hr = supportsHeartrate(gbDevice); - List heartrateEntries = hr ? new ArrayList(numEntries) : null; - - int lastHrSampleIndex = -1; - HeartRateUtils heartRateUtilsInstance = HeartRateUtils.getInstance(); - for (int i = 0; i < numEntries; i++) { ActivitySample sample = samples.get(i); ActivityKind type = sample.getKind(); @@ -275,20 +269,35 @@ public abstract class AbstractActivityChartFragment extend last_value = value; } + boolean hr = supportsHeartrate(gbDevice); + final List heartRateLineEntries = new ArrayList<>(); + final List heartRateDataSets = new ArrayList<>(); + int lastTsShorten = 0; + HeartRateUtils heartRateUtilsInstance = HeartRateUtils.getInstance(); + // Currently only for HR if (hr) { for (ActivitySample sample : highResSamples) { if (sample.getKind() != ActivityKind.NOT_WORN && heartRateUtilsInstance.isValidHeartRateValue(sample.getHeartRate())) { - int ts = tsTranslation.shorten(sample.getTimestamp()); - if (lastHrSampleIndex > -1 && ts - lastHrSampleIndex > 1800*HeartRateUtils.MAX_HR_MEASUREMENTS_GAP_MINUTES) { - heartrateEntries.add(createLineEntry(0, lastHrSampleIndex + 1)); - heartrateEntries.add(createLineEntry(0, ts - 1)); + int tsShorten = tsTranslation.shorten(sample.getTimestamp()); + if (lastTsShorten == 0 || (tsShorten - lastTsShorten) <= 60 * HeartRateUtils.MAX_HR_MEASUREMENTS_GAP_MINUTES) { + heartRateLineEntries.add(new Entry(tsShorten, sample.getHeartRate())); + } else { + if (!heartRateLineEntries.isEmpty()) { + List clone = new ArrayList<>(heartRateLineEntries.size()); + clone.addAll(heartRateLineEntries); + heartRateDataSets.add(createHeartrateSet(clone, "Heart Rate")); + heartRateLineEntries.clear(); + } } - heartrateEntries.add(createLineEntry(sample.getHeartRate(), ts)); - lastHrSampleIndex = ts; + lastTsShorten = tsShorten; + heartRateLineEntries.add(new Entry(tsShorten, sample.getHeartRate())); } } } + if (!heartRateLineEntries.isEmpty()) { + heartRateDataSets.add(createHeartrateSet(heartRateLineEntries, "Heart Rate")); + } // convert Entry Lists to Datasets List lineDataSets = new ArrayList<>(); @@ -316,9 +325,8 @@ public abstract class AbstractActivityChartFragment extend entries.get(getIndexOfActivity(ActivityKind.AWAKE_SLEEP)), akAwakeSleep.color, "Awake Sleep" )); } - if (hr && !heartrateEntries.isEmpty()) { - LineDataSet heartrateSet = createHeartrateSet(heartrateEntries, "Heart Rate"); - lineDataSets.add(heartrateSet); + if (hr && !heartRateDataSets.isEmpty()) { + lineDataSets.addAll(heartRateDataSets); } lineData = new LineData(lineDataSets);