mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-10-06 13:20:30 +02:00
Garmin: add heart rate zones support
This commit is contained in:
parent
3e327e2924
commit
2a3d2f08e2
@ -10,11 +10,13 @@ import org.slf4j.LoggerFactory;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.activities.workouts.entries.ActivitySummaryProgressEntry;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.workouts.entries.ActivitySummaryTableRowEntry;
|
import nodomain.freeyourgadget.gadgetbridge.activities.workouts.entries.ActivitySummaryTableRowEntry;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.workouts.entries.ActivitySummaryValue;
|
import nodomain.freeyourgadget.gadgetbridge.activities.workouts.entries.ActivitySummaryValue;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.entities.BaseActivitySummary;
|
import nodomain.freeyourgadget.gadgetbridge.entities.BaseActivitySummary;
|
||||||
@ -194,14 +196,19 @@ public class GarminWorkoutParser implements ActivitySummaryParser {
|
|||||||
for (final FitTimeInZone fitTimeInZone : timesInZone) {
|
for (final FitTimeInZone fitTimeInZone : timesInZone) {
|
||||||
// Find the first time in zone for the session (assumes single-session)
|
// Find the first time in zone for the session (assumes single-session)
|
||||||
if (fitTimeInZone.getReferenceMessage() != null && fitTimeInZone.getReferenceMessage() == 18) {
|
if (fitTimeInZone.getReferenceMessage() != null && fitTimeInZone.getReferenceMessage() == 18) {
|
||||||
final Double[] timeInZone = fitTimeInZone.getTimeInZone();
|
final Double[] timeInZones = fitTimeInZone.getTimeInZone();
|
||||||
if (timeInZone != null && timeInZone.length == 6) {
|
final double totalTime = Arrays.stream(timeInZones).mapToInt(Double::intValue).sum();
|
||||||
summaryData.add(HR_ZONE_NA, timeInZone[0].floatValue(), UNIT_SECONDS);
|
final List<String> zoneOrder = Arrays.asList(HR_ZONE_NA, HR_ZONE_WARM_UP, HR_ZONE_EASY, HR_ZONE_AEROBIC, HR_ZONE_THRESHOLD, HR_ZONE_MAXIMUM);
|
||||||
summaryData.add(HR_ZONE_WARM_UP, timeInZone[1].floatValue(), UNIT_SECONDS);
|
for (int i = 1; i < zoneOrder.size(); i++) {
|
||||||
summaryData.add(HR_ZONE_FAT_BURN, timeInZone[2].floatValue(), UNIT_SECONDS);
|
double timeInZone = timeInZones[i] != null ? Math.rint(timeInZones[i]) : 0;
|
||||||
summaryData.add(HR_ZONE_AEROBIC, timeInZone[3].floatValue(), UNIT_SECONDS);
|
summaryData.add(
|
||||||
summaryData.add(HR_ZONE_ANAEROBIC, timeInZone[4].floatValue(), UNIT_SECONDS);
|
zoneOrder.get(i),
|
||||||
summaryData.add(HR_ZONE_EXTREME, timeInZone[5].floatValue(), UNIT_SECONDS);
|
new ActivitySummaryProgressEntry(
|
||||||
|
timeInZone,
|
||||||
|
UNIT_SECONDS,
|
||||||
|
(int) (100 * timeInZone / totalTime)
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -69,10 +69,13 @@ public class ActivitySummaryEntries {
|
|||||||
public static final String HR_MIN = "minHR";
|
public static final String HR_MIN = "minHR";
|
||||||
public static final String HR_ZONE_NA = "hrZoneNa";
|
public static final String HR_ZONE_NA = "hrZoneNa";
|
||||||
public static final String HR_ZONE_WARM_UP = "hrZoneWarmUp";
|
public static final String HR_ZONE_WARM_UP = "hrZoneWarmUp";
|
||||||
|
public static final String HR_ZONE_EASY = "hrZoneEasy";
|
||||||
public static final String HR_ZONE_FAT_BURN = "hrZoneFatBurn";
|
public static final String HR_ZONE_FAT_BURN = "hrZoneFatBurn";
|
||||||
public static final String HR_ZONE_AEROBIC = "hrZoneAerobic";
|
public static final String HR_ZONE_AEROBIC = "hrZoneAerobic";
|
||||||
public static final String HR_ZONE_ANAEROBIC = "hrZoneAnaerobic";
|
public static final String HR_ZONE_ANAEROBIC = "hrZoneAnaerobic";
|
||||||
|
public static final String HR_ZONE_THRESHOLD = "hrZoneThreshold";
|
||||||
public static final String HR_ZONE_EXTREME = "hrZoneExtreme";
|
public static final String HR_ZONE_EXTREME = "hrZoneExtreme";
|
||||||
|
public static final String HR_ZONE_MAXIMUM = "hrZoneMaximum";
|
||||||
|
|
||||||
public static final String LANE_LENGTH = "laneLength";
|
public static final String LANE_LENGTH = "laneLength";
|
||||||
public static final String LAPS = "laps";
|
public static final String LAPS = "laps";
|
||||||
|
@ -177,8 +177,8 @@ public class ActivitySummaryJsonSummary {
|
|||||||
DESCENT_DISTANCE, FLAT_DISTANCE, ELEVATION_GAIN, ELEVATION_LOSS
|
DESCENT_DISTANCE, FLAT_DISTANCE, ELEVATION_GAIN, ELEVATION_LOSS
|
||||||
));
|
));
|
||||||
put(GROUP_HEART_RATE_ZONES, Arrays.asList(
|
put(GROUP_HEART_RATE_ZONES, Arrays.asList(
|
||||||
HR_ZONE_NA, HR_ZONE_WARM_UP, HR_ZONE_FAT_BURN, HR_ZONE_AEROBIC, HR_ZONE_ANAEROBIC,
|
HR_ZONE_NA, HR_ZONE_WARM_UP, HR_ZONE_FAT_BURN, HR_ZONE_EASY, HR_ZONE_AEROBIC, HR_ZONE_ANAEROBIC,
|
||||||
HR_ZONE_EXTREME
|
HR_ZONE_THRESHOLD, HR_ZONE_EXTREME, HR_ZONE_MAXIMUM
|
||||||
));
|
));
|
||||||
put(GROUP_STROKES, Arrays.asList(
|
put(GROUP_STROKES, Arrays.asList(
|
||||||
STROKE_DISTANCE_AVG, STROKE_AVG_PER_SECOND, STROKES,
|
STROKE_DISTANCE_AVG, STROKE_AVG_PER_SECOND, STROKES,
|
||||||
|
@ -2173,9 +2173,12 @@
|
|||||||
<string name="hrZoneNa">N/A</string>
|
<string name="hrZoneNa">N/A</string>
|
||||||
<string name="hrZoneWarmUp">Warm-Up</string>
|
<string name="hrZoneWarmUp">Warm-Up</string>
|
||||||
<string name="hrZoneFatBurn">Fat Burn</string>
|
<string name="hrZoneFatBurn">Fat Burn</string>
|
||||||
|
<string name="hrZoneEasy">Easy</string>
|
||||||
<string name="hrZoneAerobic">Aerobic</string>
|
<string name="hrZoneAerobic">Aerobic</string>
|
||||||
<string name="hrZoneAnaerobic">Anaerobic</string>
|
<string name="hrZoneAnaerobic">Anaerobic</string>
|
||||||
|
<string name="hrZoneThreshold">Threshold</string>
|
||||||
<string name="hrZoneExtreme">Extreme</string>
|
<string name="hrZoneExtreme">Extreme</string>
|
||||||
|
<string name="hrZoneMaximum">Maximum</string>
|
||||||
<string name="TrainingEffect">Training Effect</string>
|
<string name="TrainingEffect">Training Effect</string>
|
||||||
<string name="aerobicTrainingEffect">Aerobic Effect</string>
|
<string name="aerobicTrainingEffect">Aerobic Effect</string>
|
||||||
<string name="anaerobicTrainingEffect">Anaerobic Effect</string>
|
<string name="anaerobicTrainingEffect">Anaerobic Effect</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user