Chart: use min/100m unit for swim workout for speed

This commit is contained in:
Me7c7
2025-09-11 16:11:26 +03:00
parent c499d943d0
commit 5d2ba3c535
3 changed files with 24 additions and 6 deletions
@@ -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);
@@ -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;
}
@@ -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<Entry> 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(