From 00dd7cb99b5e3e6cd3d071a9b32f067c25d30e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Tue, 24 Mar 2026 22:16:13 +0000 Subject: [PATCH] Split measurement system units --- .../activities/SettingsActivity.java | 26 +++++-- .../charts/TemperatureChartFragment.java | 5 +- .../charts/TemperatureDailyFragment.java | 16 ++-- .../charts/WeightChartFragment.java | 24 ++---- .../DeviceSettingsPreferenceConst.java | 4 - .../DeviceSpecificSettingsFragment.java | 8 -- .../workouts/WorkoutValueFormatter.java | 47 +++++------ .../activity/CyclingLiveDataActivity.java | 7 +- .../FemometerVinca2DeviceCoordinator.java | 1 - .../GenericWeightScaleCoordinator.kt | 4 - .../GenericWeightScaleMeasurementActivity.kt | 27 +------ .../devices/hplus/HPlusCoordinator.java | 12 ++- .../devices/huami/HuamiCoordinator.java | 11 --- .../devices/huawei/HuaweiCoordinator.java | 3 - .../devices/miband/MiBandConst.java | 5 -- .../AbstractMijiaLywsdCoordinator.java | 1 - .../moyoung/MoyoungWeatherForecast.java | 7 +- .../devices/moyoung/MoyoungWeatherToday.java | 7 +- .../UltrahumanBreathingActivity.java | 9 +-- .../gadgetbridge/model/DistanceUnit.java | 6 ++ .../gadgetbridge/model/TemperatureUnit.java | 6 ++ .../gadgetbridge/model/WeightUnit.kt | 49 ++++++++++++ .../gadgetbridge/prefs/GBPrefsMigrator.java | 4 +- .../prefs/migrators/PreferenceMigrator57.java | 77 +++++++++++++++++++ .../devices/cmfwatchpro/CmfPreferences.java | 19 +++-- .../service/devices/divoom/PixooProtocol.java | 7 +- .../evenrealities/G1DeviceSupport.java | 16 ++-- .../FemometerVinca2DeviceSupport.java | 8 +- .../devices/fitpro/FitProDeviceSupport.java | 18 +++-- .../devices/gloryfit/GloryFitSupport.kt | 19 ++--- .../fit6900/HamaFit6900DeviceSupport.java | 8 +- .../service/devices/hplus/HPlusSupport.java | 2 +- .../service/devices/huami/HuamiSupport.java | 18 +++-- .../zeppos/services/ZeppOsConfigService.java | 67 +++++++++------- .../devices/huawei/HuaweiSupportProvider.java | 4 +- .../devices/huawei/HuaweiWorkoutGbParser.java | 6 +- .../requests/SendWeatherCurrentRequest.java | 7 +- .../requests/SendWeatherUnitRequest.java | 7 +- .../requests/SetLanguageSettingRequest.java | 11 +-- .../requests/SetTemperatureUnitSetting.java | 6 +- .../laxasfit/LaxasFitDeviceSupport.java | 11 +-- .../devices/lefun/LefunDeviceSupport.java | 11 ++- .../watchxplus/WatchXPlusDeviceSupport.java | 7 +- .../mijia_lywsd/MijiaLywsdSupport.java | 12 +-- .../miscale/MiSmartScaleDeviceSupport.java | 14 +++- .../devices/moyoung/MoyoungDeviceSupport.java | 14 ++-- .../service/devices/no1f1/No1F1Support.java | 7 +- .../devices/pebble/PebbleProtocol.java | 7 +- .../service/devices/pebble/PebbleSupport.java | 9 +-- .../fossil_hr/FossilHRWatchAdapter.java | 8 +- .../service/devices/tlw64/TLW64Support.java | 12 +-- .../WithingsSteelHRDeviceSupport.java | 8 +- .../xiaomi/services/XiaomiWeatherService.java | 14 ++-- .../yawell/ring/YawellRingDeviceSupport.java | 8 +- .../gadgetbridge/util/FormatUtils.java | 6 +- .../gadgetbridge/util/GBPrefs.java | 31 +++++++- app/src/main/res/values/arrays.xml | 24 ++---- app/src/main/res/values/strings.xml | 3 + app/src/main/res/values/values.xml | 3 - .../res/xml/devicesettings_mismartscale.xml | 8 -- .../devicesettings_temperature_scale_cf.xml | 10 --- .../xml/devicesettings_weight_scale_unit.xml | 11 --- app/src/main/res/xml/preferences.xml | 51 ++++++++---- 63 files changed, 487 insertions(+), 391 deletions(-) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DistanceUnit.java create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/TemperatureUnit.java create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/WeightUnit.kt create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/migrators/PreferenceMigrator57.java delete mode 100644 app/src/main/res/xml/devicesettings_temperature_scale_cf.xml delete mode 100644 app/src/main/res/xml/devicesettings_weight_scale_unit.xml diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java index 7748961be6..ca1b79e884 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java @@ -76,8 +76,10 @@ import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; public class SettingsActivity extends AbstractSettingsActivityV2 { - public static final String PREF_MEASUREMENT_SYSTEM = "measurement_system"; public static final String PREF_LANGUAGE = "language"; + public static final String PREF_UNIT_WEIGHT = "unit_weight"; + public static final String PREF_UNIT_TEMPERATURE = "unit_temperature"; + public static final String PREF_UNIT_DISTANCE = "unit_distance"; @Override protected PreferenceFragmentCompat newFragment() { @@ -238,10 +240,24 @@ public class SettingsActivity extends AbstractSettingsActivityV2 { }); } - final Preference unit = findPreference(PREF_MEASUREMENT_SYSTEM); - if (unit != null) { - unit.setOnPreferenceChangeListener((preference, newVal) -> { - invokeLater(() -> GBApplication.deviceService().onSendConfiguration(PREF_MEASUREMENT_SYSTEM)); + final Preference unitDistance = findPreference(PREF_UNIT_DISTANCE); + if (unitDistance != null) { + unitDistance.setOnPreferenceChangeListener((preference, newVal) -> { + invokeLater(() -> GBApplication.deviceService().onSendConfiguration(PREF_UNIT_DISTANCE)); + return true; + }); + } + final Preference unitTemperature = findPreference(PREF_UNIT_TEMPERATURE); + if (unitTemperature != null) { + unitTemperature.setOnPreferenceChangeListener((preference, newVal) -> { + invokeLater(() -> GBApplication.deviceService().onSendConfiguration(PREF_UNIT_TEMPERATURE)); + return true; + }); + } + final Preference unitWeight = findPreference(PREF_UNIT_WEIGHT); + if (unitWeight != null) { + unitWeight.setOnPreferenceChangeListener((preference, newVal) -> { + invokeLater(() -> GBApplication.deviceService().onSendConfiguration(PREF_UNIT_WEIGHT)); return true; }); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/TemperatureChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/TemperatureChartFragment.java index 05f0ef8984..5797ec70c1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/TemperatureChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/TemperatureChartFragment.java @@ -50,6 +50,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.TimeSampleProvider; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.TemperatureSample; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; public class TemperatureChartFragment extends AbstractChartFragment { protected static final Logger LOG = LoggerFactory.getLogger(TemperatureChartFragment.class); @@ -61,7 +62,7 @@ public class TemperatureChartFragment extends AbstractChartFragment entries = new ArrayList<>(); long firstTs = 0; + final boolean isMetric = temperatureUnit == TemperatureUnit.CELSIUS; for (TemperatureSample sample : samples) { int timestamp_in_seconds = (int) (sample.getTimestamp() / 1000L); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/TemperatureDailyFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/TemperatureDailyFragment.java index f549c89bcf..3b00b8fcf1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/TemperatureDailyFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/TemperatureDailyFragment.java @@ -45,12 +45,12 @@ import java.util.Locale; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.HeartRateUtils; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.TimeSampleProvider; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.TemperatureSample; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.util.Accumulator; public class TemperatureDailyFragment extends AbstractChartFragment { @@ -69,7 +69,7 @@ public class TemperatureDailyFragment extends AbstractChartFragment 0 ? accumulator.getMin() : -1; final double maximum = accumulator.getCount() > 0 ? accumulator.getMax() : -1; - final String unit = getString(isMetric ? R.string.unit_celsius : R.string.unit_fahrenheit); + final String unit = getString(temperatureUnit == TemperatureUnit.CELSIUS ? R.string.unit_celsius : R.string.unit_fahrenheit); tempAverage.setText(average > 0 ? String.format(Locale.ROOT, "%.1f %s", average, unit) : "-"); tempMinimum.setText(minimum > 0 ? String.format(Locale.ROOT, "%.1f %s", minimum, unit) : "-"); tempMaximum.setText(maximum > 0 ? String.format(Locale.ROOT, "%.1f %s", maximum, unit) : "-"); - final int axisGap = (isMetric ? 3 : 6); + final int axisGap = (temperatureUnit == TemperatureUnit.CELSIUS ? 3 : 6); if (minimum > 0) { long axisMin = Math.max(Math.round(minimum) - axisGap, 0); tempLineChart.getAxisLeft().setAxisMinimum(axisMin); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeightChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeightChartFragment.java index 636fd0072a..511eb3ea16 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeightChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeightChartFragment.java @@ -22,8 +22,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import androidx.fragment.app.Fragment; - import com.github.mikephil.charting.animation.Easing; import com.github.mikephil.charting.charts.Chart; import com.github.mikephil.charting.charts.LineChart; @@ -38,19 +36,18 @@ import com.github.mikephil.charting.formatter.ValueFormatter; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; -import java.util.Date; import java.util.GregorianCalendar; import java.util.List; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.TimeSampleProvider; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; import nodomain.freeyourgadget.gadgetbridge.model.WeightSample; +import nodomain.freeyourgadget.gadgetbridge.model.WeightUnit; import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils; import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs; @@ -59,7 +56,7 @@ public class WeightChartFragment extends AbstractChartFragment { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java index 69be419dcf..e8edec2a49 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java @@ -97,7 +97,6 @@ public class DeviceSettingsPreferenceConst { public static final String PREF_CALENDAR_SYNC_COLOR_BLACKLIST = "calendar_sync_color_blacklist"; public static final String PREF_CALENDAR_SYNC_EVENT_REMINDERS = "calendar_sync_event_reminders"; public static final String PREF_TIME_SYNC = "time_sync"; - public static final String PREF_WEIGHT_SCALE_UNIT = "pref_weight_scale_unit"; public static final String PREF_USE_CUSTOM_DEVICEICON = "use_custom_deviceicon"; public static final String PREF_BUTTON_1_FUNCTION_SHORT = "button_1_function_short"; public static final String PREF_BUTTON_2_FUNCTION_SHORT = "button_2_function_short"; @@ -590,7 +589,6 @@ public class DeviceSettingsPreferenceConst { public static final String PREF_MOONDROP_TOUCH_ANC_MODE_EARBUD = "pref_moondrop_touch_anc_mode_earbud"; public static final String PREF_MOONDROP_TOUCH_ANC_MODE_TRIGGER = "pref_moondrop_touch_anc_mode_trigger"; - public static final String PREF_MISCALE_WEIGHT_UNIT = "pref_miscale_weight_unit"; public static final String PREF_MISCALE_SMALL_OBJECTS = "pref_miscale_small_objects"; public static final String PREF_MIJIA_LYWSD_COMFORT_CHARACTERISTIC_LENGTH = "pref_mijia_lywsd_comfort_characteristic_length"; @@ -638,8 +636,6 @@ public class DeviceSettingsPreferenceConst { public static final String PREF_VOICE_SERVICE_LANGUAGE = "voice_service_language"; - public static final String PREF_TEMPERATURE_SCALE_CF = "temperature_scale_cf"; - public static final String PREF_FAKE_ANDROID_ID = "fake_android_id"; public static final String PREF_HEARTRATE_AUTOMATIC_ENABLE = "heartrate_automatic_enable"; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java index a18a995148..8ad5d7829e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java @@ -431,11 +431,6 @@ public class DeviceSpecificSettingsFragment extends AbstractPreferenceFragment i DeviceSettingsUtils.sortListPreference(transliterationPreference, false); } - final ListPreference weightScaleUnitPreference = findPreference(PREF_WEIGHT_SCALE_UNIT); - if (weightScaleUnitPreference != null) { - DeviceSettingsUtils.sortListPreference(weightScaleUnitPreference, false); - } - String disconnectNotificationState = prefs.getString(PREF_DISCONNECT_NOTIFICATION, PREF_DO_NOT_DISTURB_OFF); boolean disconnectNotificationScheduled = disconnectNotificationState.equals(PREF_DO_NOT_DISTURB_SCHEDULED); @@ -927,7 +922,6 @@ public class DeviceSpecificSettingsFragment extends AbstractPreferenceFragment i addPreferenceHandlerFor(PREF_MOONDROP_TOUCH_ANC_MODE_EARBUD); addPreferenceHandlerFor(PREF_MOONDROP_TOUCH_ANC_MODE_TRIGGER); - addPreferenceHandlerFor(PREF_MISCALE_WEIGHT_UNIT); addPreferenceHandlerFor(PREF_MISCALE_SMALL_OBJECTS); addPreferenceHandlerFor(PREF_MIJIA_LYWSD_COMFORT_TEMPERATURE_LOWER); @@ -990,8 +984,6 @@ public class DeviceSpecificSettingsFragment extends AbstractPreferenceFragment i addPreferenceHandlerFor(PREF_VOICE_SERVICE_LANGUAGE); - addPreferenceHandlerFor(PREF_TEMPERATURE_SCALE_CF); - addPreferenceHandlerFor(PREF_PREFIX_NOTIFICATION_WITH_APP); addPreferenceHandlerFor(PREF_SLEEP_MODE_SCHEDULE_ENABLED); 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 0cc491ef5a..b9e3474ae9 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 @@ -14,6 +14,7 @@ import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries. import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_MINUTES_PER_100_YARDS; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_MM; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_NAUTICAL_MILES; +import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_RAW_STRING; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_SECONDS_PER_100_METERS; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_SECONDS_PER_100_YARDS; import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_SECONDS_PER_KM; @@ -32,6 +33,8 @@ import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; +import nodomain.freeyourgadget.gadgetbridge.model.WeightUnit; import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils; public class WorkoutValueFormatter { @@ -40,9 +43,8 @@ public class WorkoutValueFormatter { private boolean show_raw_data = false; private final ActivityKind activityKind; - private final String units; - private final String UNIT_IMPERIAL; - private final String UNIT_METRIC; + private final DistanceUnit distanceUnit; + private final WeightUnit weightUnit; private final boolean useNauticalUnits; private final DecimalFormat df = new DecimalFormat("#.##"); @@ -52,9 +54,8 @@ public class WorkoutValueFormatter { public WorkoutValueFormatter(final ActivityKind activityKind) { this.activityKind = activityKind; - 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); + this.distanceUnit = GBApplication.getPrefs().getDistanceUnit(); + this.weightUnit = GBApplication.getPrefs().getWeightUnit(); this.useNauticalUnits = ActivityKind.isNauticalActivity(activityKind) && GBApplication.getPrefs().getBoolean("units_nautical", true); } @@ -67,7 +68,7 @@ public class WorkoutValueFormatter { return GBApplication.getContext().getString(R.string.stats_empty_value); } - if (ActivitySummaryEntries.UNIT_RAW_STRING.equals(unit)) { + if (UNIT_RAW_STRING.equals(unit)) { return String.valueOf(rawValue); } @@ -102,25 +103,17 @@ public class WorkoutValueFormatter { switch (unit) { case UNIT_KG: - if (units.equals(UNIT_IMPERIAL)) { - value = value * 2.2046226f; - unit = UNIT_LB; - } - break; + return WeightUnit.Companion.formatWeight(GBApplication.getContext(), value, weightUnit); case UNIT_LB: - if (units.equals(UNIT_METRIC)) { - value = value / 2.2046226f; - unit = UNIT_KG; - } - break; + return WeightUnit.Companion.formatWeight(GBApplication.getContext(), value / 2.2046226f, weightUnit); case UNIT_CM: - if (units.equals(UNIT_IMPERIAL)) { + if (distanceUnit == DistanceUnit.IMPERIAL) { value = value * 0.0328084; unit = "ft"; } break; case UNIT_METERS_PER_SECOND: - if (units.equals(UNIT_IMPERIAL)) { + if (distanceUnit == DistanceUnit.IMPERIAL) { value = value * 2.236936D; unit = "mi_h"; } else { //metric @@ -129,13 +122,13 @@ public class WorkoutValueFormatter { } break; case UNIT_METERS_PER_HOUR: - if (units.equals(UNIT_IMPERIAL)) { + if (distanceUnit == DistanceUnit.IMPERIAL) { value = value * 3.28084D; unit = "foot_per_hour"; } break; case UNIT_SECONDS_PER_M: - if (units.equals(UNIT_IMPERIAL)) { + if (distanceUnit == DistanceUnit.IMPERIAL) { value = value * (1609.344 / 60D); unit = "minutes_mi"; } else { //metric @@ -144,7 +137,7 @@ public class WorkoutValueFormatter { } break; case UNIT_SECONDS_PER_KM: - if (units.equals(UNIT_IMPERIAL)) { + if (distanceUnit == DistanceUnit.IMPERIAL) { value = value / 60D * 1.609344; unit = "minutes_mi"; } else { //metric @@ -153,7 +146,7 @@ public class WorkoutValueFormatter { } break; case UNIT_KILOMETERS: - if (units.equals(UNIT_IMPERIAL)) { + if (distanceUnit == DistanceUnit.IMPERIAL) { value = value * 0.621371D; unit = "mi"; } @@ -162,7 +155,7 @@ public class WorkoutValueFormatter { if (useNauticalUnits) { value = value / 1852D; unit = UNIT_NAUTICAL_MILES; - } else if (units.equals(UNIT_IMPERIAL)) { + } else if (distanceUnit == DistanceUnit.IMPERIAL) { value = value * 3.28084D; unit = "ft"; if (value > 6000) { @@ -180,13 +173,13 @@ public class WorkoutValueFormatter { if (useNauticalUnits) { value = value / 1.852D; unit = UNIT_KNOTS; - } else if (units.equals(UNIT_IMPERIAL)) { + } else if (distanceUnit == DistanceUnit.IMPERIAL) { value = value * 0.621371D; unit = "mi_h"; } break; case UNIT_SECONDS_PER_100_METERS: - if (units.equals(UNIT_IMPERIAL)) { + if (distanceUnit == DistanceUnit.IMPERIAL) { value = (value * 0.9144) / 60D; unit = UNIT_MINUTES_PER_100_YARDS; } else { //metric @@ -195,7 +188,7 @@ public class WorkoutValueFormatter { } break; case UNIT_SECONDS_PER_100_YARDS: - if (units.equals(UNIT_IMPERIAL)) { + if (distanceUnit == DistanceUnit.IMPERIAL) { value = value / 60D; unit = UNIT_MINUTES_PER_100_YARDS; } else { //metric diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/cycling_sensor/activity/CyclingLiveDataActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/cycling_sensor/activity/CyclingLiveDataActivity.java index 98a415325e..3f134d3a5c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/cycling_sensor/activity/CyclingLiveDataActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/cycling_sensor/activity/CyclingLiveDataActivity.java @@ -16,11 +16,11 @@ import java.util.List; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.entities.CyclingSample; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.DeviceService; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.util.GB; public class CyclingLiveDataActivity extends AbstractGBActivity { @@ -84,10 +84,9 @@ public class CyclingLiveDataActivity extends AbstractGBActivity { return true; } }); + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); - String measurementSystem = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric"); - - if(!measurementSystem.equals("metric")) { + if(distanceUnit != DistanceUnit.METRIC) { toUnitFactor = 0.621371f; speedStringResource = R.string.mi_h; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/femometer/FemometerVinca2DeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/femometer/FemometerVinca2DeviceCoordinator.java index f79751e0f7..6e3c683c5d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/femometer/FemometerVinca2DeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/femometer/FemometerVinca2DeviceCoordinator.java @@ -101,7 +101,6 @@ public class FemometerVinca2DeviceCoordinator extends AbstractBLEDeviceCoordinat return new int[]{ R.xml.devicesettings_volume, R.xml.devicesettings_femometer, - R.xml.devicesettings_temperature_scale_cf, }; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/generic_scale/GenericWeightScaleCoordinator.kt b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/generic_scale/GenericWeightScaleCoordinator.kt index 87a9514496..2a26407688 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/generic_scale/GenericWeightScaleCoordinator.kt +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/generic_scale/GenericWeightScaleCoordinator.kt @@ -49,10 +49,6 @@ class GenericWeightScaleCoordinator : AbstractBLEDeviceCoordinator() { return Int.MAX_VALUE } - override fun getSupportedDeviceSpecificSettings(device: GBDevice?): IntArray? { - return intArrayOf(R.xml.devicesettings_weight_scale_unit) - } - override fun getWeightSampleProvider( device: GBDevice, session: DaoSession ): TimeSampleProvider { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/generic_scale/GenericWeightScaleMeasurementActivity.kt b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/generic_scale/GenericWeightScaleMeasurementActivity.kt index 67b91f492a..4bb99f8c92 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/generic_scale/GenericWeightScaleMeasurementActivity.kt +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/generic_scale/GenericWeightScaleMeasurementActivity.kt @@ -29,24 +29,23 @@ import androidx.core.content.ContextCompat import nodomain.freeyourgadget.gadgetbridge.GBApplication import nodomain.freeyourgadget.gadgetbridge.R import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity -import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst import nodomain.freeyourgadget.gadgetbridge.database.DBHelper import nodomain.freeyourgadget.gadgetbridge.devices.GenericWeightSampleProvider import nodomain.freeyourgadget.gadgetbridge.entities.GenericWeightSample import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice +import nodomain.freeyourgadget.gadgetbridge.model.WeightUnit import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.weightScale.WeightScaleMeasurement import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.weightScale.WeightScaleProfile import org.slf4j.Logger import org.slf4j.LoggerFactory import java.time.Instant -import kotlin.math.roundToInt class GenericWeightScaleMeasurementActivity : AbstractGBActivity() { private val weightUpdatedReceiver: WeightUpdatedReceiver = WeightUpdatedReceiver() private var actual: TextView? = null private var save: Button? = null private lateinit var device: GBDevice - private var unit: String? = null + private var unit: WeightUnit? = null private var measurement: WeightScaleMeasurement? = null @@ -59,12 +58,7 @@ class GenericWeightScaleMeasurementActivity : AbstractGBActivity() { val manager = GBApplication.app().deviceManager device = manager.getDeviceByAddress(address)!! - val settings = GBApplication.getDevicePrefs(device) - unit = settings.getString(DeviceSettingsPreferenceConst.PREF_WEIGHT_SCALE_UNIT, null) - - if (unit == null) { - unit = if (GBApplication.getPrefs().isMetricUnits) "kilogram" else "pound" - } + unit = GBApplication.getPrefs().weightUnit setContentView(R.layout.activity_weight_scale_measurement) @@ -86,20 +80,7 @@ class GenericWeightScaleMeasurementActivity : AbstractGBActivity() { val raw: Double? = measurement?.weightKilogram val kg: Double = if (raw == null || raw.isNaN()) 0.0 else raw - if (unit.equals("jin")) { - val jin: Double = kg * 2 - actual?.text = getString(R.string.weight_scale_jin_format, jin) - } else if (unit.equals("pound")) { - val pound: Double = kg / 0.45359237 - actual?.text = getString(R.string.weight_scale_pound_format, pound) - } else if (unit.equals("stone")) { - val total: Int = (kg / 0.45359237).roundToInt() - val stone: Int = total / 14 - val pound: Int = total % 14 - actual?.text = getString(R.string.weight_scale_stone_format, stone, pound) - } else { - actual?.text = getString(R.string.weight_scale_kilogram_format, kg) - } + actual?.text = WeightUnit.formatWeight(this, kg, unit?: WeightUnit.KILOGRAM) } internal fun saveWeightInfo(measurement: WeightScaleMeasurement) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java index 78a3724634..7530938e2a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java @@ -38,7 +38,6 @@ import de.greenrobot.dao.AbstractDao; import de.greenrobot.dao.Property; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; @@ -47,15 +46,14 @@ import nodomain.freeyourgadget.gadgetbridge.entities.HPlusHealthActivitySampleDa import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample; import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.devices.hplus.HPlusSupport; -import nodomain.freeyourgadget.gadgetbridge.util.Prefs; - -import static nodomain.freeyourgadget.gadgetbridge.GBApplication.getContext; +import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs; public class HPlusCoordinator extends AbstractBLEDeviceCoordinator { protected static final Logger LOG = LoggerFactory.getLogger(HPlusCoordinator.class); - protected static Prefs prefs = GBApplication.getPrefs(); + protected static GBPrefs prefs = GBApplication.getPrefs(); @NonNull @Override @@ -140,9 +138,9 @@ public class HPlusCoordinator extends AbstractBLEDeviceCoordinator { } public static byte getUnit(String address) { - String units = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, getContext().getString(R.string.p_unit_metric)); + final DistanceUnit distanceUnit = prefs.getDistanceUnit(); - if (units.equals(getContext().getString(R.string.p_unit_metric))) { + if (distanceUnit == DistanceUnit.METRIC) { return HPlusConstants.ARG_UNIT_METRIC; } else { return HPlusConstants.ARG_UNIT_IMPERIAL; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/HuamiCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/HuamiCoordinator.java index a0ef38c2f8..5c4160a341 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/HuamiCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/HuamiCoordinator.java @@ -39,7 +39,6 @@ import de.greenrobot.dao.AbstractDao; import de.greenrobot.dao.Property; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsCustomizer; import nodomain.freeyourgadget.gadgetbridge.capabilities.password.PasswordCapabilityImpl; @@ -471,16 +470,6 @@ public abstract class HuamiCoordinator extends AbstractBLEDeviceCoordinator { return prefs.getTimePreference(key, defaultValue); } - public static MiBandConst.DistanceUnit getDistanceUnit() { - Prefs prefs = GBApplication.getPrefs(); - String unit = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); - if (unit.equals(GBApplication.getContext().getString(R.string.p_unit_metric))) { - return MiBandConst.DistanceUnit.METRIC; - } else { - return MiBandConst.DistanceUnit.IMPERIAL; - } - } - public static DoNotDisturb getDoNotDisturb(String deviceAddress) { SharedPreferences prefs = GBApplication.getDeviceSpecificSharedPrefs(deviceAddress); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiCoordinator.java index 932efb2f76..272a502e20 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiCoordinator.java @@ -564,9 +564,6 @@ public abstract class HuaweiCoordinator extends AbstractDeviceCoordinator { // Currently on main setting menu. /*if (deviceState.supportsLanguageSetting()) deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.DISPLAY, R.xml.devicesettings_language_generic);*/ - if (deviceState.supportsTemperature()) { - deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.DISPLAY, R.xml.devicesettings_temperature_scale_cf); - } // Developer final List developer = deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.DEVELOPER); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandConst.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandConst.java index fd21bd29fc..71d3d29b1c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandConst.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandConst.java @@ -54,11 +54,6 @@ public final class MiBandConst { public static final Version MI2_FW_VERSION_MIN_TEXT_NOTIFICATIONS = new Version("1.0.1.28"); public static final Version MI2_FW_VERSION_INTERMEDIATE_UPGRADE_53 = new Version("1.0.0.53"); - public enum DistanceUnit { - METRIC, - IMPERIAL - } - public static int getNotificationPrefIntValue(String pref, String origin, Prefs prefs, int defaultValue) { String key = getNotificationPrefKey(pref, origin); return prefs.getInt(key, defaultValue); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/mijia_lywsd/AbstractMijiaLywsdCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/mijia_lywsd/AbstractMijiaLywsdCoordinator.java index 0b3456b486..1fee1efeea 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/mijia_lywsd/AbstractMijiaLywsdCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/mijia_lywsd/AbstractMijiaLywsdCoordinator.java @@ -66,7 +66,6 @@ public abstract class AbstractMijiaLywsdCoordinator extends AbstractBLEDeviceCoo public int[] getSupportedDeviceSpecificSettings(GBDevice device) { return new int[]{ R.xml.devicesettings_mijia_lywsd, - R.xml.devicesettings_temperature_scale_cf, }; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/MoyoungWeatherForecast.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/MoyoungWeatherForecast.java index 4f1b8a8eee..d74292035e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/MoyoungWeatherForecast.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/MoyoungWeatherForecast.java @@ -18,8 +18,7 @@ package nodomain.freeyourgadget.gadgetbridge.devices.moyoung; import lineageos.weather.util.WeatherUtils; import nodomain.freeyourgadget.gadgetbridge.GBApplication; -import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; public class MoyoungWeatherForecast { @@ -35,8 +34,8 @@ public class MoyoungWeatherForecast { public MoyoungWeatherForecast(WeatherSpec.Daily forecast) { conditionId = MoyoungConstants.openWeatherConditionToMoyoungConditionId(forecast.getConditionCode()); - String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); - if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) { + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); + if (temperatureUnit == TemperatureUnit.FAHRENHEIT) { minTemp = (byte) WeatherUtils.celsiusToFahrenheit(forecast.getMinTemp() - 273); // Kelvin -> Fahrenheit maxTemp = (byte) WeatherUtils.celsiusToFahrenheit(forecast.getMaxTemp() - 273); // Kelvin -> Fahrenheit } else { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/MoyoungWeatherToday.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/MoyoungWeatherToday.java index 87df954d6c..8f2c6a5cb0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/MoyoungWeatherToday.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/MoyoungWeatherToday.java @@ -24,8 +24,7 @@ import org.slf4j.LoggerFactory; import lineageos.weather.util.WeatherUtils; import nodomain.freeyourgadget.gadgetbridge.GBApplication; -import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.util.StringUtils; @@ -58,8 +57,8 @@ public class MoyoungWeatherToday { public MoyoungWeatherToday(WeatherSpec weatherSpec) { conditionId = MoyoungConstants.openWeatherConditionToMoyoungConditionId(weatherSpec.getCurrentConditionCode()); - String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); - if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) { + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); + if (temperatureUnit == TemperatureUnit.FAHRENHEIT) { currentTemp = (byte) WeatherUtils.celsiusToFahrenheit(weatherSpec.getCurrentTemp() - 273); // Kelvin -> Fahrenheit } else { currentTemp = (byte) (weatherSpec.getCurrentTemp() - 273); // Kelvin -> Celcius diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/ultrahuman/UltrahumanBreathingActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/ultrahuman/UltrahumanBreathingActivity.java index 36b7b3393e..fefd6276dc 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/ultrahuman/UltrahumanBreathingActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/ultrahuman/UltrahumanBreathingActivity.java @@ -39,9 +39,8 @@ import nodomain.freeyourgadget.gadgetbridge.BuildConfig; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.model.DeviceService; -import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; // TODO: updates when multiple devices are active // TODO: polish and localize the GUI @@ -82,10 +81,8 @@ public class UltrahumanBreathingActivity extends AbstractGBActivity { filter.addAction(UltrahumanConstants.ACTION_EXERCISE_UPDATE); LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(UpdateReceiver, filter); - final GBPrefs prefs = GBApplication.getPrefs(); - final String metric = getString(R.string.p_unit_metric); - final String unitSystem = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, metric); - MetricUnits = unitSystem.equals(metric); + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); + MetricUnits = temperatureUnit == TemperatureUnit.CELSIUS; Button temperatureUom = findViewById(R.id.ultrahuman_exercise_temperature_uom); temperatureUom.setText(MetricUnits ? R.string.unit_celsius : R.string.unit_fahrenheit); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DistanceUnit.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DistanceUnit.java new file mode 100644 index 0000000000..cca7aa07d0 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DistanceUnit.java @@ -0,0 +1,6 @@ +package nodomain.freeyourgadget.gadgetbridge.model; + +public enum DistanceUnit { + METRIC, + IMPERIAL, +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/TemperatureUnit.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/TemperatureUnit.java new file mode 100644 index 0000000000..d47378204e --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/TemperatureUnit.java @@ -0,0 +1,6 @@ +package nodomain.freeyourgadget.gadgetbridge.model; + +public enum TemperatureUnit { + CELSIUS, + FAHRENHEIT, +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/WeightUnit.kt b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/WeightUnit.kt new file mode 100644 index 0000000000..93e98fa709 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/WeightUnit.kt @@ -0,0 +1,49 @@ +package nodomain.freeyourgadget.gadgetbridge.model + +import android.content.Context +import nodomain.freeyourgadget.gadgetbridge.R +import kotlin.math.roundToInt + +enum class WeightUnit { + JIN, + KILOGRAM, + POUND, + STONE, + ; + + companion object { + fun convertWeight(kg: Double, target: WeightUnit): Double { + return when (target) { + JIN -> kg * 2 + POUND -> kg / 0.45359237 + STONE -> kg / 0.45359237 / 14 + KILOGRAM -> kg + } + } + + fun formatWeight(context: Context, kg: Double, target: WeightUnit): String { + return when (target) { + JIN -> { + val jin: Double = kg * 2 + context.getString(R.string.weight_scale_jin_format, jin) + } + + POUND -> { + val pound: Double = kg / 0.45359237 + context.getString(R.string.weight_scale_pound_format, pound) + } + + STONE -> { + val total: Int = (kg / 0.45359237).roundToInt() + val stone: Int = total / 14 + val pound: Int = total % 14 + context.getString(R.string.weight_scale_stone_format, stone, pound) + } + + KILOGRAM -> { + context.getString(R.string.weight_scale_kilogram_format, kg) + } + } + } + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/GBPrefsMigrator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/GBPrefsMigrator.java index 4dcc6a8d3e..dd30c907d3 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/GBPrefsMigrator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/GBPrefsMigrator.java @@ -7,6 +7,7 @@ import org.slf4j.LoggerFactory; import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator55; import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator56; +import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator57; public class GBPrefsMigrator { private static final Logger LOG = LoggerFactory.getLogger(GBPrefsMigrator.class); @@ -14,7 +15,7 @@ public class GBPrefsMigrator { public static final String PREFS_VERSION = "shared_preferences_version"; //if preferences have to be migrated, increment the following and add the migration logic in migratePrefs below // see http://stackoverflow.com/questions/16397848/how-can-i-migrate-android-preferences-with-a-new-version - private static final int CURRENT_PREFS_VERSION = 56; + private static final int CURRENT_PREFS_VERSION = 57; public static void migratePrefsIfNeeded(final SharedPreferences sharedPrefs) { final int oldVersion = getPrefsFileVersion(sharedPrefs); @@ -26,6 +27,7 @@ public class GBPrefsMigrator { // Create new migrator classes as needed, one per version if (oldVersion < 55) new PreferenceMigrator55().migrate(oldVersion, sharedPrefs, editor); if (oldVersion < 56) new PreferenceMigrator56().migrate(oldVersion, sharedPrefs, editor); + if (oldVersion < 57) new PreferenceMigrator57().migrate(oldVersion, sharedPrefs, editor); editor.putString(PREFS_VERSION, Integer.toString(CURRENT_PREFS_VERSION)); editor.apply(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/migrators/PreferenceMigrator57.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/migrators/PreferenceMigrator57.java new file mode 100644 index 0000000000..76a50bf177 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/migrators/PreferenceMigrator57.java @@ -0,0 +1,77 @@ +package nodomain.freeyourgadget.gadgetbridge.prefs.migrators; + +import android.content.SharedPreferences; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; +import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; +import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; +import nodomain.freeyourgadget.gadgetbridge.entities.Device; +import nodomain.freeyourgadget.gadgetbridge.prefs.AbstractPreferenceMigrator; + +public class PreferenceMigrator57 extends AbstractPreferenceMigrator { + private static final Logger LOG = LoggerFactory.getLogger(PreferenceMigrator57.class); + + @Override + public void migrate(final int oldVersion, final SharedPreferences sharedPrefs, final SharedPreferences.Editor editor) { + String temperatureUnit = ""; + String weightUnit = ""; + + // If any device has a weight or temperature unit already configured, migrate it to global + try (DBHandler db = GBApplication.acquireDB()) { + final DaoSession daoSession = db.getDaoSession(); + final List activeDevices = DBHelper.getActiveDevices(daoSession); + + for (final Device dbDevice : activeDevices) { + final SharedPreferences deviceSharedPrefs = GBApplication.getDeviceSpecificSharedPrefs(dbDevice.getIdentifier()); + final String deviceWeightUnit = deviceSharedPrefs.getString("pref_weight_scale_unit", ""); + if (!deviceWeightUnit.isEmpty()) { + weightUnit = deviceWeightUnit; + } else { + final String miScaleWeightUnit = deviceSharedPrefs.getString("pref_miscale_weight_unit", ""); + if (!miScaleWeightUnit.isEmpty()) { + weightUnit = switch (miScaleWeightUnit) { + case "0" -> "kilogram"; + case "1" -> "pound"; + case "2" -> "jin"; + default -> ""; + }; + } + } + final String deviceTemperatureUnit = deviceSharedPrefs.getString("temperature_scale_cf", ""); + if (!deviceTemperatureUnit.isEmpty()) { + temperatureUnit = deviceTemperatureUnit; + } + } + } catch (Exception e) { + LOG.error("Failed to migrate prefs to version 51", e); + } + + final String measurementSystem = sharedPrefs.getString("measurement_system", "metric"); + if (temperatureUnit.isEmpty()) { + temperatureUnit = "metric".equals(measurementSystem) ? "celsius" : "fahrenheit"; + } else { + // We need to convert from c/f to Celsius/Fahrenheit + //noinspection SwitchStatementWithTooFewBranches + temperatureUnit = switch (temperatureUnit) { + case "f" -> "fahrenheit"; + default -> "celsius"; + }; + } + if (weightUnit.isEmpty()) { + weightUnit = "metric".equals(measurementSystem) ? "kilogram" : "pound"; + } + if ("metric".equals(measurementSystem)) { + editor.putString("unit_distance", "metric"); + } else { + editor.putString("unit_distance", "imperial"); + } + editor.putString("unit_temperature", temperatureUnit); + editor.putString("unit_weight", weightUnit); + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/cmfwatchpro/CmfPreferences.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/cmfwatchpro/CmfPreferences.java index ce35013e61..dd2c8fd638 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/cmfwatchpro/CmfPreferences.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/cmfwatchpro/CmfPreferences.java @@ -37,8 +37,9 @@ import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; -import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; @@ -68,7 +69,8 @@ public class CmfPreferences { case ActivityUser.PREF_USER_CALORIES_BURNT: setGoals(builder); break; - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + case SettingsActivity.PREF_UNIT_DISTANCE: + case SettingsActivity.PREF_UNIT_TEMPERATURE: setMeasurementSystem(builder); break; case DeviceSettingsPreferenceConst.PREF_LANGUAGE: @@ -161,15 +163,16 @@ public class CmfPreferences { } protected void setMeasurementSystem(final TransactionBuilder builder) { - final String measurementSystem = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric"); + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); - LOG.debug("Setting measurement system to {}", measurementSystem); + LOG.debug("Setting measurement system - distance={}, temperature={}", distanceUnit, temperatureUnit); - final byte unitByte = (byte) ("metric".equals(measurementSystem) ? 0x00 : 0x01); + final byte distanceByte = (byte) (distanceUnit == DistanceUnit.METRIC ? 0x00 : 0x01); + mSupport.sendCommand(builder, CmfCommand.UNIT_LENGTH, new byte[]{0x01, distanceByte}); - final byte[] cmd = new byte[]{0x01, unitByte}; - mSupport.sendCommand(builder, CmfCommand.UNIT_LENGTH, cmd); - mSupport.sendCommand(builder, CmfCommand.UNIT_TEMPERATURE, cmd); + final byte temperatureByte = (byte) (temperatureUnit == TemperatureUnit.CELSIUS ? 0x00 : 0x01); + mSupport.sendCommand(builder, CmfCommand.UNIT_TEMPERATURE, new byte[]{0x01, temperatureByte}); } protected void setLanguage(final TransactionBuilder builder) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/divoom/PixooProtocol.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/divoom/PixooProtocol.java index 0e59c922e5..380931a68b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/divoom/PixooProtocol.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/divoom/PixooProtocol.java @@ -44,8 +44,6 @@ import java.util.Map; import lineageos.weather.util.WeatherUtils; import nodomain.freeyourgadget.gadgetbridge.GBApplication; -import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent; @@ -55,6 +53,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; import nodomain.freeyourgadget.gadgetbridge.model.DeviceService; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather; import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions; @@ -336,8 +335,8 @@ public class PixooProtocol extends GBDeviceProtocol { } byte temp = (byte) (weatherSpec.getCurrentTemp() - 273); - String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); - if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) { + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); + if (temperatureUnit == TemperatureUnit.FAHRENHEIT) { temp = (byte) WeatherUtils.celsiusToFahrenheit(temp); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/evenrealities/G1DeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/evenrealities/G1DeviceSupport.java index eb14a2d2b5..184401aa19 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/evenrealities/G1DeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/evenrealities/G1DeviceSupport.java @@ -46,13 +46,13 @@ import java.util.concurrent.Callable; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.Logging; -import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.CalendarEventSpec; import nodomain.freeyourgadget.gadgetbridge.model.ItemWithDetails; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLEMultiDeviceSupport; @@ -95,11 +95,7 @@ public class G1DeviceSupport extends AbstractBTLEMultiDeviceSupport { private List lastSyncedEvents; public G1DeviceSupport() { - this(LOG); - } - - public G1DeviceSupport(Logger logger) { - super(logger, 2); + super(LOG, 2); addSupportedService(G1Constants.UUID_SERVICE_NORDIC_UART, G1Constants.Side.LEFT.getDeviceIndex()); @@ -738,7 +734,7 @@ public class G1DeviceSupport extends AbstractBTLEMultiDeviceSupport { case DeviceSettingsPreferenceConst.PREF_EVEN_REALITIES_SCREEN_DEPTH: sendDisplaySettings(); break; - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + case SettingsActivity.PREF_UNIT_TEMPERATURE: case DeviceSettingsPreferenceConst.PREF_TIMEFORMAT: // Units or time format updated, update the time and weather on the glasses to match onSetTimeOrWeather(); @@ -792,10 +788,8 @@ public class G1DeviceSupport extends AbstractBTLEMultiDeviceSupport { long timeMilliseconds = currentMilliseconds + tzOffset; // Check if the GB settings are set to metric, if not, set the temp to use Fahrenheit. - String metricString = GBApplication.getContext().getString(R.string.p_unit_metric); - boolean useFahrenheit = !GBApplication.getPrefs() - .getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, - metricString).equals(metricString); + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); + boolean useFahrenheit = temperatureUnit == TemperatureUnit.FAHRENHEIT; // Pull the weather into a local variable so that if it changes between the two lenses being // updated, we won't end up with a skewed value. diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/femometer/FemometerVinca2DeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/femometer/FemometerVinca2DeviceSupport.java index 081dd61ebc..8267cfd7b8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/femometer/FemometerVinca2DeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/femometer/FemometerVinca2DeviceSupport.java @@ -29,6 +29,7 @@ import java.util.GregorianCalendar; import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; @@ -39,6 +40,7 @@ import nodomain.freeyourgadget.gadgetbridge.entities.FemometerVinca2TemperatureS import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.BatteryState; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLEDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions; @@ -222,9 +224,9 @@ public class FemometerVinca2DeviceSupport extends AbstractBTLESingleDeviceSuppor case DeviceSettingsPreferenceConst.PREF_VOLUME: setVolume(sharedPreferences); break; - case DeviceSettingsPreferenceConst.PREF_TEMPERATURE_SCALE_CF: - String scale = sharedPreferences.getString(DeviceSettingsPreferenceConst.PREF_TEMPERATURE_SCALE_CF, "c"); - int value = "c".equals(scale) ? 0x0a : 0x0b; + case SettingsActivity.PREF_UNIT_TEMPERATURE: + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); + int value = temperatureUnit == TemperatureUnit.CELSIUS ? 0x0a : 0x0b; applySetting(byteArray(value), null); } builder.queue(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/fitpro/FitProDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/fitpro/FitProDeviceSupport.java index 0c79684610..ef0aebe515 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/fitpro/FitProDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/fitpro/FitProDeviceSupport.java @@ -135,7 +135,9 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; import nodomain.freeyourgadget.gadgetbridge.model.DeviceService; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather; import nodomain.freeyourgadget.gadgetbridge.model.weather.WeatherMapper; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; @@ -486,7 +488,7 @@ public class FitProDeviceSupport extends AbstractBTLESingleDeviceSupport { case DeviceSettingsPreferenceConst.PREF_DISPLAY_ON_LIFT_END: setDisplayOnLift(builder); break; - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + case SettingsActivity.PREF_UNIT_DISTANCE: case ActivityUser.PREF_USER_WEIGHT_KG: case ActivityUser.PREF_USER_GENDER: case ActivityUser.PREF_USER_HEIGHT_CM: @@ -554,8 +556,8 @@ public class FitProDeviceSupport extends AbstractBTLESingleDeviceSupport { short todayMax = (short) (weatherSpec.getTodayMaxTemp() - 273); short todayMin = (short) (weatherSpec.getTodayMinTemp() - 273); byte weatherUnit = 0; - String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); - if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) { + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); + if (temperatureUnit == TemperatureUnit.FAHRENHEIT) { todayMax = (short) (todayMax * 1.8f + 32); todayMin = (short) (todayMin * 1.8f + 32); weatherUnit = 1; @@ -728,13 +730,13 @@ public class FitProDeviceSupport extends AbstractBTLESingleDeviceSupport { int heightCm = activityUser.getHeightCm(); int weightKg = activityUser.getWeightKg(); - byte distanceUnit = UNIT_METRIC; - String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); - if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) { - distanceUnit = UNIT_IMPERIAL; + byte distanceUnitByte = UNIT_METRIC; + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); + if (distanceUnit == DistanceUnit.IMPERIAL) { + distanceUnitByte = UNIT_IMPERIAL; } - int userData = genderUnit << 31 | age << 24 | heightCm << 15 | weightKg << 5 | distanceUnit; + int userData = genderUnit << 31 | age << 24 | heightCm << 15 | weightKg << 5 | distanceUnitByte; byte[] data = craftData(CMD_GROUP_GENERAL, CMD_SET_USER_DATA, ByteBuffer.allocate(4).putInt(userData).array()); builder.write(writeCharacteristic, data); return this; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/gloryfit/GloryFitSupport.kt b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/gloryfit/GloryFitSupport.kt index 849fceae3b..7e38245e91 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/gloryfit/GloryFitSupport.kt +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/gloryfit/GloryFitSupport.kt @@ -41,9 +41,11 @@ import nodomain.freeyourgadget.gadgetbridge.model.BatteryState import nodomain.freeyourgadget.gadgetbridge.model.CallSpec import nodomain.freeyourgadget.gadgetbridge.model.CannedMessagesSpec import nodomain.freeyourgadget.gadgetbridge.model.Contact +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder import nodomain.freeyourgadget.gadgetbridge.service.devices.sony.wena3.protocol.packets.notification.defines.VibrationKind @@ -395,7 +397,9 @@ class GloryFitSupport() : AbstractBTLESingleDeviceSupport(LOG) { setLanguage(builder) } - SettingsActivity.PREF_MEASUREMENT_SYSTEM -> { + SettingsActivity.PREF_UNIT_DISTANCE, + SettingsActivity.PREF_UNIT_TEMPERATURE, + SettingsActivity.PREF_UNIT_WEIGHT -> { setUserInfo(builder) // user info also has temperature unit setUnits(builder) } @@ -953,8 +957,7 @@ class GloryFitSupport() : AbstractBTLESingleDeviceSupport(LOG) { 0x00.toByte() } - val measurementSystem = - GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric") + val temperatureUnit = GBApplication.getPrefs().temperatureUnit val buf = ByteBuffer.allocate(19).order(ByteOrder.BIG_ENDIAN) buf.put(CMD_USER_INFO) @@ -976,7 +979,7 @@ class GloryFitSupport() : AbstractBTLESingleDeviceSupport(LOG) { } ) buf.put(0x00) // ? - buf.put(if (measurementSystem == "metric") 0x02 else 0x01) // 0x02 celsius, 0x01 fahrenheit + buf.put(if (temperatureUnit == TemperatureUnit.CELSIUS) 0x02 else 0x01) // 0x02 celsius, 0x01 fahrenheit buf.put(0x01) // ? buf.put(heartRateAlertLow) @@ -1100,18 +1103,16 @@ class GloryFitSupport() : AbstractBTLESingleDeviceSupport(LOG) { } private fun setUnits(builder: TransactionBuilder) { - val measurementSystem = - GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric") + val distanceUnit = GBApplication.getPrefs().distanceUnit val devicePrefs = getDevicePrefs() - val metric = measurementSystem == "metric" val timeFormat24h = DeviceSettingsPreferenceConst.PREF_TIMEFORMAT_24H == devicePrefs.timeFormat - LOG.debug("Setting units metric={} 24h={}", metric, timeFormat24h) + LOG.debug("Setting units unit={} 24h={}", distanceUnit, timeFormat24h) val buf = ByteBuffer.allocate(3).order(ByteOrder.BIG_ENDIAN) buf.put(CMD_UNITS) - buf.put(if (metric) 0x01 else 0x02) + buf.put(if (distanceUnit == DistanceUnit.METRIC) 0x01 else 0x02) buf.put(if (timeFormat24h) 0x01 else 0x02) builder.write(UUID_CHARACTERISTIC_GLORYFIT_CMD_WRITE, *buf.array()) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hama/fit6900/HamaFit6900DeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hama/fit6900/HamaFit6900DeviceSupport.java index b2421ba49f..bdedadbecb 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hama/fit6900/HamaFit6900DeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hama/fit6900/HamaFit6900DeviceSupport.java @@ -56,6 +56,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService; @@ -115,7 +116,7 @@ public final class HamaFit6900DeviceSupport extends AbstractBTLESingleDeviceSupp sendMessage("update-language+timeformat", makeSetSystemDataMessage()); return; - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + case SettingsActivity.PREF_UNIT_DISTANCE: sendMessage("update-units", makeSetUnitMessage()); return; @@ -424,10 +425,9 @@ public final class HamaFit6900DeviceSupport extends AbstractBTLESingleDeviceSupp } private byte[] makeSetUnitMessage() { - final Prefs prefs = GBApplication.getPrefs(); - String unit = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric"); + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); - return Message.encodeSetUnit(unit.equals("metric")); + return Message.encodeSetUnit(distanceUnit == DistanceUnit.METRIC); } private byte[] makeSetUserInfoMessage() { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java index 1be9d2621a..b87d50d0f1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java @@ -584,7 +584,7 @@ public class HPlusSupport extends AbstractBTLESingleDeviceSupport { try { builder = performInitialized("Sending configuration for option: " + config); switch (config) { - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + case SettingsActivity.PREF_UNIT_DISTANCE: setUnit(builder); break; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java index ecc7c437e7..e5bacd559f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java @@ -118,7 +118,9 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample; import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; import nodomain.freeyourgadget.gadgetbridge.model.Alarm; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.model.SleepState; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.model.WearingState; import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport; @@ -2688,7 +2690,7 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport case PREF_HOURLY_CHIME_END: setHourlyChime(builder); break; - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + case SettingsActivity.PREF_UNIT_DISTANCE: setDistanceUnit(builder); break; case MiBandConst.PREF_SWIPE_UNLOCK: @@ -2872,7 +2874,7 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport return; } - MiBandConst.DistanceUnit unit = HuamiCoordinator.getDistanceUnit(); + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); int tz_offset_hours = SimpleTimeZone.getDefault().getOffset(weatherSpec.getTimestamp() * 1000L) / (1000 * 60 * 60); try { TransactionBuilder builder; @@ -2893,7 +2895,7 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport buf.put(condition); int currentTemp = weatherSpec.getCurrentTemp() - 273; - if (unit == MiBandConst.DistanceUnit.IMPERIAL) { + if (temperatureUnit == TemperatureUnit.FAHRENHEIT) { currentTemp = (int) WeatherUtils.celsiusToFahrenheit(currentTemp); } buf.put((byte) currentTemp); @@ -2978,7 +2980,7 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport int todayMaxTemp = weatherSpec.getTodayMaxTemp() - 273; int todayMinTemp = weatherSpec.getTodayMinTemp() - 273; - if (unit == MiBandConst.DistanceUnit.IMPERIAL) { + if (temperatureUnit == TemperatureUnit.FAHRENHEIT) { todayMaxTemp = (int) WeatherUtils.celsiusToFahrenheit(todayMaxTemp); todayMinTemp = (int) WeatherUtils.celsiusToFahrenheit(todayMinTemp); } @@ -2997,7 +2999,7 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport int forecastMaxTemp = forecast.getMaxTemp() - 273; int forecastMinTemp = forecast.getMinTemp() - 273; - if (unit == MiBandConst.DistanceUnit.IMPERIAL) { + if (temperatureUnit == TemperatureUnit.FAHRENHEIT) { forecastMaxTemp = (int) WeatherUtils.celsiusToFahrenheit(forecastMaxTemp); forecastMinTemp = (int) WeatherUtils.celsiusToFahrenheit(forecastMinTemp); } @@ -3638,9 +3640,9 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport } private void setDistanceUnit(TransactionBuilder builder) { - MiBandConst.DistanceUnit unit = HuamiCoordinator.getDistanceUnit(); - LOG.info("Setting distance unit to " + unit); - if (unit == MiBandConst.DistanceUnit.METRIC) { + DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); + LOG.info("Setting distance unit to {}", distanceUnit); + if (distanceUnit == DistanceUnit.METRIC) { writeToConfiguration(builder, HuamiService.COMMAND_DISTANCE_UNIT_METRIC); } else { writeToConfiguration(builder, HuamiService.COMMAND_DISTANCE_UNIT_IMPERIAL); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsConfigService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsConfigService.java index 98d0a2238d..5c6caf129e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsConfigService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsConfigService.java @@ -73,6 +73,9 @@ import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.miband.DoNotDisturb; import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst; import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; +import nodomain.freeyourgadget.gadgetbridge.model.WeightUnit; import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.ZeppOsMenuType; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.ZeppOsSupport; @@ -162,7 +165,9 @@ public class ZeppOsConfigService extends AbstractZeppOsService { return true; } // Measurement system is global - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: { + case SettingsActivity.PREF_UNIT_DISTANCE: + case SettingsActivity.PREF_UNIT_TEMPERATURE: + case SettingsActivity.PREF_UNIT_WEIGHT: { withTransactionBuilder("set measurement system", this::setMeasurementSystem); return true; } @@ -258,28 +263,20 @@ public class ZeppOsConfigService extends AbstractZeppOsService { } private void setMeasurementSystem(final ZeppOsTransactionBuilder builder) { - final String measurementSystem = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric"); - LOG.info("Setting measurement system to {}", measurementSystem); - - final byte distanceUnit; - final byte temperatureUnit; - final byte weightUnit; - - // FIXME we should be able to configure these separately - if ("metric".equals(measurementSystem)) { - distanceUnit = 0; - temperatureUnit = 0; - weightUnit = 0; - } else { - distanceUnit = 1; - temperatureUnit = 1; - weightUnit = 2; - } + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); + final WeightUnit weightUnit = GBApplication.getPrefs().getWeightUnit(); + LOG.info( + "Setting measurement system - distance={}, temperature={}, weight={}", + distanceUnit, + temperatureUnit, + weightUnit + ); newSetter() - .setByte(ConfigArg.DISTANCE_UNIT, distanceUnit) - .setByte(ConfigArg.TEMPERATURE_UNIT, temperatureUnit) - .setByte(ConfigArg.WEIGHT_UNIT, weightUnit) + .setByte(ConfigArg.DISTANCE_UNIT, encodeByte(ConfigArg.DISTANCE_UNIT, distanceUnit.name().toLowerCase(Locale.ROOT))) + .setByte(ConfigArg.TEMPERATURE_UNIT, encodeByte(ConfigArg.TEMPERATURE_UNIT, temperatureUnit.name().toLowerCase(Locale.ROOT))) + .setByte(ConfigArg.WEIGHT_UNIT, encodeByte(ConfigArg.WEIGHT_UNIT, weightUnit.name().toLowerCase(Locale.ROOT))) .write(builder); } @@ -795,8 +792,12 @@ public class ZeppOsConfigService extends AbstractZeppOsService { return encodeString(TIME_FORMAT_MAP, value); case DND_MODE: return encodeEnum(DND_MODE_MAP, value); + case DISTANCE_UNIT: + return encodeEnum(DISTANCE_UNIT_MAP, value); case TEMPERATURE_UNIT: return encodeEnum(TEMPERATURE_UNIT_MAP, value); + case WEIGHT_UNIT: + return encodeEnum(WEIGHT_UNIT_MAP, value); case NIGHT_MODE_MODE: return encodeString(NIGHT_MODE_MAP, value); case WEARING_DIRECTION_BUTTONS: @@ -1380,10 +1381,18 @@ public class ZeppOsConfigService extends AbstractZeppOsService { case DND_MODE: decoder = b -> decodeEnum(DND_MODE_MAP, b); break; + case DISTANCE_UNIT: + // TODO: This should be per device... + decoder = b -> decodeEnum(DISTANCE_UNIT_MAP, b); + break; case TEMPERATURE_UNIT: // TODO: This should be per device... decoder = b -> decodeEnum(TEMPERATURE_UNIT_MAP, b); break; + case WEIGHT_UNIT: + // TODO: This should be per device... + decoder = b -> decodeEnum(WEIGHT_UNIT_MAP, b); + break; case NIGHT_MODE_MODE: decoder = b -> decodeString(NIGHT_MODE_MAP, b); break; @@ -1534,20 +1543,20 @@ public class ZeppOsConfigService extends AbstractZeppOsService { }}; private static final Map> DISTANCE_UNIT_MAP = new HashMap<>() {{ - put((byte) 0x00, MiBandConst.DistanceUnit.METRIC); - put((byte) 0x01, MiBandConst.DistanceUnit.IMPERIAL); + put((byte) 0x00, DistanceUnit.METRIC); + put((byte) 0x01, DistanceUnit.IMPERIAL); }}; private static final Map> TEMPERATURE_UNIT_MAP = new HashMap<>() {{ - put((byte) 0x00, MiBandConst.DistanceUnit.METRIC); - put((byte) 0x01, MiBandConst.DistanceUnit.IMPERIAL); + put((byte) 0x00, DistanceUnit.METRIC); + put((byte) 0x01, DistanceUnit.IMPERIAL); }}; private static final Map> WEIGHT_UNIT_MAP = new HashMap<>() {{ - put((byte) 0x00, MiBandConst.DistanceUnit.METRIC); - //put((byte) 0x01, MiBandConst.DistanceUnit.IMPERIAL); // jin (500g) - put((byte) 0x02, MiBandConst.DistanceUnit.IMPERIAL); - //put((byte) 0x03, MiBandConst.DistanceUnit.IMPERIAL); // stone (1 stone = 14 pounds) + put((byte) 0x00, WeightUnit.KILOGRAM); + put((byte) 0x01, WeightUnit.JIN); // jin (500g) + put((byte) 0x02, WeightUnit.POUND); + put((byte) 0x03, WeightUnit.STONE); // stone (1 stone = 14 pounds) }}; private static final Map TIME_FORMAT_MAP = new HashMap<>() {{ diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java index 932eb4a584..a2b7c94209 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java @@ -1130,7 +1130,7 @@ public class HuaweiSupportProvider { setDateFormat(); break; } - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + case SettingsActivity.PREF_UNIT_DISTANCE: case DeviceSettingsPreferenceConst.PREF_LANGUAGE: { setLanguageSetting(); break; @@ -1173,7 +1173,7 @@ public class HuaweiSupportProvider { setContinuousSkinTemperatureMeasurement(); break; } - case DeviceSettingsPreferenceConst.PREF_TEMPERATURE_SCALE_CF: { + case SettingsActivity.PREF_UNIT_TEMPERATURE: { setTemperatureUnit(); break; } 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 38d0d3c402..81bbd5f4b7 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 @@ -44,7 +44,6 @@ import de.greenrobot.dao.query.CloseableListIterator; import de.greenrobot.dao.query.QueryBuilder; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.activities.charts.TimestampTranslation; import nodomain.freeyourgadget.gadgetbridge.activities.workouts.charts.DefaultWorkoutCharts; import nodomain.freeyourgadget.gadgetbridge.activities.workouts.entries.ActivitySummaryProgressEntry; @@ -78,6 +77,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.GPSCoordinate; import nodomain.freeyourgadget.gadgetbridge.model.heartratezones.HeartRateZones; import nodomain.freeyourgadget.gadgetbridge.model.heartratezones.HeartRateZonesSpec; import nodomain.freeyourgadget.gadgetbridge.model.workout.WorkoutChart; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.StringUtils; @@ -1199,9 +1199,9 @@ public class HuaweiWorkoutGbParser implements ActivitySummaryParser { ) ); - String measurementSystem = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric"); + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); - byte unitType = (byte) (measurementSystem.equals("metric") ? 0 : 1); + byte unitType = (byte) (distanceUnit == DistanceUnit.METRIC ? 0 : 1); try (CloseableListIterator it = qbPace.build().listIterator()) { int paceWeightSum = 0; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendWeatherCurrentRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendWeatherCurrentRequest.java index f589cddf38..ebfde6d272 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendWeatherCurrentRequest.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendWeatherCurrentRequest.java @@ -19,10 +19,9 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests; import java.util.List; import nodomain.freeyourgadget.gadgetbridge.GBApplication; -import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.Weather; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider; @@ -41,8 +40,8 @@ public class SendWeatherCurrentRequest extends Request { @Override protected List createRequest() throws RequestCreationException { Weather.HuaweiTemperatureFormat temperatureFormat = Weather.HuaweiTemperatureFormat.CELSIUS; - String unit = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); - if (unit.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); + if (temperatureUnit == TemperatureUnit.FAHRENHEIT) temperatureFormat = Weather.HuaweiTemperatureFormat.FAHRENHEIT; try { Short pm25 = null; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendWeatherUnitRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendWeatherUnitRequest.java index 8d88fa63cf..48909b321c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendWeatherUnitRequest.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendWeatherUnitRequest.java @@ -19,10 +19,9 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests; import java.util.List; import nodomain.freeyourgadget.gadgetbridge.GBApplication; -import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.Weather; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider; public class SendWeatherUnitRequest extends Request { @@ -36,8 +35,8 @@ public class SendWeatherUnitRequest extends Request { @Override protected List createRequest() throws RequestCreationException { Weather.HuaweiTemperatureFormat temperatureFormat = Weather.HuaweiTemperatureFormat.CELSIUS; - String unit = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); - if (unit.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); + if (temperatureUnit == TemperatureUnit.FAHRENHEIT) temperatureFormat = Weather.HuaweiTemperatureFormat.FAHRENHEIT; try { return new Weather.WeatherUnitRequest(this.paramsProvider, temperatureFormat).serialize(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SetLanguageSettingRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SetLanguageSettingRequest.java index 485e7d1159..587ddb90b9 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SetLanguageSettingRequest.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SetLanguageSettingRequest.java @@ -24,12 +24,11 @@ import java.util.List; import java.util.Locale; import nodomain.freeyourgadget.gadgetbridge.GBApplication; -import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.LocaleConfig; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.LocaleConfig.SetLanguageSetting; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider; public class SetLanguageSettingRequest extends Request { @@ -62,11 +61,9 @@ public class SetLanguageSettingRequest extends Request { localeString = localeString.replace("_", "-"); } LOG.debug("localeString: {}", localeString); - String measurementString = GBApplication - .getPrefs() - .getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, getContext().getString(R.string.p_unit_metric)); - LOG.debug("measurementString: {}", measurementString); - byte measurement = measurementString.equals("metric") ? LocaleConfig.MeasurementSystem.metric : LocaleConfig.MeasurementSystem.imperial; + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); + LOG.debug("distanceUnit: {}", distanceUnit); + byte measurement = distanceUnit == DistanceUnit.METRIC ? LocaleConfig.MeasurementSystem.metric : LocaleConfig.MeasurementSystem.imperial; try { return new SetLanguageSetting(paramsProvider, localeString.getBytes(StandardCharsets.UTF_8), measurement).serialize(); } catch (HuaweiPacket.CryptoException e) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SetTemperatureUnitSetting.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SetTemperatureUnitSetting.java index 563534ca7b..2f38215630 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SetTemperatureUnitSetting.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SetTemperatureUnitSetting.java @@ -22,9 +22,9 @@ import org.slf4j.LoggerFactory; import java.util.List; import nodomain.freeyourgadget.gadgetbridge.GBApplication; -import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.LocaleConfig; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider; public class SetTemperatureUnitSetting extends Request { @@ -38,8 +38,8 @@ public class SetTemperatureUnitSetting extends Request { @Override protected List createRequest() throws RequestCreationException { - String temperatureScale = GBApplication.getDeviceSpecificSharedPrefs(this.getDevice().getAddress()).getString(DeviceSettingsPreferenceConst.PREF_TEMPERATURE_SCALE_CF, ""); - byte isFahrenheit = (byte) ((temperatureScale.equals("f")) ? 1 : 0); + TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); + byte isFahrenheit = (byte) (temperatureUnit == TemperatureUnit.FAHRENHEIT ? 1 : 0); try { return new LocaleConfig.SetTemperatureUnitSetting(paramsProvider, isFahrenheit).serialize(); } catch (HuaweiPacket.CryptoException e) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/laxasfit/LaxasFitDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/laxasfit/LaxasFitDeviceSupport.java index ee96c27fb4..870b52e142 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/laxasfit/LaxasFitDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/laxasfit/LaxasFitDeviceSupport.java @@ -133,7 +133,9 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather; import nodomain.freeyourgadget.gadgetbridge.model.weather.WeatherMapper; @@ -449,7 +451,7 @@ public class LaxasFitDeviceSupport extends AbstractBTLESingleDeviceSupport { case DeviceSettingsPreferenceConst.PREF_DISPLAY_ON_LIFT_END: setDisplayOnLift(builder); break; - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + case SettingsActivity.PREF_UNIT_DISTANCE: case ActivityUser.PREF_USER_WEIGHT_KG: case ActivityUser.PREF_USER_GENDER: case ActivityUser.PREF_USER_HEIGHT_CM: @@ -508,8 +510,8 @@ public class LaxasFitDeviceSupport extends AbstractBTLESingleDeviceSupport { short todayMax = (short) (weatherSpec.getTodayMaxTemp() - 273); short todayMin = (short) (weatherSpec.getTodayMinTemp() - 273); byte weatherUnit = 0; - String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); - if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) { + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); + if (temperatureUnit == TemperatureUnit.FAHRENHEIT) { todayMax = (short) (todayMax * 1.8f + 32); todayMin = (short) (todayMin * 1.8f + 32); weatherUnit = 1; @@ -683,8 +685,7 @@ public class LaxasFitDeviceSupport extends AbstractBTLESingleDeviceSupport { int weightKg = activityUser.getWeightKg(); byte distanceUnit = UNIT_METRIC; - String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); - if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) { + if (GBApplication.getPrefs().getDistanceUnit() == DistanceUnit.IMPERIAL) { distanceUnit = UNIT_IMPERIAL; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/lefun/LefunDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/lefun/LefunDeviceSupport.java index c63a4c5447..a2413ba34f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/lefun/LefunDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/lefun/LefunDeviceSupport.java @@ -64,6 +64,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; import nodomain.freeyourgadget.gadgetbridge.model.DeviceService; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.RecordedDataTypes; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport; @@ -100,7 +101,7 @@ import nodomain.freeyourgadget.gadgetbridge.util.Prefs; public class LefunDeviceSupport extends AbstractBTLESingleDeviceSupport { private static final Logger LOG = LoggerFactory.getLogger(LefunDeviceSupport.class); - private final List inProgressRequests = Collections.synchronizedList(new ArrayList()); + private final List inProgressRequests = Collections.synchronizedList(new ArrayList<>()); private final Queue queuedRequests = new ConcurrentLinkedQueue<>(); private int lastStepsCount = -1; @@ -338,7 +339,7 @@ public class LefunDeviceSupport extends AbstractBTLESingleDeviceSupport { } break; } - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: { + case SettingsActivity.PREF_UNIT_DISTANCE: { sendUnitsSetting(null); break; } @@ -357,12 +358,10 @@ public class LefunDeviceSupport extends AbstractBTLESingleDeviceSupport { * @param builder the transaction builder to append to */ private void sendUnitsSetting(TransactionBuilder builder) { - Prefs prefs = GBApplication.getPrefs(); - String units = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, - getContext().getString(R.string.p_unit_metric)); + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); byte lefunUnits; - if (getContext().getString(R.string.p_unit_metric).equals(units)) { + if (distanceUnit == DistanceUnit.METRIC) { lefunUnits = SettingsCommand.MEASUREMENT_UNIT_METRIC; } else { lefunUnits = SettingsCommand.MEASUREMENT_UNIT_IMPERIAL; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/lenovo/watchxplus/WatchXPlusDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/lenovo/watchxplus/WatchXPlusDeviceSupport.java index 1680b64414..ee051d0f3a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/lenovo/watchxplus/WatchXPlusDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/lenovo/watchxplus/WatchXPlusDeviceSupport.java @@ -71,6 +71,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.BatteryState; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather; @@ -862,7 +863,7 @@ public class WatchXPlusDeviceSupport extends AbstractBTLESingleDeviceSupport { builder = performInitialized("sendConfig: " + config); switch (config) { // settings from App Settings - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + case SettingsActivity.PREF_UNIT_DISTANCE: setUnitsSettings(); break; case ActivityUser.PREF_USER_STEPS_GOAL: @@ -1094,9 +1095,9 @@ public class WatchXPlusDeviceSupport extends AbstractBTLESingleDeviceSupport { */ private void setUnitsSettings() { int units = 0; - String unitsPref = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); - if (unitsPref.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) { + if (distanceUnit == DistanceUnit.IMPERIAL) { units = 1; LOG.info(" Changed units: imperial "); } else { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/mijia_lywsd/MijiaLywsdSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/mijia_lywsd/MijiaLywsdSupport.java index 951429765c..d368ba98e8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/mijia_lywsd/MijiaLywsdSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/mijia_lywsd/MijiaLywsdSupport.java @@ -32,6 +32,7 @@ import java.util.SimpleTimeZone; import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventBatteryInfo; @@ -46,6 +47,7 @@ import nodomain.freeyourgadget.gadgetbridge.entities.MijiaLywsdRealtimeSample; import nodomain.freeyourgadget.gadgetbridge.entities.User; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.BatteryState; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions; import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService; @@ -153,9 +155,9 @@ public class MijiaLywsdSupport extends AbstractBTLESingleDeviceSupport { builder.read(MijiaLywsdSupport.UUID_TIME); } - private void setTemperatureScale(TransactionBuilder builder, SharedPreferences prefs) { - String scale = prefs.getString(PREF_TEMPERATURE_SCALE_CF, ""); - builder.write(MijiaLywsdSupport.UUID_SCALE, new byte[]{(byte) ("f".equals(scale) ? 0x01 : 0xff)}); + private void setTemperatureScale(TransactionBuilder builder) { + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); + builder.write(MijiaLywsdSupport.UUID_SCALE, (byte) (temperatureUnit == TemperatureUnit.FAHRENHEIT ? 0x01 : 0xff)); } private void setComfortLevel(TransactionBuilder builder, SharedPreferences prefs) { @@ -485,8 +487,8 @@ public class MijiaLywsdSupport extends AbstractBTLESingleDeviceSupport { TransactionBuilder builder = performInitialized("Sending configuration for option: " + config); switch (config) { - case PREF_TEMPERATURE_SCALE_CF: - setTemperatureScale(builder, prefs); + case SettingsActivity.PREF_UNIT_TEMPERATURE: + setTemperatureScale(builder); break; case PREF_MIJIA_LYWSD_COMFORT_TEMPERATURE_LOWER: case PREF_MIJIA_LYWSD_COMFORT_TEMPERATURE_UPPER: diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miscale/MiSmartScaleDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miscale/MiSmartScaleDeviceSupport.java index fd3aef38c9..377321489b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miscale/MiSmartScaleDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miscale/MiSmartScaleDeviceSupport.java @@ -32,6 +32,7 @@ import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventVersionInfo; @@ -39,6 +40,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandService; import nodomain.freeyourgadget.gadgetbridge.devices.miscale.MiScaleSampleProvider; import nodomain.freeyourgadget.gadgetbridge.entities.MiScaleWeightSample; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; +import nodomain.freeyourgadget.gadgetbridge.model.WeightUnit; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions; import nodomain.freeyourgadget.gadgetbridge.service.btle.GattCharacteristic; @@ -188,10 +190,14 @@ public class MiSmartScaleDeviceSupport extends AbstractBTLESingleDeviceSupport { try { TransactionBuilder builder = performInitialized("config"); - if (config.equals(PREF_MISCALE_WEIGHT_UNIT)) { - int unit = Integer.parseInt(prefs.getString(PREF_MISCALE_WEIGHT_UNIT, "0")); - - setConfigValue(builder, CFG_WEIGHT_UNIT, (byte)unit); + if (config.equals(SettingsActivity.PREF_UNIT_WEIGHT)) { + final WeightUnit weightUnit = GBApplication.getPrefs().getWeightUnit(); + final byte unitByte = switch (weightUnit) { + case POUND -> (byte) 1; + case KILOGRAM, STONE -> (byte) 0; + case JIN -> (byte) 2; + }; + setConfigValue(builder, CFG_WEIGHT_UNIT, unitByte); } else if (config.equals(PREF_MISCALE_SMALL_OBJECTS)) { boolean enabled = prefs.getBoolean(PREF_MISCALE_SMALL_OBJECTS, false); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/moyoung/MoyoungDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/moyoung/MoyoungDeviceSupport.java index ed2ad43b36..26c9dffb51 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/moyoung/MoyoungDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/moyoung/MoyoungDeviceSupport.java @@ -104,6 +104,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.BatteryState; import nodomain.freeyourgadget.gadgetbridge.model.CalendarEventSpec; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; import nodomain.freeyourgadget.gadgetbridge.model.DeviceService; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec; import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; @@ -607,16 +608,15 @@ public class MoyoungDeviceSupport extends AbstractBTLESingleDeviceSupport { } private void setMeasurementSystem(TransactionBuilder builder) { - Prefs prefs = GBApplication.getPrefs(); - String unit = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); MoyoungEnumMetricSystem metricSystem = null; - if (unit.equals(getContext().getString(R.string.p_unit_metric))) + if (distanceUnit == DistanceUnit.METRIC) metricSystem = MoyoungEnumMetricSystem.METRIC_SYSTEM; - else if (unit.equals(getContext().getString(R.string.p_unit_imperial))) + else if (distanceUnit == DistanceUnit.IMPERIAL) metricSystem = MoyoungEnumMetricSystem.IMPERIAL_SYSTEM; else - LOG.warn("Invalid unit preference: {}", unit); + LOG.warn("Invalid unit preference: {}", distanceUnit); if (metricSystem != null) { if (builder == null) @@ -1606,7 +1606,7 @@ public class MoyoungDeviceSupport extends AbstractBTLESingleDeviceSupport { sendSetting(getSetting("TIME_SYSTEM"), timeSystem); break; - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + case SettingsActivity.PREF_UNIT_DISTANCE: setMeasurementSystem(null); break; @@ -1854,7 +1854,7 @@ public class MoyoungDeviceSupport extends AbstractBTLESingleDeviceSupport { // case "METRIC_SYSTEM": // MoyoungEnumMetricSystem metricSystem = (MoyoungEnumMetricSystem) value; // if (metricSystem == MoyoungEnumMetricSystem.METRIC_SYSTEM) -// changedProperties.put(DeviceSettingsPreferenceConst.PREF_MEASUREMENTSYSTEM, getContext().getString(R.string.p_unit_metric)); +// changedProperties.put(DeviceSettingsPreferenceConst.PREF_MEASUREMENTSYSTEM, SettingsActivity.PREF_UNIT_METRIC); // else if (metricSystem == MoyoungEnumMetricSystem.IMPERIAL_SYSTEM) // changedProperties.put(DeviceSettingsPreferenceConst.PREF_MEASUREMENTSYSTEM, getContext().getString(R.string.p_unit_imperial)); // else diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java index cc394d59d7..4b12643445 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java @@ -49,6 +49,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; @@ -262,7 +263,7 @@ public class No1F1Support extends AbstractBTLESingleDeviceSupport { try { builder = performInitialized("Sending configuration for option: " + config); switch (config) { - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + case SettingsActivity.PREF_UNIT_DISTANCE: setDisplaySettings(builder); break; } @@ -304,8 +305,8 @@ public class No1F1Support extends AbstractBTLESingleDeviceSupport { 0x00, // 1 - display distance in kilometers, 2 - in miles 0x00 // 1 - display 24-hour clock, 2 - for 12-hour with AM/PM }; - String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, getContext().getString(R.string.p_unit_metric)); - if (units.equals(getContext().getString(R.string.p_unit_metric))) { + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); + if (distanceUnit == DistanceUnit.METRIC) { displayBytes[1] = 1; } else { displayBytes[1] = 2; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleProtocol.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleProtocol.java index 9fd77814f8..185dba7d78 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleProtocol.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleProtocol.java @@ -41,8 +41,6 @@ import java.util.SimpleTimeZone; import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBApplication; -import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventAppInfo; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventAppManagement; @@ -68,6 +66,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec.Action; import nodomain.freeyourgadget.gadgetbridge.model.RecordedDataTypes; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather; import nodomain.freeyourgadget.gadgetbridge.model.weather.WeatherMapper; import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol; @@ -1157,8 +1156,8 @@ public class PebbleProtocol extends GBDeviceProtocol { tomorrowConditionCode = tomorrow.getConditionCode(); } - String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); - if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) { + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); + if (temperatureUnit == TemperatureUnit.FAHRENHEIT) { currentTemp = (short) (currentTemp * 1.8f + 32); todayMax = (short) (todayMax * 1.8f + 32); todayMin = (short) (todayMin * 1.8f + 32); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java index ff5b0ac5b2..dfe2ae9f05 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java @@ -38,11 +38,11 @@ import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.externalevents.AlarmReceiver; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.CalendarEventSpec; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec; import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; @@ -114,8 +114,8 @@ public class PebbleSupport extends AbstractSerialDeviceSupport { // Catch fake URLs first if (uri.equals(Uri.parse("fake://health"))) { getDeviceIOThread().write(pebbleProtocol.encodeActivateHealth(true)); - String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, getContext().getString(R.string.p_unit_metric)); - if (units.equals(getContext().getString(R.string.p_unit_metric))) { + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); + if (distanceUnit == DistanceUnit.METRIC) { pebbleIoThread.write(pebbleProtocol.encodeSetSaneDistanceUnit(true)); } else { pebbleIoThread.write(pebbleProtocol.encodeSetSaneDistanceUnit(false)); @@ -145,8 +145,7 @@ public class PebbleSupport extends AbstractSerialDeviceSupport { while (keysIterator.hasNext()) { String keyStr = keysIterator.next(); Object object = json.get(keyStr); - if (object instanceof JSONArray) { - JSONArray jsonArray = (JSONArray) object; + if (object instanceof JSONArray jsonArray) { byte[] byteArray = new byte[jsonArray.length()]; for (int i = 0; i < jsonArray.length(); i++) { byteArray[i] = ((Integer) jsonArray.get(i)).byteValue(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil_hr/FossilHRWatchAdapter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil_hr/FossilHRWatchAdapter.java index 9c926ca1f5..685e68cdaf 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil_hr/FossilHRWatchAdapter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil_hr/FossilHRWatchAdapter.java @@ -123,6 +123,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceApp; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.model.GenericItem; import nodomain.freeyourgadget.gadgetbridge.model.ItemWithDetails; import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec; @@ -571,10 +572,9 @@ public class FossilHRWatchAdapter extends FossilWatchAdapter { } private void setUnitsConfig() { - Prefs prefs = GBApplication.getPrefs(); - String unit = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); int value = 8; // dont know what this bit means but it was set for me before tampering - if (!unit.equals("metric")) { + if (distanceUnit != DistanceUnit.METRIC) { value |= (4 | 1); // temperature and distance } queueWrite( @@ -1939,7 +1939,7 @@ public class FossilHRWatchAdapter extends FossilWatchAdapter { saveRawActivityFiles = getDeviceSpecificPreferences().getBoolean("save_raw_activity_files", false); break; } - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + case SettingsActivity.PREF_UNIT_DISTANCE: setUnitsConfig(); break; case DeviceSettingsPreferenceConst.PREF_HYBRID_HR_ACTIVITY_RECOGNITION_RUNNING_ENABLED: diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/tlw64/TLW64Support.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/tlw64/TLW64Support.java index 2dcca1c25e..03c2452da8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/tlw64/TLW64Support.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/tlw64/TLW64Support.java @@ -17,6 +17,8 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.tlw64; +import static org.apache.commons.lang3.math.NumberUtils.min; + import android.bluetooth.BluetoothGatt; import android.bluetooth.BluetoothGattCharacteristic; import android.text.format.DateFormat; @@ -35,7 +37,6 @@ import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; @@ -49,6 +50,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; @@ -56,8 +58,6 @@ import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol; import nodomain.freeyourgadget.gadgetbridge.util.AlarmUtils; import nodomain.freeyourgadget.gadgetbridge.util.GB; -import static org.apache.commons.lang3.math.NumberUtils.min; - public class TLW64Support extends AbstractBTLESingleDeviceSupport { private static final Logger LOG = LoggerFactory.getLogger(TLW64Support.class); @@ -66,7 +66,7 @@ public class TLW64Support extends AbstractBTLESingleDeviceSupport { private final GBDeviceEventVersionInfo versionCmd = new GBDeviceEventVersionInfo(); public BluetoothGattCharacteristic ctrlCharacteristic = null; public BluetoothGattCharacteristic notifyCharacteristic = null; - private List samples = new ArrayList<>(); + private final List samples = new ArrayList<>(); private byte crc = 0; private int firstTimestamp = 0; @@ -337,8 +337,8 @@ public class TLW64Support extends AbstractBTLESingleDeviceSupport { (byte) 0x00, // 1 - display distance in kilometers, 2 - in miles (byte) 0x00 // 1 - display 24-hour clock, 2 - for 12-hour with AM/PM }; - String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, getContext().getString(R.string.p_unit_metric)); - if (units.equals(getContext().getString(R.string.p_unit_metric))) { + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); + if (distanceUnit == DistanceUnit.METRIC) { displayBytes[1] = 1; } else { displayBytes[1] = 2; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/withingssteelhr/WithingsSteelHRDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/withingssteelhr/WithingsSteelHRDeviceSupport.java index 45ee632e32..876bb4e3fc 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/withingssteelhr/WithingsSteelHRDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/withingssteelhr/WithingsSteelHRDeviceSupport.java @@ -47,12 +47,12 @@ import java.util.List; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationType; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport; @@ -107,7 +107,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.withingssteelhr.comm import nodomain.freeyourgadget.gadgetbridge.service.devices.withingssteelhr.communication.notification.NotificationProvider; import nodomain.freeyourgadget.gadgetbridge.service.devices.withingssteelhr.communication.notification.NotificationSource; import nodomain.freeyourgadget.gadgetbridge.util.GB; -import nodomain.freeyourgadget.gadgetbridge.util.Prefs; +import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs; import nodomain.freeyourgadget.gadgetbridge.util.StringUtils; import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_LANGUAGE; @@ -755,9 +755,9 @@ public class WithingsSteelHRDeviceSupport extends AbstractBTLESingleDeviceSuppor } private short getUnit() { - String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); - if (units.equals(GBApplication.getContext().getString(R.string.p_unit_metric))) { + if (distanceUnit == DistanceUnit.METRIC) { return UserUnitConstants.UNIT_KM; } else { return UserUnitConstants.UNIT_MILES; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiWeatherService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiWeatherService.java index 30fa61887e..bf20a04d60 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiWeatherService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiWeatherService.java @@ -35,9 +35,9 @@ import java.util.Locale; import java.util.Set; import nodomain.freeyourgadget.gadgetbridge.GBApplication; -import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.XiaomiWeatherConditions; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.proto.xiaomi.XiaomiProto; @@ -237,7 +237,7 @@ public class XiaomiWeatherService extends AbstractXiaomiService { // TODO add preference for warning notifications (if that has any effect at all) switch (config) { - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + case SettingsActivity.PREF_UNIT_TEMPERATURE: setMeasurementSystem(); return true; } @@ -474,16 +474,14 @@ public class XiaomiWeatherService extends AbstractXiaomiService { } private void setMeasurementSystem() { - final String metricScale = getSupport().getContext().getString(R.string.p_unit_metric); - final String imperialScale = getSupport().getContext().getString(R.string.p_unit_imperial); - final String measurementSystem = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, metricScale); - LOG.info("Setting measurement system to {}", measurementSystem); + final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit(); + LOG.info("Setting temperature unit to {}", temperatureUnit); int unitValue = TEMPERATURE_SCALE_CELSIUS; - if (measurementSystem.equals(imperialScale)) { + if (temperatureUnit == TemperatureUnit.FAHRENHEIT) { unitValue = TEMPERATURE_SCALE_FAHRENHEIT; - } else if (!measurementSystem.equals(metricScale)) { + } else if (temperatureUnit != TemperatureUnit.CELSIUS) { LOG.warn("Unknown measurement system, defaulting to celsius"); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/yawell/ring/YawellRingDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/yawell/ring/YawellRingDeviceSupport.java index 4d9907a050..39226d880a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/yawell/ring/YawellRingDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/yawell/ring/YawellRingDeviceSupport.java @@ -55,6 +55,7 @@ import nodomain.freeyourgadget.gadgetbridge.entities.ColmiHeartRateSample; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; import nodomain.freeyourgadget.gadgetbridge.model.BatteryState; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions; import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService; @@ -523,7 +524,7 @@ public class YawellRingDeviceSupport extends AbstractBTLESingleDeviceSupport { public void onSendConfiguration(String config) { final Prefs prefs = getDevicePrefs(); switch (config) { - case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + case SettingsActivity.PREF_UNIT_DISTANCE: setUserPreferences(); break; case DeviceSettingsPreferenceConst.PREF_SPO2_ALL_DAY_MONITORING: @@ -601,9 +602,8 @@ public class YawellRingDeviceSupport extends AbstractBTLESingleDeviceSupport { } private void setUserPreferences() { - final Prefs prefs = getDevicePrefs(); final ActivityUser user = new ActivityUser(); - final String measurementSystem = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric"); + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); byte userGender; switch (user.getGender()) { case ActivityUser.GENDER_FEMALE: @@ -620,7 +620,7 @@ public class YawellRingDeviceSupport extends AbstractBTLESingleDeviceSupport { YawellRingConstants.CMD_PREFERENCES, YawellRingConstants.PREF_WRITE, 0x00, // 24h format, 0x01 is 12h format - (byte) ("metric".equals(measurementSystem) ? 0x00 : 0x01), + (byte) (distanceUnit == DistanceUnit.METRIC ? 0x00 : 0x01), userGender, (byte) user.getAge(), (byte) user.getHeightCm(), diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/FormatUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/FormatUtils.java index f04483cd0d..e59445ec86 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/FormatUtils.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/FormatUtils.java @@ -22,7 +22,7 @@ import java.text.DecimalFormatSymbols; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; public class FormatUtils { @@ -45,8 +45,8 @@ public class FormatUtils { distanceFormatted = distanceMeters / 1000; unit = GBApplication.getContext().getString(R.string.distance_format_kilometers); } - String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric)); - if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) { + final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit(); + if (distanceUnit == DistanceUnit.IMPERIAL) { unit = GBApplication.getContext().getString(R.string.distance_format_feet); distanceFormatted = distanceFeet; if (distanceFeet > 6000) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBPrefs.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBPrefs.java index 390ccfa809..b137df6b47 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBPrefs.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBPrefs.java @@ -35,10 +35,14 @@ import org.slf4j.LoggerFactory; import java.text.ParseException; import java.time.LocalTime; import java.util.Date; +import java.util.Locale; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; +import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit; +import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit; +import nodomain.freeyourgadget.gadgetbridge.model.WeightUnit; public class GBPrefs extends Prefs { private static final Logger LOG = LoggerFactory.getLogger(GBPrefs.class); @@ -196,8 +200,31 @@ public class GBPrefs extends Prefs { return getLocalTime("notification_times_end", "22:00"); } - public boolean isMetricUnits() { - return getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric").equals("metric"); + public TemperatureUnit getTemperatureUnit() { + try { + return TemperatureUnit.valueOf(getString(SettingsActivity.PREF_UNIT_TEMPERATURE, "celsius").toUpperCase(Locale.ROOT)); + } catch (final Exception e) { + LOG.error("Error reading temperature unit preference", e); + } + return TemperatureUnit.CELSIUS; + } + + public WeightUnit getWeightUnit() { + try { + return WeightUnit.valueOf(getString(SettingsActivity.PREF_UNIT_WEIGHT, "kilogram").toUpperCase(Locale.ROOT)); + } catch (final Exception e) { + LOG.error("Error reading weight unit preference", e); + } + return WeightUnit.KILOGRAM; + } + + public DistanceUnit getDistanceUnit() { + try { + return DistanceUnit.valueOf(getString(SettingsActivity.PREF_UNIT_DISTANCE, "metric").toUpperCase(Locale.ROOT)); + } catch (final Exception e) { + LOG.error("Error reading distance unit preference", e); + } + return DistanceUnit.METRIC; } public boolean syncTime() { diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 74b1108cba..b60d33891a 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -2654,8 +2654,8 @@ - @string/p_unit_metric - @string/p_unit_imperial + metric + imperial @@ -4703,18 +4703,6 @@ 5 - - @string/miscale_weight_unit_metric - @string/miscale_weight_unit_imperial - @string/miscale_weight_unit_chinese - - - - 0 - 1 - 2 - - de.dennisguse.opentracks de.dennisguse.opentracks.playstore @@ -5087,13 +5075,13 @@ white - + @string/temperature_scale_celsius @string/temperature_scale_fahrenheit - - c - f + + celsius + fahrenheit diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 673ba03c8f..8480784813 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -481,6 +481,9 @@ Units Nautical units Display speed and distance units in knots / miles for nautical activities + Distance unit + Temperature unit + Weight unit Time format Screen on duration Secondary goal diff --git a/app/src/main/res/values/values.xml b/app/src/main/res/values/values.xml index 8e4effcbc8..d7dc069ba8 100644 --- a/app/src/main/res/values/values.xml +++ b/app/src/main/res/values/values.xml @@ -87,9 +87,6 @@ normal sensitive - metric - imperial - auto 24h am/pm diff --git a/app/src/main/res/xml/devicesettings_mismartscale.xml b/app/src/main/res/xml/devicesettings_mismartscale.xml index 767b53330f..e4d4c44cf0 100644 --- a/app/src/main/res/xml/devicesettings_mismartscale.xml +++ b/app/src/main/res/xml/devicesettings_mismartscale.xml @@ -1,13 +1,5 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/xml/devicesettings_weight_scale_unit.xml b/app/src/main/res/xml/devicesettings_weight_scale_unit.xml deleted file mode 100644 index d56394da88..0000000000 --- a/app/src/main/res/xml/devicesettings_weight_scale_unit.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index b2734f5d6d..a0f429eb59 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -71,21 +71,6 @@ android:title="@string/pref_title_language" android:icon="@drawable/ic_translate" app:useSimpleSummaryProvider="true" /> - - + + + + + + +