Split measurement system units

This commit is contained in:
José Rebelo
2026-03-24 22:16:13 +00:00
parent 8a16ab2f66
commit 00dd7cb99b
63 changed files with 487 additions and 391 deletions
@@ -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;
});
}
@@ -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<TemperatureChartFragment.TemperatureChartsData> {
protected static final Logger LOG = LoggerFactory.getLogger(TemperatureChartFragment.class);
@@ -61,7 +62,7 @@ public class TemperatureChartFragment extends AbstractChartFragment<TemperatureC
protected final int TOTAL_DAYS = getRangeDays();
private final boolean isMetric = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric").equals("metric");
private final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
@Override
protected void init() {
@@ -93,6 +94,7 @@ public class TemperatureChartFragment extends AbstractChartFragment<TemperatureC
mTemperatureChart.getXAxis().setAvoidFirstLastClipping(true);
// Using approximately the range of survivable body-temperatures (in celsius), rounded to multiples of 5
final boolean isMetric = temperatureUnit == TemperatureUnit.CELSIUS;
mTemperatureChart.getAxisLeft().setAxisMinimum((float) (isMetric ? 30f : celsiusToFahrenheit(30d)));
mTemperatureChart.getAxisLeft().setAxisMaximum((float) (isMetric ? 45f : celsiusToFahrenheit(45f)));
@@ -181,6 +183,7 @@ public class TemperatureChartFragment extends AbstractChartFragment<TemperatureC
TimestampTranslation tsTranslation = new TimestampTranslation();
List<Entry> entries = new ArrayList<>();
long firstTs = 0;
final boolean isMetric = temperatureUnit == TemperatureUnit.CELSIUS;
for (TemperatureSample sample : samples) {
int timestamp_in_seconds = (int) (sample.getTimestamp() / 1000L);
@@ -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<TemperatureDailyFragment.TemperatureChartData> {
@@ -69,7 +69,7 @@ public class TemperatureDailyFragment extends AbstractChartFragment<TemperatureD
private TextView tempMaximum;
private LineChart tempLineChart;
private final boolean isMetric = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric").equals("metric");
private final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -192,9 +192,11 @@ public class TemperatureDailyFragment extends AbstractChartFragment<TemperatureD
for (int i =0; i < samples.size(); i++) {
TemperatureSample sample = samples.get(i);
int timestamp_in_seconds = (int) (sample.getTimestamp() / 1000L);
final float temperature = isMetric ? sample.getTemperature() : celsiusToFahrenheit(sample.getTemperature());
lineEntries.add(new Entry(tsTranslation.shorten(timestamp_in_seconds), temperature));
accumulator.add(temperature);
final float temperatureValue = temperatureUnit == TemperatureUnit.CELSIUS ?
sample.getTemperature() :
(float) ((sample.getTemperature() * 1.8) + 32);
lineEntries.add(new Entry(tsTranslation.shorten(timestamp_in_seconds), temperatureValue));
accumulator.add(temperatureValue);
}
LineDataSet dataSet = new LineDataSet(lineEntries, "Temperature");
@@ -211,12 +213,12 @@ public class TemperatureDailyFragment extends AbstractChartFragment<TemperatureD
final double minimum = accumulator.getCount() > 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);
@@ -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<WeightChartFragme
private int colorSecondaryText;
private int totalDays;
private boolean imperialUnits;
private WeightUnit weightUnit = WeightUnit.KILOGRAM;
private int weightTargetKg;
private LineChart chart;
@@ -84,12 +81,7 @@ public class WeightChartFragment extends AbstractChartFragment<WeightChartFragme
else
totalDays = 7;
String unitSystem = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, getString(R.string.p_unit_metric));
if (unitSystem.equals(getString(R.string.p_unit_imperial)))
imperialUnits = true;
else
imperialUnits = false;
weightUnit = prefs.getWeightUnit();
weightTargetKg = prefs.getInt(ActivityUser.PREF_USER_GOAL_WEIGHT_KG, ActivityUser.defaultUserGoalWeightKg);
}
@@ -205,17 +197,11 @@ public class WeightChartFragment extends AbstractChartFragment<WeightChartFragme
}
private float weightFromKg(float weight) {
// Convert to lbs
if (imperialUnits)
weight *= 2.2046226f;
return weight;
return (float) WeightUnit.Companion.convertWeight(weight, weightUnit);
}
private String formatWeight(float weight) {
int weightString = imperialUnits ? R.string.weight_lbs : R.string.weight_kg;
return getString(weightString, weight);
return WeightUnit.Companion.formatWeight(requireContext(), weight, weightUnit);
}
protected static class WeightChartsData extends DefaultChartsData<LineData> {
@@ -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";
@@ -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);
@@ -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
@@ -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;
@@ -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,
};
}
@@ -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<out WeightSample?> {
@@ -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) {
@@ -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;
@@ -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);
@@ -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<Integer> developer = deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.DEVELOPER);
@@ -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);
@@ -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,
};
}
@@ -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 {
@@ -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
@@ -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);
@@ -0,0 +1,6 @@
package nodomain.freeyourgadget.gadgetbridge.model;
public enum DistanceUnit {
METRIC,
IMPERIAL,
}
@@ -0,0 +1,6 @@
package nodomain.freeyourgadget.gadgetbridge.model;
public enum TemperatureUnit {
CELSIUS,
FAHRENHEIT,
}
@@ -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)
}
}
}
}
}
@@ -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();
@@ -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<Device> 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);
}
}
@@ -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) {
@@ -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);
}
@@ -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<CalendarEvent> 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.
@@ -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();
@@ -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;
@@ -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())
@@ -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() {
@@ -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;
}
@@ -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);
@@ -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<Byte, Enum<?>> 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<Byte, Enum<?>> 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<Byte, Enum<?>> 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<Byte, String> TIME_FORMAT_MAP = new HashMap<>() {{
@@ -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;
}
@@ -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<HuaweiWorkoutPaceSample> it = qbPace.build().listIterator()) {
int paceWeightSum = 0;
@@ -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<byte[]> 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;
@@ -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<byte[]> 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();
@@ -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) {
@@ -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<byte[]> 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) {
@@ -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;
}
@@ -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<Request> inProgressRequests = Collections.synchronizedList(new ArrayList<Request>());
private final List<Request> inProgressRequests = Collections.synchronizedList(new ArrayList<>());
private final Queue<Request> 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;
@@ -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 {
@@ -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:
@@ -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);
@@ -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
@@ -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;
@@ -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);
@@ -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();
@@ -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:
@@ -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<TLW64ActivitySample> samples = new ArrayList<>();
private final List<TLW64ActivitySample> 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;
@@ -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;
@@ -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");
}
@@ -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(),
@@ -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) {
@@ -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() {
+6 -18
View File
@@ -2654,8 +2654,8 @@
</string-array>
<string-array name="pref_values_unit_system">
<item>@string/p_unit_metric</item>
<item>@string/p_unit_imperial</item>
<item>metric</item>
<item>imperial</item>
</string-array>
<string-array name="pref_timeformat_entries">
@@ -4703,18 +4703,6 @@
<item>5</item>
</string-array>
<string-array name="miscale_weight_unit_names">
<item>@string/miscale_weight_unit_metric</item>
<item>@string/miscale_weight_unit_imperial</item>
<item>@string/miscale_weight_unit_chinese</item>
</string-array>
<string-array name="miscale_weight_unit_values">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
<string-array name="fitness_tracking_apps_package_names">
<item>de.dennisguse.opentracks</item>
<item>de.dennisguse.opentracks.playstore</item>
@@ -5087,13 +5075,13 @@
<item>white</item>
</string-array>
<string-array name="temperature_scales_cf">
<string-array name="temperature_scales">
<item>@string/temperature_scale_celsius</item>
<item>@string/temperature_scale_fahrenheit</item>
</string-array>
<string-array name="temperature_scales_cf_values">
<item>c</item>
<item>f</item>
<string-array name="temperature_scales_values">
<item>celsius</item>
<item>fahrenheit</item>
</string-array>
<string-array name="femometer_measurement_mode">
+3
View File
@@ -481,6 +481,9 @@
<string name="pref_title_unit_system">Units</string>
<string name="pref_title_nautical_units">Nautical units</string>
<string name="pref_summary_nautical_units">Display speed and distance units in knots / miles for nautical activities</string>
<string name="pref_title_unit_distance">Distance unit</string>
<string name="pref_title_unit_temperature">Temperature unit</string>
<string name="pref_title_unit_weight">Weight unit</string>
<string name="pref_title_timeformat">Time format</string>
<string name="pref_title_screentime">Screen on duration</string>
<string name="pref_title_goal_secondary">Secondary goal</string>
-3
View File
@@ -87,9 +87,6 @@
<item name="p_normal" type="string">normal</item>
<item name="p_sensitive" type="string">sensitive</item>
<item name="p_unit_metric" type="string">metric</item>
<item name="p_unit_imperial" type="string">imperial</item>
<item name="p_timeformat_auto" type="string">auto</item>
<item name="p_timeformat_24h" type="string">24h</item>
<item name="p_timeformat_am_pm" type="string">am/pm</item>
@@ -1,13 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference
android:defaultValue="0"
android:entries="@array/miscale_weight_unit_names"
android:entryValues="@array/miscale_weight_unit_values"
android:icon="@drawable/ic_calculate"
android:key="pref_miscale_weight_unit"
android:title="@string/miscale_weight_unit_title"
android:summary="@string/miscale_weight_unit_summary" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_pressure"
@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference
android:icon="@drawable/ic_thermometer"
android:key="temperature_scale_cf"
android:title="@string/temperature_scale_cf"
android:entries="@array/temperature_scales_cf"
android:entryValues="@array/temperature_scales_cf_values"
android:summary="@string/temperature_scale_cf_summary" />
</PreferenceScreen>
@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ListPreference
android:entries="@array/weight_scale_units"
android:entryValues="@array/weight_scale_values"
android:icon="@drawable/ic_weight"
android:key="pref_weight_scale_unit"
android:title="@string/pref_header_display"
app:useSimpleSummaryProvider="true" />
</androidx.preference.PreferenceScreen>
+36 -15
View File
@@ -71,21 +71,6 @@
android:title="@string/pref_title_language"
android:icon="@drawable/ic_translate"
app:useSimpleSummaryProvider="true" />
<ListPreference
android:defaultValue="metric"
android:entries="@array/pref_entries_unit_system"
android:entryValues="@array/pref_values_unit_system"
android:key="measurement_system"
android:title="@string/pref_title_unit_system"
android:icon="@drawable/ic_straighten"
app:useSimpleSummaryProvider="true" />
<SwitchPreferenceCompat
android:defaultValue="true"
android:key="units_nautical"
android:layout="@layout/preference_checkbox"
android:summary="@string/pref_summary_nautical_units"
android:icon="@drawable/ic_sailing"
android:title="@string/pref_title_nautical_units" />
<PreferenceScreen
android:key="pref_screen_rtl"
android:title="@string/preferences_rtl_settings"
@@ -115,6 +100,42 @@
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory
android:key="pref_key_units"
android:title="@string/pref_title_unit_system">
<ListPreference
android:defaultValue="metric"
android:entries="@array/pref_entries_unit_system"
android:entryValues="@array/pref_values_unit_system"
android:key="unit_distance"
android:title="@string/pref_title_unit_distance"
android:icon="@drawable/ic_straighten"
app:useSimpleSummaryProvider="true" />
<ListPreference
android:defaultValue="metric"
android:entries="@array/temperature_scales"
android:entryValues="@array/temperature_scales_values"
android:key="unit_temperature"
android:title="@string/pref_title_unit_temperature"
android:icon="@drawable/ic_temperature"
app:useSimpleSummaryProvider="true" />
<ListPreference
android:defaultValue="metric"
android:entries="@array/weight_scale_units"
android:entryValues="@array/weight_scale_values"
android:key="unit_weight"
android:title="@string/pref_title_unit_weight"
android:icon="@drawable/ic_weight"
app:useSimpleSummaryProvider="true" />
<SwitchPreferenceCompat
android:defaultValue="true"
android:key="units_nautical"
android:layout="@layout/preference_checkbox"
android:summary="@string/pref_summary_nautical_units"
android:icon="@drawable/ic_sailing"
android:title="@string/pref_title_nautical_units" />
</PreferenceCategory>
<PreferenceCategory
android:key="pref_key_datetime"
android:title="@string/pref_header_datetime">