Garmin: Use user profile weight unit

This commit is contained in:
José Rebelo 2025-03-08 22:27:53 +00:00
parent 5143128aa9
commit f3b204366c
5 changed files with 35 additions and 2 deletions

View File

@ -3,6 +3,7 @@ package nodomain.freeyourgadget.gadgetbridge.activities.workouts;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_CM;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_KG;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_KILOMETERS;
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_MM;
@ -30,11 +31,13 @@ public class WorkoutValueFormatter {
private final String units;
private final String UNIT_IMPERIAL;
private final String UNIT_METRIC;
private final DecimalFormat df = new DecimalFormat("#.##");
public WorkoutValueFormatter() {
this.units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
this.UNIT_IMPERIAL = GBApplication.getContext().getString(R.string.p_unit_imperial);
this.UNIT_METRIC = GBApplication.getContext().getString(R.string.p_unit_metric);
}
public void toggleRawData() {
@ -83,7 +86,13 @@ public class WorkoutValueFormatter {
case UNIT_KG:
if (units.equals(UNIT_IMPERIAL)) {
value = value * 2.2046226f;
unit = "lb";
unit = UNIT_LB;
}
break;
case UNIT_LB:
if (units.equals(UNIT_METRIC)) {
value = value / 2.2046226f;
unit = UNIT_KG;
}
break;
case UNIT_CM:

View File

@ -29,6 +29,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitFile;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.RecordData;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.enums.GarminSport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.exception.FitParseException;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.fieldDefinitions.FieldDefinitionMeasurementSystem;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages.FitLap;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages.FitPhysiologicalMetrics;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages.FitRecord;
@ -36,6 +37,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages.
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages.FitSet;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages.FitSport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages.FitTimeInZone;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages.FitUserProfile;
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
public class GarminWorkoutParser implements ActivitySummaryParser {
@ -47,6 +49,7 @@ public class GarminWorkoutParser implements ActivitySummaryParser {
private final List<ActivityPoint> activityPoints = new ArrayList<>();
private FitSession session = null;
private FitSport sport = null;
private FitUserProfile userProfile = null;
private FitPhysiologicalMetrics physiologicalMetrics = null;
private final List<FitSet> sets = new ArrayList<>();
private final List<FitLap> laps = new ArrayList<>();
@ -103,6 +106,7 @@ public class GarminWorkoutParser implements ActivitySummaryParser {
activityPoints.clear();
session = null;
sport = null;
userProfile = null;
physiologicalMetrics = null;
sets.clear();
laps.clear();
@ -139,6 +143,14 @@ public class GarminWorkoutParser implements ActivitySummaryParser {
} else if (record instanceof FitLap) {
LOG.trace("Lap: {}", record);
laps.add((FitLap) record);
} else if (record instanceof FitUserProfile) {
LOG.trace("User Profile: {}", record);
if (userProfile != null) {
LOG.warn("Got multiple user profiles - NOT SUPPORTED: {}", record);
} else {
// We only support 1 user profile
userProfile = (FitUserProfile) record;
}
} else {
return false;
}
@ -163,6 +175,13 @@ public class GarminWorkoutParser implements ActivitySummaryParser {
}
final ActivityKind.CycleUnit cycleUnit = ActivityKind.getCycleUnit(activityKind);
final String weightUnit;
if (userProfile != null && userProfile.getWeightSetting() != null) {
weightUnit = FieldDefinitionMeasurementSystem.Type.metric.equals(userProfile.getWeightSetting()) ? UNIT_KG : UNIT_LB;
} else {
weightUnit = UNIT_KG;
}
summary.setActivityKind(activityKind.getCode());
if (session.getTotalElapsedTime() != null) {
@ -495,7 +514,7 @@ public class GarminWorkoutParser implements ActivitySummaryParser {
}
if (set.getWeight() != null) {
columns.add(new ActivitySummaryValue(set.getWeight(), UNIT_KG));
columns.add(new ActivitySummaryValue(set.getWeight(), weightUnit));
} else {
columns.add(new ActivitySummaryValue("stats_empty_value"));
}

View File

@ -208,6 +208,7 @@ public class ActivitySummaryEntries {
public static final String UNIT_STRING = "string";
public static final String UNIT_RAW_STRING = "raw_string";
public static final String UNIT_KG = "kg";
public static final String UNIT_LB = "lb";
public static final String UNIT_RPM = "unit_rpm";
public static final String UNIT_MM = "unit_millimeter";
public static final String UNIT_WATT = "unit_watt";

View File

@ -85,6 +85,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages.
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages.FitSport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages.FitStressLevel;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages.FitTimeInZone;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages.FitUserProfile;
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
@ -266,6 +267,8 @@ public class FitImporter {
// handled in workout parser
} else if (record instanceof FitTimeInZone) {
// handled in workout parser
} else if (record instanceof FitUserProfile) {
// handled in workout parser
} else if (record instanceof FitHrvSummary) {
final FitHrvSummary hrvSummary = (FitHrvSummary) record;
LOG.trace("HRV summary at {}: {}", ts, record);

View File

@ -29,6 +29,7 @@ public class FieldDefinitionMeasurementSystem extends FieldDefinition {
public enum Type {
metric,
imperial,
;
public static Type fromId(int id) {