mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Garmin: improve workout parsing
- add initial / final / min stamina handling for session summary - add fractional cycle and cadence handling for session summary - add fallback handling for diving summary
This commit is contained in:
+3
@@ -266,6 +266,9 @@ object ActivitySummaryGroup {
|
||||
ActivitySummaryEntries.RECOVERY_TIME,
|
||||
ActivitySummaryEntries.BODY_ENERGY_AT_START,
|
||||
ActivitySummaryEntries.BODY_ENERGY_AT_END,
|
||||
ActivitySummaryEntries.STAMINA_AT_START,
|
||||
ActivitySummaryEntries.STAMINA_AT_END,
|
||||
ActivitySummaryEntries.STAMINA_MIN,
|
||||
ActivitySummaryEntries.LACTATE_THRESHOLD_HR,
|
||||
ActivitySummaryEntries.RATING_OF_PERCEIVED_EXERTION,
|
||||
ActivitySummaryEntries.WORKOUT_FEEL,
|
||||
|
||||
+49
-22
@@ -406,14 +406,22 @@ public class GarminWorkoutParser implements ActivitySummaryParser {
|
||||
}
|
||||
summaryData.add(POOL_LENGTH, session.getPoolLength(), UNIT_METERS);
|
||||
summaryData.add(SWOLF_AVG, session.getAvgSwolf(), UNIT_NONE);
|
||||
if (session.getTotalCycles() != null && cycleUnit != ActivityKind.CycleUnit.NONE) {
|
||||
if (cycleUnit == ActivityKind.CycleUnit.STEPS) {
|
||||
summaryData.addTotal(session.getTotalCycles() * 2, cycleUnit);
|
||||
} else {
|
||||
// FIXME some of the rest might also need adjusting...
|
||||
summaryData.addTotal(session.getTotalCycles(), cycleUnit);
|
||||
if (cycleUnit != ActivityKind.CycleUnit.NONE) {
|
||||
Number totalCycles = session.getTotalCycles();
|
||||
if (totalCycles != null) {
|
||||
final Number totalFractionalCycles = session.getTotalFractionalCycles();
|
||||
if (totalFractionalCycles != null) {
|
||||
totalCycles = totalCycles.doubleValue() + totalFractionalCycles.doubleValue();
|
||||
}
|
||||
if (cycleUnit == ActivityKind.CycleUnit.STEPS) {
|
||||
summaryData.addTotal(totalCycles.doubleValue() * 2, cycleUnit);
|
||||
} else {
|
||||
// FIXME some of the rest might also need adjusting...
|
||||
summaryData.addTotal(totalCycles, cycleUnit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
summaryData.add(STEP_LENGTH_AVG, session.getAvgStepLength(), UNIT_MM);
|
||||
if (session.getTotalCalories() != null) {
|
||||
summaryData.add(CALORIES_CONSUMED, session.getCaloriesConsumed(), UNIT_KCAL);
|
||||
@@ -449,22 +457,34 @@ public class GarminWorkoutParser implements ActivitySummaryParser {
|
||||
session.getEnhancedAvgAltitude(), session.getAvgAltitude());
|
||||
|
||||
summaryData.add(STRESS_AVG, session.getAvgStress(), UNIT_NONE);
|
||||
if (session.getAvgCadence() != null) {
|
||||
Number avgCadence = session.getAvgCadence();
|
||||
if (avgCadence != null) {
|
||||
final Number avgFractionalCadence = session.getAvgFractionalCadence();
|
||||
if (avgFractionalCadence != null) {
|
||||
avgCadence = avgCadence.doubleValue() + avgFractionalCadence.doubleValue();
|
||||
}
|
||||
if (cycleUnit == ActivityKind.CycleUnit.STEPS) {
|
||||
summaryData.addCadenceAvg(session.getAvgCadence() * 2, cycleUnit);
|
||||
summaryData.addCadenceAvg(avgCadence.doubleValue() * 2, cycleUnit);
|
||||
} else {
|
||||
// FIXME some of the rest might also need adjusting...
|
||||
summaryData.addCadenceAvg(session.getAvgCadence(), cycleUnit);
|
||||
summaryData.addCadenceAvg(avgCadence, cycleUnit);
|
||||
}
|
||||
}
|
||||
if (session.getMaxCadence() != null) {
|
||||
|
||||
Number maxCadence = session.getMaxCadence();
|
||||
if (maxCadence != null) {
|
||||
final Number maxFractionalCadence = session.getMaxFractionalCadence();
|
||||
if (maxFractionalCadence != null) {
|
||||
maxCadence = maxCadence.doubleValue() + maxFractionalCadence.doubleValue();
|
||||
}
|
||||
if (cycleUnit == ActivityKind.CycleUnit.STEPS) {
|
||||
summaryData.addCadenceMax(session.getMaxCadence() * 2, cycleUnit);
|
||||
summaryData.addCadenceMax(maxCadence.doubleValue() * 2, cycleUnit);
|
||||
} else {
|
||||
// FIXME some of the rest might also need adjusting...
|
||||
summaryData.addCadenceMax(session.getMaxCadence(), cycleUnit);
|
||||
summaryData.addCadenceMax(maxCadence, cycleUnit);
|
||||
}
|
||||
}
|
||||
|
||||
if (!ActivityKind.isDiving(activityKind)) {
|
||||
if(!summaryData.add(TOTAL_ASCENT, session.getTotalAscent(), UNIT_METERS) && physiologicalMetrics != null){
|
||||
summaryData.add(TOTAL_ASCENT, physiologicalMetrics.getTotalAscent(), UNIT_METERS);
|
||||
@@ -733,20 +753,24 @@ public class GarminWorkoutParser implements ActivitySummaryParser {
|
||||
summaryData.add(LACTATE_THRESHOLD_HR, physiologicalMetrics.getLactateThresholdHeartRate(), UNIT_BPM);
|
||||
}
|
||||
|
||||
// diving related
|
||||
summaryData.add(DIVE_NUMBER, UNIT_NONE, session.getDiveNumber(), diveSummary != null ? diveSummary.getDiveNumber() : null);
|
||||
if (diveSummary != null) {
|
||||
summaryData.add(DIVE_NUMBER, diveSummary.getDiveNumber(), UNIT_NONE);
|
||||
summaryData.add(BOTTOM_TIME, diveSummary.getBottomTime(), UNIT_SECONDS);
|
||||
summaryData.add(AVG_DEPTH, diveSummary.getAvgDepth(), UNIT_METERS);
|
||||
summaryData.add(MAX_DEPTH, diveSummary.getMaxDepth(), UNIT_METERS);
|
||||
}
|
||||
summaryData.add(AVG_DEPTH, UNIT_METERS, session.getAvgDepth(), diveSummary != null ? diveSummary.getAvgDepth() : null);
|
||||
summaryData.add(MAX_DEPTH, UNIT_METERS, session.getMaxDepth(), diveSummary != null ? diveSummary.getMaxDepth() : null);
|
||||
|
||||
// force display even if value is 0
|
||||
summaryData.add(START_CNS, diveSummary.getStartCns(), UNIT_PERCENTAGE, true);
|
||||
summaryData.add(END_CNS, diveSummary.getEndCns(), UNIT_PERCENTAGE, true);
|
||||
summaryData.add(START_N2, diveSummary.getStartN2(), UNIT_PERCENTAGE, true);
|
||||
summaryData.add(END_N2, diveSummary.getEndN2(), UNIT_PERCENTAGE, true);
|
||||
summaryData.add(OXYGEN_TOXICITY, diveSummary.getO2Toxicity(), UNIT_OXYGEN_TOXICITY_UNITs, true);
|
||||
// force display even if value is 0
|
||||
summaryData.add(START_CNS, UNIT_PERCENTAGE, session.getStartCns(), diveSummary != null ? diveSummary.getStartCns() : null, true);
|
||||
summaryData.add(END_CNS, UNIT_PERCENTAGE, session.getEndCns(), diveSummary != null ? diveSummary.getEndCns() : null, true);
|
||||
summaryData.add(START_N2, UNIT_PERCENTAGE, session.getStartN2(), diveSummary != null ? diveSummary.getStartN2() : null, true);
|
||||
summaryData.add(END_N2, UNIT_PERCENTAGE, session.getEndN2(), diveSummary != null ? diveSummary.getEndN2() : null, true);
|
||||
summaryData.add(OXYGEN_TOXICITY, UNIT_OXYGEN_TOXICITY_UNITs, session.getO2Toxicity(), diveSummary != null ? diveSummary.getO2Toxicity() : null, true);
|
||||
|
||||
summaryData.add(SURFACE_INTERVAL, diveSummary.getSurfaceInterval(), UNIT_SECONDS);
|
||||
summaryData.add(SURFACE_INTERVAL, UNIT_SECONDS, session.getSurfaceInterval(), diveSummary != null ? diveSummary.getSurfaceInterval() : null);
|
||||
|
||||
if (diveSummary != null) {
|
||||
summaryData.add(PRESSURE_SAC_AVG, diveSummary.getAvgPressureSac(), UNIT_BAR_PER_MINUTE);
|
||||
}
|
||||
|
||||
@@ -816,6 +840,9 @@ public class GarminWorkoutParser implements ActivitySummaryParser {
|
||||
summaryData.add(BODY_ENERGY_AT_END, physiologicalMetrics.getEndingBodyBattery(), UNIT_PERCENTAGE);
|
||||
}
|
||||
}
|
||||
summaryData.add(STAMINA_AT_START, session.getBeginningPotential(), UNIT_PERCENTAGE);
|
||||
summaryData.add(STAMINA_AT_END, session.getEndingPotential(), UNIT_PERCENTAGE);
|
||||
summaryData.add(STAMINA_MIN, session.getMinStamina(), UNIT_PERCENTAGE);
|
||||
|
||||
summaryData.add(SOLAR_INTENSITY, session.getSolarIntensity(), UNIT_PERCENTAGE);
|
||||
summaryData.add(BATTERY_GAIN, session.getBatteryGain(), UNIT_SECONDS);
|
||||
|
||||
+7
-2
@@ -69,10 +69,15 @@ public class ActivitySummaryData {
|
||||
|
||||
/// @return {@code true} if the value was actually added
|
||||
public boolean add(final String key, final String unit, final Number value, final Number valueFallback) {
|
||||
return add(key, unit, value, valueFallback, false);
|
||||
}
|
||||
|
||||
/// @return {@code true} if the value was actually added
|
||||
public boolean add(final String key, final String unit, final Number value, final Number valueFallback, boolean force) {
|
||||
if (value != null) {
|
||||
return add(null, key, value, unit, false);
|
||||
return add(null, key, value, unit, force);
|
||||
} else {
|
||||
return add(null, key, valueFallback, unit, false);
|
||||
return add(null, key, valueFallback, unit, force);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
@@ -307,6 +307,9 @@ public class ActivitySummaryEntries {
|
||||
public static final String RECOVERY_TIME_REMAINING_AT_START = "recovery_time_remaining_at_start";
|
||||
public static final String BODY_ENERGY_AT_START = "body_energy_at_start";
|
||||
public static final String BODY_ENERGY_AT_END = "body_energy_at_end";
|
||||
public static final String STAMINA_AT_START = "stamina_at_start";
|
||||
public static final String STAMINA_AT_END = "stamina_at_end";
|
||||
public static final String STAMINA_MIN = "stamina_min";
|
||||
public static final String TOTAL_WORK = "total_work";
|
||||
public static final String BATTERY_LEVEL_START = "battery_level_start";
|
||||
public static final String BATTERY_LEVEL_END = "battery_level_end";
|
||||
|
||||
@@ -1059,9 +1059,9 @@
|
||||
<string name="stride">Stride</string>
|
||||
<string name="stamina">Stamina</string>
|
||||
<string name="step_length">Step Length</string>
|
||||
<string name="diving_cns_toxicity">CNS toxicity</string>
|
||||
<string name="diving_nitrogen_load">Nitrogen load</string>
|
||||
<string name="diving_oxygen_toxicity">Oxygen toxicity</string>
|
||||
<string name="diving_cns_toxicity">CNS Toxicity</string>
|
||||
<string name="diving_nitrogen_load">Nitrogen Load</string>
|
||||
<string name="diving_oxygen_toxicity">Oxygen Toxicity</string>
|
||||
<string name="unit_oxygen_toxicity_units">OTU</string>
|
||||
<string name="diving_surface_interval">Surface Interval</string>
|
||||
<string name="clock">Clock</string>
|
||||
@@ -2726,8 +2726,11 @@
|
||||
<string name="battery_status_new">New</string>
|
||||
<string name="battery_status_ok">Ok</string>
|
||||
<string name="battery_status_unknown">Unknown</string>
|
||||
<string name="body_energy_at_end">Finishing body energy</string>
|
||||
<string name="body_energy_at_start">Initial body energy</string>
|
||||
<string name="body_energy_at_end">Finishing Body Energy</string>
|
||||
<string name="body_energy_at_start">Initial Body Energy</string>
|
||||
<string name="stamina_at_end">Finishing Stamina</string>
|
||||
<string name="stamina_at_start">Initial Stamina</string>
|
||||
<string name="stamina_min">Minimum Stamina</string>
|
||||
<string name="device">Device</string>
|
||||
<string name="diving_pressure_sac_avg">Surface air consumption</string>
|
||||
<string name="hr_user_max">User Max Heart Rate</string>
|
||||
|
||||
Reference in New Issue
Block a user