diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivityKind.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivityKind.java index 0eff946545..6c17423cc5 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivityKind.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivityKind.java @@ -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"); } 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 00f5a1dc6a..be0b7902c2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummaryEntries.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummaryEntries.java @@ -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"; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiWorkoutGbParser.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiWorkoutGbParser.java index 592fd893ad..228fe5458c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiWorkoutGbParser.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiWorkoutGbParser.java @@ -553,7 +553,7 @@ public class HuaweiWorkoutGbParser implements ActivitySummaryParser { Map 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,8 +886,13 @@ public class HuaweiWorkoutGbParser implements ActivitySummaryParser { avgAltitude = avgAltitude / altitudeCount; if (speedCount > 0) { - summaryData.add(ActivitySummaryEntries.SPEED_AVG, speed / 10f, ActivitySummaryEntries.UNIT_METERS_PER_SECOND); - summaryData.add(ActivitySummaryEntries.SPEED_MAX, maxSpeed / 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) {