Huawei: fix AVG speed/pace calculation

This commit is contained in:
Me7c7
2025-09-11 16:11:26 +03:00
parent c21033d4e6
commit c499d943d0
3 changed files with 26 additions and 3 deletions
@@ -379,6 +379,10 @@ public enum ActivityKind {
activityKind.name().contains("TREADMILL") || activityKind.name().contains("WALK");
}
public static boolean isSwimActivity(final ActivityKind activityKind) {
return activityKind.name().contains("SWIM");
}
public static boolean isDiving(final ActivityKind activityKind) {
return activityKind.name().contains("DIVING") || activityKind.name().contains("APNEA");
}
@@ -224,7 +224,9 @@ public class ActivitySummaryEntries {
public static final String UNIT_MM = "unit_millimeter";
public static final String UNIT_WATT = "unit_watt";
public static final String UNIT_JOULE = "unit_joule";
public static final String UNIT_MINUTES_PER_100_METERS = "minutes_100m";
public static final String UNIT_SECONDS_PER_100_METERS = "seconds_100m";
public static final String UNIT_MINUTES_PER_100_YARDS = "minutes_100yd";
public static final String UNIT_SECONDS_PER_100_YARDS = "seconds_100yd";
public static final String GROUP_PACE = "Pace";
@@ -553,7 +553,7 @@ public class HuaweiWorkoutGbParser implements ActivitySummaryParser {
Map<String, String> additionalValues = new HashMap<>();
for(HuaweiWorkoutSummaryAdditionalValuesSample sav: summaryAdditionalValuesSamples) {
for (HuaweiWorkoutSummaryAdditionalValuesSample sav : summaryAdditionalValuesSamples) {
additionalValues.put(sav.getKey(), sav.getValue());
}
@@ -566,6 +566,18 @@ public class HuaweiWorkoutGbParser implements ActivitySummaryParser {
//summaryData.add(ActivitySummaryEntries.STATUS, summary.getStatus() & 0xFF, ActivitySummaryEntries.UNIT_NONE);
summaryData.add(ActivitySummaryEntries.TYPE, summary.getType() & 0xFF, ActivitySummaryEntries.UNIT_NONE);
if (summary.getDuration() > 0) {
float totalAvgSpeed = (float)summary.getDistance() / (float)summary.getDuration();
LOG.info("totalAvgSpeed: {}", totalAvgSpeed);
if(ActivityKind.isSwimActivity(type)) {
summaryData.add(ActivitySummaryEntries.PACE_AVG_SECONDS_KM, 100.0f / totalAvgSpeed, ActivitySummaryEntries.UNIT_SECONDS_PER_100_METERS);
} else if (ActivityKind.isPaceActivity(type)) {
summaryData.add(ActivitySummaryEntries.PACE_AVG_SECONDS_KM,(60f / ((totalAvgSpeed * 3.6f))) * 60f, ActivitySummaryEntries.UNIT_SECONDS_PER_KM);
} else {
summaryData.add(ActivitySummaryEntries.SPEED_AVG, totalAvgSpeed, ActivitySummaryEntries.UNIT_METERS_PER_SECOND);
}
}
if (summary.getStrokes() != -1) {
summaryData.add(ActivitySummaryEntries.STROKES, summary.getStrokes(), ActivitySummaryEntries.UNIT_STROKES);
}
@@ -874,9 +886,14 @@ public class HuaweiWorkoutGbParser implements ActivitySummaryParser {
avgAltitude = avgAltitude / altitudeCount;
if (speedCount > 0) {
summaryData.add(ActivitySummaryEntries.SPEED_AVG, speed / 10f, ActivitySummaryEntries.UNIT_METERS_PER_SECOND);
if(ActivityKind.isSwimActivity(type)) {
summaryData.add(ActivitySummaryEntries.PACE_MAX, 100.0f / (maxSpeed/ 10f) , ActivitySummaryEntries.UNIT_SECONDS_PER_100_METERS);
} else if (ActivityKind.isPaceActivity(type)) {
summaryData.add(ActivitySummaryEntries.PACE_MAX,(60f / ((maxSpeed/ 10f) * 3.6)) * 60f , ActivitySummaryEntries.UNIT_SECONDS_PER_KM);
} else {
summaryData.add(ActivitySummaryEntries.SPEED_MAX, maxSpeed / 10f, ActivitySummaryEntries.UNIT_METERS_PER_SECOND);
}
}
if (avgStepRate > 0) {
summaryData.add(ActivitySummaryEntries.STEP_RATE_AVG, avgStepRate, ActivitySummaryEntries.UNIT_SPM);