From 5d2ba3c535655c192a492298659ac5ada5506ce8 Mon Sep 17 00:00:00 2001 From: Me7c7 Date: Thu, 11 Sep 2025 16:00:37 +0300 Subject: [PATCH] Chart: use min/100m unit for swim workout for speed --- .../activities/charts/SpeedYLabelFormatter.java | 5 ++++- .../workouts/WorkoutValueFormatter.java | 10 ++++++---- .../workouts/charts/DefaultWorkoutCharts.java | 15 ++++++++++++++- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SpeedYLabelFormatter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SpeedYLabelFormatter.java index 87ad7dae86..3544ddc131 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SpeedYLabelFormatter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SpeedYLabelFormatter.java @@ -1,5 +1,6 @@ package nodomain.freeyourgadget.gadgetbridge.activities.charts; +import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_SECONDS_PER_100_METERS; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_SECONDS_PER_KM; import com.github.mikephil.charting.formatter.ValueFormatter; @@ -17,7 +18,9 @@ public class SpeedYLabelFormatter extends ValueFormatter { @Override public String getFormattedValue(float value) { - if (unit.equals(UNIT_SECONDS_PER_KM)) { + if(unit.equals(UNIT_SECONDS_PER_100_METERS)) { + value = value > 0 ? Math.round(100.0 / value) : 0; + } else if (unit.equals(UNIT_SECONDS_PER_KM)) { value = value > 0 ? Math.round((60 / (value * 3.6)) * 60) : 0; } return workoutValueFormatter.formatValue(value, unit, false); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/workouts/WorkoutValueFormatter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/workouts/WorkoutValueFormatter.java index c7609f5fab..6c47a5fe9a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/workouts/WorkoutValueFormatter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/workouts/WorkoutValueFormatter.java @@ -6,6 +6,8 @@ import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries. import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_LB; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_METERS; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_METERS_PER_SECOND; +import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_MINUTES_PER_100_METERS; +import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_MINUTES_PER_100_YARDS; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_MINUTES_PER_KM; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_MM; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_SECONDS_PER_100_METERS; @@ -155,19 +157,19 @@ public class WorkoutValueFormatter { case UNIT_SECONDS_PER_100_METERS: if (units.equals(UNIT_IMPERIAL)) { value = (value * 0.9144) / 60D; - unit = "minutes_100yd"; + unit = UNIT_MINUTES_PER_100_YARDS; } else { //metric value = value / 60D; - unit = "minutes_100m"; + unit = UNIT_MINUTES_PER_100_METERS; } break; case UNIT_SECONDS_PER_100_YARDS: if (units.equals(UNIT_IMPERIAL)) { value = value / 60D; - unit = "minutes_100yd"; + unit = UNIT_MINUTES_PER_100_YARDS; } else { //metric value = (value * 1.0936133D) / 60D; - unit = "minutes_100m"; + unit = UNIT_MINUTES_PER_100_METERS; } break; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/workouts/charts/DefaultWorkoutCharts.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/workouts/charts/DefaultWorkoutCharts.java index 405dd8ae96..1bfbf531df 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/workouts/charts/DefaultWorkoutCharts.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/workouts/charts/DefaultWorkoutCharts.java @@ -4,7 +4,9 @@ import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries. import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_KMPH; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_METERS; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_METERS_PER_SECOND; +import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_MINUTES_PER_100_METERS; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_MINUTES_PER_KM; +import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_SECONDS_PER_100_METERS; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_SECONDS_PER_KM; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_SPM; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_WATT; @@ -149,7 +151,18 @@ public class DefaultWorkoutCharts { private static WorkoutChart createSpeedChart(final Context context, final ActivityKind activityKind, final List speedDataPoints) { - if (ActivityKind.isPaceActivity(activityKind)) { + if (ActivityKind.isSwimActivity(activityKind)) { + final String label = String.format("%s (%s)", context.getString(R.string.Pace), getUnitString(context, UNIT_MINUTES_PER_100_METERS)); + final LineDataSet dataset = createLineDataSet(context, speedDataPoints, label, ContextCompat.getColor(context, R.color.chart_line_speed)); + return new WorkoutChart( + "pace", + context.getString(R.string.Pace), + ActivitySummaryEntries.GROUP_SPEED, + new LineData(dataset), + new SpeedYLabelFormatter(UNIT_SECONDS_PER_100_METERS), + getUnitString(context, UNIT_MINUTES_PER_100_METERS) + ); + } else if (ActivityKind.isPaceActivity(activityKind)) { final String label = String.format("%s (%s)", context.getString(R.string.Pace), getUnitString(context, UNIT_MINUTES_PER_KM)); final LineDataSet dataset = createLineDataSet(context, speedDataPoints, label, ContextCompat.getColor(context, R.color.chart_line_speed)); return new WorkoutChart(