diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/workouts/entries/ActivitySummaryGroup.kt b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/workouts/entries/ActivitySummaryGroup.kt index 53451fefd6..5242676b10 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/workouts/entries/ActivitySummaryGroup.kt +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/workouts/entries/ActivitySummaryGroup.kt @@ -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, diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/garmin/GarminWorkoutParser.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/garmin/GarminWorkoutParser.java index 48563d7449..70d6907fcb 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/garmin/GarminWorkoutParser.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/garmin/GarminWorkoutParser.java @@ -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); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummaryData.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummaryData.java index 669101c61f..6c8c6a9efd 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummaryData.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummaryData.java @@ -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); } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummaryEntries.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummaryEntries.java index b93c931fbb..a41ee7fca0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummaryEntries.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummaryEntries.java @@ -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"; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f9a36a124a..8907bd3fff 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1059,9 +1059,9 @@ Stride Stamina Step Length - CNS toxicity - Nitrogen load - Oxygen toxicity + CNS Toxicity + Nitrogen Load + Oxygen Toxicity OTU Surface Interval Clock @@ -2726,8 +2726,11 @@ New Ok Unknown - Finishing body energy - Initial body energy + Finishing Body Energy + Initial Body Energy + Finishing Stamina + Initial Stamina + Minimum Stamina Device Surface air consumption User Max Heart Rate