mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Split measurement system units
This commit is contained in:
+21
-5
@@ -76,8 +76,10 @@ import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
||||||
|
|
||||||
public class SettingsActivity extends AbstractSettingsActivityV2 {
|
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_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
|
@Override
|
||||||
protected PreferenceFragmentCompat newFragment() {
|
protected PreferenceFragmentCompat newFragment() {
|
||||||
@@ -238,10 +240,24 @@ public class SettingsActivity extends AbstractSettingsActivityV2 {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
final Preference unit = findPreference(PREF_MEASUREMENT_SYSTEM);
|
final Preference unitDistance = findPreference(PREF_UNIT_DISTANCE);
|
||||||
if (unit != null) {
|
if (unitDistance != null) {
|
||||||
unit.setOnPreferenceChangeListener((preference, newVal) -> {
|
unitDistance.setOnPreferenceChangeListener((preference, newVal) -> {
|
||||||
invokeLater(() -> GBApplication.deviceService().onSendConfiguration(PREF_MEASUREMENT_SYSTEM));
|
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;
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-1
@@ -50,6 +50,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.devices.TimeSampleProvider;
|
import nodomain.freeyourgadget.gadgetbridge.devices.TimeSampleProvider;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureSample;
|
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureSample;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit;
|
||||||
|
|
||||||
public class TemperatureChartFragment extends AbstractChartFragment<TemperatureChartFragment.TemperatureChartsData> {
|
public class TemperatureChartFragment extends AbstractChartFragment<TemperatureChartFragment.TemperatureChartsData> {
|
||||||
protected static final Logger LOG = LoggerFactory.getLogger(TemperatureChartFragment.class);
|
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();
|
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
|
@Override
|
||||||
protected void init() {
|
protected void init() {
|
||||||
@@ -93,6 +94,7 @@ public class TemperatureChartFragment extends AbstractChartFragment<TemperatureC
|
|||||||
mTemperatureChart.getXAxis().setAvoidFirstLastClipping(true);
|
mTemperatureChart.getXAxis().setAvoidFirstLastClipping(true);
|
||||||
|
|
||||||
// Using approximately the range of survivable body-temperatures (in celsius), rounded to multiples of 5
|
// 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().setAxisMinimum((float) (isMetric ? 30f : celsiusToFahrenheit(30d)));
|
||||||
mTemperatureChart.getAxisLeft().setAxisMaximum((float) (isMetric ? 45f : celsiusToFahrenheit(45f)));
|
mTemperatureChart.getAxisLeft().setAxisMaximum((float) (isMetric ? 45f : celsiusToFahrenheit(45f)));
|
||||||
|
|
||||||
@@ -181,6 +183,7 @@ public class TemperatureChartFragment extends AbstractChartFragment<TemperatureC
|
|||||||
TimestampTranslation tsTranslation = new TimestampTranslation();
|
TimestampTranslation tsTranslation = new TimestampTranslation();
|
||||||
List<Entry> entries = new ArrayList<>();
|
List<Entry> entries = new ArrayList<>();
|
||||||
long firstTs = 0;
|
long firstTs = 0;
|
||||||
|
final boolean isMetric = temperatureUnit == TemperatureUnit.CELSIUS;
|
||||||
|
|
||||||
for (TemperatureSample sample : samples) {
|
for (TemperatureSample sample : samples) {
|
||||||
int timestamp_in_seconds = (int) (sample.getTimestamp() / 1000L);
|
int timestamp_in_seconds = (int) (sample.getTimestamp() / 1000L);
|
||||||
|
|||||||
+9
-7
@@ -45,12 +45,12 @@ import java.util.Locale;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.HeartRateUtils;
|
import nodomain.freeyourgadget.gadgetbridge.activities.HeartRateUtils;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.TimeSampleProvider;
|
import nodomain.freeyourgadget.gadgetbridge.devices.TimeSampleProvider;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureSample;
|
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureSample;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.Accumulator;
|
import nodomain.freeyourgadget.gadgetbridge.util.Accumulator;
|
||||||
|
|
||||||
public class TemperatureDailyFragment extends AbstractChartFragment<TemperatureDailyFragment.TemperatureChartData> {
|
public class TemperatureDailyFragment extends AbstractChartFragment<TemperatureDailyFragment.TemperatureChartData> {
|
||||||
@@ -69,7 +69,7 @@ public class TemperatureDailyFragment extends AbstractChartFragment<TemperatureD
|
|||||||
private TextView tempMaximum;
|
private TextView tempMaximum;
|
||||||
private LineChart tempLineChart;
|
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
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
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++) {
|
for (int i =0; i < samples.size(); i++) {
|
||||||
TemperatureSample sample = samples.get(i);
|
TemperatureSample sample = samples.get(i);
|
||||||
int timestamp_in_seconds = (int) (sample.getTimestamp() / 1000L);
|
int timestamp_in_seconds = (int) (sample.getTimestamp() / 1000L);
|
||||||
final float temperature = isMetric ? sample.getTemperature() : celsiusToFahrenheit(sample.getTemperature());
|
final float temperatureValue = temperatureUnit == TemperatureUnit.CELSIUS ?
|
||||||
lineEntries.add(new Entry(tsTranslation.shorten(timestamp_in_seconds), temperature));
|
sample.getTemperature() :
|
||||||
accumulator.add(temperature);
|
(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");
|
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 minimum = accumulator.getCount() > 0 ? accumulator.getMin() : -1;
|
||||||
final double maximum = accumulator.getCount() > 0 ? accumulator.getMax() : -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) : "-");
|
tempAverage.setText(average > 0 ? String.format(Locale.ROOT, "%.1f %s", average, unit) : "-");
|
||||||
tempMinimum.setText(minimum > 0 ? String.format(Locale.ROOT, "%.1f %s", minimum, 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) : "-");
|
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) {
|
if (minimum > 0) {
|
||||||
long axisMin = Math.max(Math.round(minimum) - axisGap, 0);
|
long axisMin = Math.max(Math.round(minimum) - axisGap, 0);
|
||||||
tempLineChart.getAxisLeft().setAxisMinimum(axisMin);
|
tempLineChart.getAxisLeft().setAxisMinimum(axisMin);
|
||||||
|
|||||||
+5
-19
@@ -22,8 +22,6 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
|
|
||||||
import com.github.mikephil.charting.animation.Easing;
|
import com.github.mikephil.charting.animation.Easing;
|
||||||
import com.github.mikephil.charting.charts.Chart;
|
import com.github.mikephil.charting.charts.Chart;
|
||||||
import com.github.mikephil.charting.charts.LineChart;
|
import com.github.mikephil.charting.charts.LineChart;
|
||||||
@@ -38,19 +36,18 @@ import com.github.mikephil.charting.formatter.ValueFormatter;
|
|||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.GregorianCalendar;
|
import java.util.GregorianCalendar;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.TimeSampleProvider;
|
import nodomain.freeyourgadget.gadgetbridge.devices.TimeSampleProvider;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.WeightSample;
|
import nodomain.freeyourgadget.gadgetbridge.model.WeightSample;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.WeightUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils;
|
import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs;
|
import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs;
|
||||||
|
|
||||||
@@ -59,7 +56,7 @@ public class WeightChartFragment extends AbstractChartFragment<WeightChartFragme
|
|||||||
private int colorSecondaryText;
|
private int colorSecondaryText;
|
||||||
|
|
||||||
private int totalDays;
|
private int totalDays;
|
||||||
private boolean imperialUnits;
|
private WeightUnit weightUnit = WeightUnit.KILOGRAM;
|
||||||
private int weightTargetKg;
|
private int weightTargetKg;
|
||||||
|
|
||||||
private LineChart chart;
|
private LineChart chart;
|
||||||
@@ -84,12 +81,7 @@ public class WeightChartFragment extends AbstractChartFragment<WeightChartFragme
|
|||||||
else
|
else
|
||||||
totalDays = 7;
|
totalDays = 7;
|
||||||
|
|
||||||
String unitSystem = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, getString(R.string.p_unit_metric));
|
weightUnit = prefs.getWeightUnit();
|
||||||
|
|
||||||
if (unitSystem.equals(getString(R.string.p_unit_imperial)))
|
|
||||||
imperialUnits = true;
|
|
||||||
else
|
|
||||||
imperialUnits = false;
|
|
||||||
|
|
||||||
weightTargetKg = prefs.getInt(ActivityUser.PREF_USER_GOAL_WEIGHT_KG, ActivityUser.defaultUserGoalWeightKg);
|
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) {
|
private float weightFromKg(float weight) {
|
||||||
// Convert to lbs
|
return (float) WeightUnit.Companion.convertWeight(weight, weightUnit);
|
||||||
if (imperialUnits)
|
|
||||||
weight *= 2.2046226f;
|
|
||||||
|
|
||||||
return weight;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String formatWeight(float weight) {
|
private String formatWeight(float weight) {
|
||||||
int weightString = imperialUnits ? R.string.weight_lbs : R.string.weight_kg;
|
return WeightUnit.Companion.formatWeight(requireContext(), weight, weightUnit);
|
||||||
|
|
||||||
return getString(weightString, weight);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static class WeightChartsData extends DefaultChartsData<LineData> {
|
protected static class WeightChartsData extends DefaultChartsData<LineData> {
|
||||||
|
|||||||
-4
@@ -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_COLOR_BLACKLIST = "calendar_sync_color_blacklist";
|
||||||
public static final String PREF_CALENDAR_SYNC_EVENT_REMINDERS = "calendar_sync_event_reminders";
|
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_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_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_1_FUNCTION_SHORT = "button_1_function_short";
|
||||||
public static final String PREF_BUTTON_2_FUNCTION_SHORT = "button_2_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_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_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_MISCALE_SMALL_OBJECTS = "pref_miscale_small_objects";
|
||||||
|
|
||||||
public static final String PREF_MIJIA_LYWSD_COMFORT_CHARACTERISTIC_LENGTH = "pref_mijia_lywsd_comfort_characteristic_length";
|
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_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_FAKE_ANDROID_ID = "fake_android_id";
|
||||||
|
|
||||||
public static final String PREF_HEARTRATE_AUTOMATIC_ENABLE = "heartrate_automatic_enable";
|
public static final String PREF_HEARTRATE_AUTOMATIC_ENABLE = "heartrate_automatic_enable";
|
||||||
|
|||||||
-8
@@ -431,11 +431,6 @@ public class DeviceSpecificSettingsFragment extends AbstractPreferenceFragment i
|
|||||||
DeviceSettingsUtils.sortListPreference(transliterationPreference, false);
|
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);
|
String disconnectNotificationState = prefs.getString(PREF_DISCONNECT_NOTIFICATION, PREF_DO_NOT_DISTURB_OFF);
|
||||||
boolean disconnectNotificationScheduled = disconnectNotificationState.equals(PREF_DO_NOT_DISTURB_SCHEDULED);
|
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_EARBUD);
|
||||||
addPreferenceHandlerFor(PREF_MOONDROP_TOUCH_ANC_MODE_TRIGGER);
|
addPreferenceHandlerFor(PREF_MOONDROP_TOUCH_ANC_MODE_TRIGGER);
|
||||||
|
|
||||||
addPreferenceHandlerFor(PREF_MISCALE_WEIGHT_UNIT);
|
|
||||||
addPreferenceHandlerFor(PREF_MISCALE_SMALL_OBJECTS);
|
addPreferenceHandlerFor(PREF_MISCALE_SMALL_OBJECTS);
|
||||||
|
|
||||||
addPreferenceHandlerFor(PREF_MIJIA_LYWSD_COMFORT_TEMPERATURE_LOWER);
|
addPreferenceHandlerFor(PREF_MIJIA_LYWSD_COMFORT_TEMPERATURE_LOWER);
|
||||||
@@ -990,8 +984,6 @@ public class DeviceSpecificSettingsFragment extends AbstractPreferenceFragment i
|
|||||||
|
|
||||||
addPreferenceHandlerFor(PREF_VOICE_SERVICE_LANGUAGE);
|
addPreferenceHandlerFor(PREF_VOICE_SERVICE_LANGUAGE);
|
||||||
|
|
||||||
addPreferenceHandlerFor(PREF_TEMPERATURE_SCALE_CF);
|
|
||||||
|
|
||||||
addPreferenceHandlerFor(PREF_PREFIX_NOTIFICATION_WITH_APP);
|
addPreferenceHandlerFor(PREF_PREFIX_NOTIFICATION_WITH_APP);
|
||||||
|
|
||||||
addPreferenceHandlerFor(PREF_SLEEP_MODE_SCHEDULE_ENABLED);
|
addPreferenceHandlerFor(PREF_SLEEP_MODE_SCHEDULE_ENABLED);
|
||||||
|
|||||||
+20
-27
@@ -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_MINUTES_PER_100_YARDS;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_MM;
|
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_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_METERS;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_SECONDS_PER_100_YARDS;
|
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_SECONDS_PER_100_YARDS;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_SECONDS_PER_KM;
|
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.activities.SettingsActivity;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries;
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.WeightUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils;
|
import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils;
|
||||||
|
|
||||||
public class WorkoutValueFormatter {
|
public class WorkoutValueFormatter {
|
||||||
@@ -40,9 +43,8 @@ public class WorkoutValueFormatter {
|
|||||||
private boolean show_raw_data = false;
|
private boolean show_raw_data = false;
|
||||||
|
|
||||||
private final ActivityKind activityKind;
|
private final ActivityKind activityKind;
|
||||||
private final String units;
|
private final DistanceUnit distanceUnit;
|
||||||
private final String UNIT_IMPERIAL;
|
private final WeightUnit weightUnit;
|
||||||
private final String UNIT_METRIC;
|
|
||||||
private final boolean useNauticalUnits;
|
private final boolean useNauticalUnits;
|
||||||
private final DecimalFormat df = new DecimalFormat("#.##");
|
private final DecimalFormat df = new DecimalFormat("#.##");
|
||||||
|
|
||||||
@@ -52,9 +54,8 @@ public class WorkoutValueFormatter {
|
|||||||
|
|
||||||
public WorkoutValueFormatter(final ActivityKind activityKind) {
|
public WorkoutValueFormatter(final ActivityKind activityKind) {
|
||||||
this.activityKind = activityKind;
|
this.activityKind = activityKind;
|
||||||
this.units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
|
this.distanceUnit = GBApplication.getPrefs().getDistanceUnit();
|
||||||
this.UNIT_IMPERIAL = GBApplication.getContext().getString(R.string.p_unit_imperial);
|
this.weightUnit = GBApplication.getPrefs().getWeightUnit();
|
||||||
this.UNIT_METRIC = GBApplication.getContext().getString(R.string.p_unit_metric);
|
|
||||||
this.useNauticalUnits = ActivityKind.isNauticalActivity(activityKind) && GBApplication.getPrefs().getBoolean("units_nautical", true);
|
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);
|
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);
|
return String.valueOf(rawValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,25 +103,17 @@ public class WorkoutValueFormatter {
|
|||||||
|
|
||||||
switch (unit) {
|
switch (unit) {
|
||||||
case UNIT_KG:
|
case UNIT_KG:
|
||||||
if (units.equals(UNIT_IMPERIAL)) {
|
return WeightUnit.Companion.formatWeight(GBApplication.getContext(), value, weightUnit);
|
||||||
value = value * 2.2046226f;
|
|
||||||
unit = UNIT_LB;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case UNIT_LB:
|
case UNIT_LB:
|
||||||
if (units.equals(UNIT_METRIC)) {
|
return WeightUnit.Companion.formatWeight(GBApplication.getContext(), value / 2.2046226f, weightUnit);
|
||||||
value = value / 2.2046226f;
|
|
||||||
unit = UNIT_KG;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case UNIT_CM:
|
case UNIT_CM:
|
||||||
if (units.equals(UNIT_IMPERIAL)) {
|
if (distanceUnit == DistanceUnit.IMPERIAL) {
|
||||||
value = value * 0.0328084;
|
value = value * 0.0328084;
|
||||||
unit = "ft";
|
unit = "ft";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case UNIT_METERS_PER_SECOND:
|
case UNIT_METERS_PER_SECOND:
|
||||||
if (units.equals(UNIT_IMPERIAL)) {
|
if (distanceUnit == DistanceUnit.IMPERIAL) {
|
||||||
value = value * 2.236936D;
|
value = value * 2.236936D;
|
||||||
unit = "mi_h";
|
unit = "mi_h";
|
||||||
} else { //metric
|
} else { //metric
|
||||||
@@ -129,13 +122,13 @@ public class WorkoutValueFormatter {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case UNIT_METERS_PER_HOUR:
|
case UNIT_METERS_PER_HOUR:
|
||||||
if (units.equals(UNIT_IMPERIAL)) {
|
if (distanceUnit == DistanceUnit.IMPERIAL) {
|
||||||
value = value * 3.28084D;
|
value = value * 3.28084D;
|
||||||
unit = "foot_per_hour";
|
unit = "foot_per_hour";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case UNIT_SECONDS_PER_M:
|
case UNIT_SECONDS_PER_M:
|
||||||
if (units.equals(UNIT_IMPERIAL)) {
|
if (distanceUnit == DistanceUnit.IMPERIAL) {
|
||||||
value = value * (1609.344 / 60D);
|
value = value * (1609.344 / 60D);
|
||||||
unit = "minutes_mi";
|
unit = "minutes_mi";
|
||||||
} else { //metric
|
} else { //metric
|
||||||
@@ -144,7 +137,7 @@ public class WorkoutValueFormatter {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case UNIT_SECONDS_PER_KM:
|
case UNIT_SECONDS_PER_KM:
|
||||||
if (units.equals(UNIT_IMPERIAL)) {
|
if (distanceUnit == DistanceUnit.IMPERIAL) {
|
||||||
value = value / 60D * 1.609344;
|
value = value / 60D * 1.609344;
|
||||||
unit = "minutes_mi";
|
unit = "minutes_mi";
|
||||||
} else { //metric
|
} else { //metric
|
||||||
@@ -153,7 +146,7 @@ public class WorkoutValueFormatter {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case UNIT_KILOMETERS:
|
case UNIT_KILOMETERS:
|
||||||
if (units.equals(UNIT_IMPERIAL)) {
|
if (distanceUnit == DistanceUnit.IMPERIAL) {
|
||||||
value = value * 0.621371D;
|
value = value * 0.621371D;
|
||||||
unit = "mi";
|
unit = "mi";
|
||||||
}
|
}
|
||||||
@@ -162,7 +155,7 @@ public class WorkoutValueFormatter {
|
|||||||
if (useNauticalUnits) {
|
if (useNauticalUnits) {
|
||||||
value = value / 1852D;
|
value = value / 1852D;
|
||||||
unit = UNIT_NAUTICAL_MILES;
|
unit = UNIT_NAUTICAL_MILES;
|
||||||
} else if (units.equals(UNIT_IMPERIAL)) {
|
} else if (distanceUnit == DistanceUnit.IMPERIAL) {
|
||||||
value = value * 3.28084D;
|
value = value * 3.28084D;
|
||||||
unit = "ft";
|
unit = "ft";
|
||||||
if (value > 6000) {
|
if (value > 6000) {
|
||||||
@@ -180,13 +173,13 @@ public class WorkoutValueFormatter {
|
|||||||
if (useNauticalUnits) {
|
if (useNauticalUnits) {
|
||||||
value = value / 1.852D;
|
value = value / 1.852D;
|
||||||
unit = UNIT_KNOTS;
|
unit = UNIT_KNOTS;
|
||||||
} else if (units.equals(UNIT_IMPERIAL)) {
|
} else if (distanceUnit == DistanceUnit.IMPERIAL) {
|
||||||
value = value * 0.621371D;
|
value = value * 0.621371D;
|
||||||
unit = "mi_h";
|
unit = "mi_h";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case UNIT_SECONDS_PER_100_METERS:
|
case UNIT_SECONDS_PER_100_METERS:
|
||||||
if (units.equals(UNIT_IMPERIAL)) {
|
if (distanceUnit == DistanceUnit.IMPERIAL) {
|
||||||
value = (value * 0.9144) / 60D;
|
value = (value * 0.9144) / 60D;
|
||||||
unit = UNIT_MINUTES_PER_100_YARDS;
|
unit = UNIT_MINUTES_PER_100_YARDS;
|
||||||
} else { //metric
|
} else { //metric
|
||||||
@@ -195,7 +188,7 @@ public class WorkoutValueFormatter {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case UNIT_SECONDS_PER_100_YARDS:
|
case UNIT_SECONDS_PER_100_YARDS:
|
||||||
if (units.equals(UNIT_IMPERIAL)) {
|
if (distanceUnit == DistanceUnit.IMPERIAL) {
|
||||||
value = value / 60D;
|
value = value / 60D;
|
||||||
unit = UNIT_MINUTES_PER_100_YARDS;
|
unit = UNIT_MINUTES_PER_100_YARDS;
|
||||||
} else { //metric
|
} else { //metric
|
||||||
|
|||||||
+3
-4
@@ -16,11 +16,11 @@ import java.util.List;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity;
|
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.entities.CyclingSample;
|
import nodomain.freeyourgadget.gadgetbridge.entities.CyclingSample;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
|
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
||||||
|
|
||||||
public class CyclingLiveDataActivity extends AbstractGBActivity {
|
public class CyclingLiveDataActivity extends AbstractGBActivity {
|
||||||
@@ -84,10 +84,9 @@ public class CyclingLiveDataActivity extends AbstractGBActivity {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit();
|
||||||
|
|
||||||
String measurementSystem = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric");
|
if(distanceUnit != DistanceUnit.METRIC) {
|
||||||
|
|
||||||
if(!measurementSystem.equals("metric")) {
|
|
||||||
toUnitFactor = 0.621371f;
|
toUnitFactor = 0.621371f;
|
||||||
|
|
||||||
speedStringResource = R.string.mi_h;
|
speedStringResource = R.string.mi_h;
|
||||||
|
|||||||
-1
@@ -101,7 +101,6 @@ public class FemometerVinca2DeviceCoordinator extends AbstractBLEDeviceCoordinat
|
|||||||
return new int[]{
|
return new int[]{
|
||||||
R.xml.devicesettings_volume,
|
R.xml.devicesettings_volume,
|
||||||
R.xml.devicesettings_femometer,
|
R.xml.devicesettings_femometer,
|
||||||
R.xml.devicesettings_temperature_scale_cf,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-4
@@ -49,10 +49,6 @@ class GenericWeightScaleCoordinator : AbstractBLEDeviceCoordinator() {
|
|||||||
return Int.MAX_VALUE
|
return Int.MAX_VALUE
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getSupportedDeviceSpecificSettings(device: GBDevice?): IntArray? {
|
|
||||||
return intArrayOf(R.xml.devicesettings_weight_scale_unit)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getWeightSampleProvider(
|
override fun getWeightSampleProvider(
|
||||||
device: GBDevice, session: DaoSession
|
device: GBDevice, session: DaoSession
|
||||||
): TimeSampleProvider<out WeightSample?> {
|
): TimeSampleProvider<out WeightSample?> {
|
||||||
|
|||||||
+4
-23
@@ -29,24 +29,23 @@ import androidx.core.content.ContextCompat
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R
|
import nodomain.freeyourgadget.gadgetbridge.R
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity
|
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper
|
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.GenericWeightSampleProvider
|
import nodomain.freeyourgadget.gadgetbridge.devices.GenericWeightSampleProvider
|
||||||
import nodomain.freeyourgadget.gadgetbridge.entities.GenericWeightSample
|
import nodomain.freeyourgadget.gadgetbridge.entities.GenericWeightSample
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice
|
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.WeightScaleMeasurement
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.weightScale.WeightScaleProfile
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.weightScale.WeightScaleProfile
|
||||||
import org.slf4j.Logger
|
import org.slf4j.Logger
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import java.time.Instant
|
import java.time.Instant
|
||||||
import kotlin.math.roundToInt
|
|
||||||
|
|
||||||
class GenericWeightScaleMeasurementActivity : AbstractGBActivity() {
|
class GenericWeightScaleMeasurementActivity : AbstractGBActivity() {
|
||||||
private val weightUpdatedReceiver: WeightUpdatedReceiver = WeightUpdatedReceiver()
|
private val weightUpdatedReceiver: WeightUpdatedReceiver = WeightUpdatedReceiver()
|
||||||
private var actual: TextView? = null
|
private var actual: TextView? = null
|
||||||
private var save: Button? = null
|
private var save: Button? = null
|
||||||
private lateinit var device: GBDevice
|
private lateinit var device: GBDevice
|
||||||
private var unit: String? = null
|
private var unit: WeightUnit? = null
|
||||||
|
|
||||||
private var measurement: WeightScaleMeasurement? = null
|
private var measurement: WeightScaleMeasurement? = null
|
||||||
|
|
||||||
@@ -59,12 +58,7 @@ class GenericWeightScaleMeasurementActivity : AbstractGBActivity() {
|
|||||||
val manager = GBApplication.app().deviceManager
|
val manager = GBApplication.app().deviceManager
|
||||||
device = manager.getDeviceByAddress(address)!!
|
device = manager.getDeviceByAddress(address)!!
|
||||||
|
|
||||||
val settings = GBApplication.getDevicePrefs(device)
|
unit = GBApplication.getPrefs().weightUnit
|
||||||
unit = settings.getString(DeviceSettingsPreferenceConst.PREF_WEIGHT_SCALE_UNIT, null)
|
|
||||||
|
|
||||||
if (unit == null) {
|
|
||||||
unit = if (GBApplication.getPrefs().isMetricUnits) "kilogram" else "pound"
|
|
||||||
}
|
|
||||||
|
|
||||||
setContentView(R.layout.activity_weight_scale_measurement)
|
setContentView(R.layout.activity_weight_scale_measurement)
|
||||||
|
|
||||||
@@ -86,20 +80,7 @@ class GenericWeightScaleMeasurementActivity : AbstractGBActivity() {
|
|||||||
val raw: Double? = measurement?.weightKilogram
|
val raw: Double? = measurement?.weightKilogram
|
||||||
val kg: Double = if (raw == null || raw.isNaN()) 0.0 else raw
|
val kg: Double = if (raw == null || raw.isNaN()) 0.0 else raw
|
||||||
|
|
||||||
if (unit.equals("jin")) {
|
actual?.text = WeightUnit.formatWeight(this, kg, unit?: WeightUnit.KILOGRAM)
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun saveWeightInfo(measurement: WeightScaleMeasurement) {
|
internal fun saveWeightInfo(measurement: WeightScaleMeasurement) {
|
||||||
|
|||||||
+5
-7
@@ -38,7 +38,6 @@ import de.greenrobot.dao.AbstractDao;
|
|||||||
import de.greenrobot.dao.Property;
|
import de.greenrobot.dao.Property;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
|
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
|
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.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.hplus.HPlusSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.hplus.HPlusSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs;
|
||||||
|
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.GBApplication.getContext;
|
|
||||||
|
|
||||||
public class HPlusCoordinator extends AbstractBLEDeviceCoordinator {
|
public class HPlusCoordinator extends AbstractBLEDeviceCoordinator {
|
||||||
protected static final Logger LOG = LoggerFactory.getLogger(HPlusCoordinator.class);
|
protected static final Logger LOG = LoggerFactory.getLogger(HPlusCoordinator.class);
|
||||||
protected static Prefs prefs = GBApplication.getPrefs();
|
protected static GBPrefs prefs = GBApplication.getPrefs();
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
@@ -140,9 +138,9 @@ public class HPlusCoordinator extends AbstractBLEDeviceCoordinator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static byte getUnit(String address) {
|
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;
|
return HPlusConstants.ARG_UNIT_METRIC;
|
||||||
} else {
|
} else {
|
||||||
return HPlusConstants.ARG_UNIT_IMPERIAL;
|
return HPlusConstants.ARG_UNIT_IMPERIAL;
|
||||||
|
|||||||
-11
@@ -39,7 +39,6 @@ import de.greenrobot.dao.AbstractDao;
|
|||||||
import de.greenrobot.dao.Property;
|
import de.greenrobot.dao.Property;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
|
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsCustomizer;
|
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsCustomizer;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.capabilities.password.PasswordCapabilityImpl;
|
import nodomain.freeyourgadget.gadgetbridge.capabilities.password.PasswordCapabilityImpl;
|
||||||
@@ -471,16 +470,6 @@ public abstract class HuamiCoordinator extends AbstractBLEDeviceCoordinator {
|
|||||||
return prefs.getTimePreference(key, defaultValue);
|
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) {
|
public static DoNotDisturb getDoNotDisturb(String deviceAddress) {
|
||||||
SharedPreferences prefs = GBApplication.getDeviceSpecificSharedPrefs(deviceAddress);
|
SharedPreferences prefs = GBApplication.getDeviceSpecificSharedPrefs(deviceAddress);
|
||||||
|
|
||||||
|
|||||||
-3
@@ -564,9 +564,6 @@ public abstract class HuaweiCoordinator extends AbstractDeviceCoordinator {
|
|||||||
// Currently on main setting menu.
|
// Currently on main setting menu.
|
||||||
/*if (deviceState.supportsLanguageSetting())
|
/*if (deviceState.supportsLanguageSetting())
|
||||||
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.DISPLAY, R.xml.devicesettings_language_generic);*/
|
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.DISPLAY, R.xml.devicesettings_language_generic);*/
|
||||||
if (deviceState.supportsTemperature()) {
|
|
||||||
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.DISPLAY, R.xml.devicesettings_temperature_scale_cf);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Developer
|
// Developer
|
||||||
final List<Integer> developer = deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.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_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 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) {
|
public static int getNotificationPrefIntValue(String pref, String origin, Prefs prefs, int defaultValue) {
|
||||||
String key = getNotificationPrefKey(pref, origin);
|
String key = getNotificationPrefKey(pref, origin);
|
||||||
return prefs.getInt(key, defaultValue);
|
return prefs.getInt(key, defaultValue);
|
||||||
|
|||||||
-1
@@ -66,7 +66,6 @@ public abstract class AbstractMijiaLywsdCoordinator extends AbstractBLEDeviceCoo
|
|||||||
public int[] getSupportedDeviceSpecificSettings(GBDevice device) {
|
public int[] getSupportedDeviceSpecificSettings(GBDevice device) {
|
||||||
return new int[]{
|
return new int[]{
|
||||||
R.xml.devicesettings_mijia_lywsd,
|
R.xml.devicesettings_mijia_lywsd,
|
||||||
R.xml.devicesettings_temperature_scale_cf,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-4
@@ -18,8 +18,7 @@ package nodomain.freeyourgadget.gadgetbridge.devices.moyoung;
|
|||||||
|
|
||||||
import lineageos.weather.util.WeatherUtils;
|
import lineageos.weather.util.WeatherUtils;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||||
|
|
||||||
public class MoyoungWeatherForecast {
|
public class MoyoungWeatherForecast {
|
||||||
@@ -35,8 +34,8 @@ public class MoyoungWeatherForecast {
|
|||||||
|
|
||||||
public MoyoungWeatherForecast(WeatherSpec.Daily forecast) {
|
public MoyoungWeatherForecast(WeatherSpec.Daily forecast) {
|
||||||
conditionId = MoyoungConstants.openWeatherConditionToMoyoungConditionId(forecast.getConditionCode());
|
conditionId = MoyoungConstants.openWeatherConditionToMoyoungConditionId(forecast.getConditionCode());
|
||||||
String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
|
final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
|
||||||
if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) {
|
if (temperatureUnit == TemperatureUnit.FAHRENHEIT) {
|
||||||
minTemp = (byte) WeatherUtils.celsiusToFahrenheit(forecast.getMinTemp() - 273); // Kelvin -> Fahrenheit
|
minTemp = (byte) WeatherUtils.celsiusToFahrenheit(forecast.getMinTemp() - 273); // Kelvin -> Fahrenheit
|
||||||
maxTemp = (byte) WeatherUtils.celsiusToFahrenheit(forecast.getMaxTemp() - 273); // Kelvin -> Fahrenheit
|
maxTemp = (byte) WeatherUtils.celsiusToFahrenheit(forecast.getMaxTemp() - 273); // Kelvin -> Fahrenheit
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+3
-4
@@ -24,8 +24,7 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import lineageos.weather.util.WeatherUtils;
|
import lineageos.weather.util.WeatherUtils;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.StringUtils;
|
import nodomain.freeyourgadget.gadgetbridge.util.StringUtils;
|
||||||
|
|
||||||
@@ -58,8 +57,8 @@ public class MoyoungWeatherToday {
|
|||||||
|
|
||||||
public MoyoungWeatherToday(WeatherSpec weatherSpec) {
|
public MoyoungWeatherToday(WeatherSpec weatherSpec) {
|
||||||
conditionId = MoyoungConstants.openWeatherConditionToMoyoungConditionId(weatherSpec.getCurrentConditionCode());
|
conditionId = MoyoungConstants.openWeatherConditionToMoyoungConditionId(weatherSpec.getCurrentConditionCode());
|
||||||
String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
|
final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
|
||||||
if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) {
|
if (temperatureUnit == TemperatureUnit.FAHRENHEIT) {
|
||||||
currentTemp = (byte) WeatherUtils.celsiusToFahrenheit(weatherSpec.getCurrentTemp() - 273); // Kelvin -> Fahrenheit
|
currentTemp = (byte) WeatherUtils.celsiusToFahrenheit(weatherSpec.getCurrentTemp() - 273); // Kelvin -> Fahrenheit
|
||||||
} else {
|
} else {
|
||||||
currentTemp = (byte) (weatherSpec.getCurrentTemp() - 273); // Kelvin -> Celcius
|
currentTemp = (byte) (weatherSpec.getCurrentTemp() - 273); // Kelvin -> Celcius
|
||||||
|
|||||||
+3
-6
@@ -39,9 +39,8 @@ import nodomain.freeyourgadget.gadgetbridge.BuildConfig;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity;
|
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
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: updates when multiple devices are active
|
||||||
// TODO: polish and localize the GUI
|
// TODO: polish and localize the GUI
|
||||||
@@ -82,10 +81,8 @@ public class UltrahumanBreathingActivity extends AbstractGBActivity {
|
|||||||
filter.addAction(UltrahumanConstants.ACTION_EXERCISE_UPDATE);
|
filter.addAction(UltrahumanConstants.ACTION_EXERCISE_UPDATE);
|
||||||
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(UpdateReceiver, filter);
|
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(UpdateReceiver, filter);
|
||||||
|
|
||||||
final GBPrefs prefs = GBApplication.getPrefs();
|
final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
|
||||||
final String metric = getString(R.string.p_unit_metric);
|
MetricUnits = temperatureUnit == TemperatureUnit.CELSIUS;
|
||||||
final String unitSystem = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, metric);
|
|
||||||
MetricUnits = unitSystem.equals(metric);
|
|
||||||
|
|
||||||
Button temperatureUom = findViewById(R.id.ultrahuman_exercise_temperature_uom);
|
Button temperatureUom = findViewById(R.id.ultrahuman_exercise_temperature_uom);
|
||||||
temperatureUom.setText(MetricUnits ? R.string.unit_celsius : R.string.unit_fahrenheit);
|
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.PreferenceMigrator55;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator56;
|
import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator56;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator57;
|
||||||
|
|
||||||
public class GBPrefsMigrator {
|
public class GBPrefsMigrator {
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(GBPrefsMigrator.class);
|
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";
|
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
|
//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
|
// 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) {
|
public static void migratePrefsIfNeeded(final SharedPreferences sharedPrefs) {
|
||||||
final int oldVersion = getPrefsFileVersion(sharedPrefs);
|
final int oldVersion = getPrefsFileVersion(sharedPrefs);
|
||||||
@@ -26,6 +27,7 @@ public class GBPrefsMigrator {
|
|||||||
// Create new migrator classes as needed, one per version
|
// Create new migrator classes as needed, one per version
|
||||||
if (oldVersion < 55) new PreferenceMigrator55().migrate(oldVersion, sharedPrefs, editor);
|
if (oldVersion < 55) new PreferenceMigrator55().migrate(oldVersion, sharedPrefs, editor);
|
||||||
if (oldVersion < 56) new PreferenceMigrator56().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.putString(PREFS_VERSION, Integer.toString(CURRENT_PREFS_VERSION));
|
||||||
editor.apply();
|
editor.apply();
|
||||||
|
|||||||
+77
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
+11
-8
@@ -37,8 +37,9 @@ import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
|
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
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.service.btle.TransactionBuilder;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
||||||
|
|
||||||
@@ -68,7 +69,8 @@ public class CmfPreferences {
|
|||||||
case ActivityUser.PREF_USER_CALORIES_BURNT:
|
case ActivityUser.PREF_USER_CALORIES_BURNT:
|
||||||
setGoals(builder);
|
setGoals(builder);
|
||||||
break;
|
break;
|
||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
case SettingsActivity.PREF_UNIT_DISTANCE:
|
||||||
|
case SettingsActivity.PREF_UNIT_TEMPERATURE:
|
||||||
setMeasurementSystem(builder);
|
setMeasurementSystem(builder);
|
||||||
break;
|
break;
|
||||||
case DeviceSettingsPreferenceConst.PREF_LANGUAGE:
|
case DeviceSettingsPreferenceConst.PREF_LANGUAGE:
|
||||||
@@ -161,15 +163,16 @@ public class CmfPreferences {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void setMeasurementSystem(final TransactionBuilder builder) {
|
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};
|
final byte temperatureByte = (byte) (temperatureUnit == TemperatureUnit.CELSIUS ? 0x00 : 0x01);
|
||||||
mSupport.sendCommand(builder, CmfCommand.UNIT_LENGTH, cmd);
|
mSupport.sendCommand(builder, CmfCommand.UNIT_TEMPERATURE, new byte[]{0x01, temperatureByte});
|
||||||
mSupport.sendCommand(builder, CmfCommand.UNIT_TEMPERATURE, cmd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setLanguage(final TransactionBuilder builder) {
|
protected void setLanguage(final TransactionBuilder builder) {
|
||||||
|
|||||||
+3
-4
@@ -44,8 +44,6 @@ import java.util.Map;
|
|||||||
|
|
||||||
import lineageos.weather.util.WeatherUtils;
|
import lineageos.weather.util.WeatherUtils;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
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.DeviceSettingsPreferenceConst;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
|
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent;
|
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.CallSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
||||||
@@ -336,8 +335,8 @@ public class PixooProtocol extends GBDeviceProtocol {
|
|||||||
}
|
}
|
||||||
|
|
||||||
byte temp = (byte) (weatherSpec.getCurrentTemp() - 273);
|
byte temp = (byte) (weatherSpec.getCurrentTemp() - 273);
|
||||||
String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
|
final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
|
||||||
if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) {
|
if (temperatureUnit == TemperatureUnit.FAHRENHEIT) {
|
||||||
temp = (byte) WeatherUtils.celsiusToFahrenheit(temp);
|
temp = (byte) WeatherUtils.celsiusToFahrenheit(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-11
@@ -46,13 +46,13 @@ import java.util.concurrent.Callable;
|
|||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.Logging;
|
import nodomain.freeyourgadget.gadgetbridge.Logging;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
|
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.CalendarEventSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.CalendarEventSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.ItemWithDetails;
|
import nodomain.freeyourgadget.gadgetbridge.model.ItemWithDetails;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLEMultiDeviceSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLEMultiDeviceSupport;
|
||||||
@@ -95,11 +95,7 @@ public class G1DeviceSupport extends AbstractBTLEMultiDeviceSupport {
|
|||||||
private List<CalendarEvent> lastSyncedEvents;
|
private List<CalendarEvent> lastSyncedEvents;
|
||||||
|
|
||||||
public G1DeviceSupport() {
|
public G1DeviceSupport() {
|
||||||
this(LOG);
|
super(LOG, 2);
|
||||||
}
|
|
||||||
|
|
||||||
public G1DeviceSupport(Logger logger) {
|
|
||||||
super(logger, 2);
|
|
||||||
addSupportedService(G1Constants.UUID_SERVICE_NORDIC_UART,
|
addSupportedService(G1Constants.UUID_SERVICE_NORDIC_UART,
|
||||||
G1Constants.Side.LEFT.getDeviceIndex());
|
G1Constants.Side.LEFT.getDeviceIndex());
|
||||||
|
|
||||||
@@ -738,7 +734,7 @@ public class G1DeviceSupport extends AbstractBTLEMultiDeviceSupport {
|
|||||||
case DeviceSettingsPreferenceConst.PREF_EVEN_REALITIES_SCREEN_DEPTH:
|
case DeviceSettingsPreferenceConst.PREF_EVEN_REALITIES_SCREEN_DEPTH:
|
||||||
sendDisplaySettings();
|
sendDisplaySettings();
|
||||||
break;
|
break;
|
||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
case SettingsActivity.PREF_UNIT_TEMPERATURE:
|
||||||
case DeviceSettingsPreferenceConst.PREF_TIMEFORMAT:
|
case DeviceSettingsPreferenceConst.PREF_TIMEFORMAT:
|
||||||
// Units or time format updated, update the time and weather on the glasses to match
|
// Units or time format updated, update the time and weather on the glasses to match
|
||||||
onSetTimeOrWeather();
|
onSetTimeOrWeather();
|
||||||
@@ -792,10 +788,8 @@ public class G1DeviceSupport extends AbstractBTLEMultiDeviceSupport {
|
|||||||
long timeMilliseconds = currentMilliseconds + tzOffset;
|
long timeMilliseconds = currentMilliseconds + tzOffset;
|
||||||
|
|
||||||
// Check if the GB settings are set to metric, if not, set the temp to use Fahrenheit.
|
// 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);
|
final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
|
||||||
boolean useFahrenheit = !GBApplication.getPrefs()
|
boolean useFahrenheit = temperatureUnit == TemperatureUnit.FAHRENHEIT;
|
||||||
.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM,
|
|
||||||
metricString).equals(metricString);
|
|
||||||
|
|
||||||
// Pull the weather into a local variable so that if it changes between the two lenses being
|
// 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.
|
// updated, we won't end up with a skewed value.
|
||||||
|
|||||||
+5
-3
@@ -29,6 +29,7 @@ import java.util.GregorianCalendar;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
|
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
|
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.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.BatteryState;
|
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.AbstractBTLEDeviceSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
||||||
@@ -222,9 +224,9 @@ public class FemometerVinca2DeviceSupport extends AbstractBTLESingleDeviceSuppor
|
|||||||
case DeviceSettingsPreferenceConst.PREF_VOLUME:
|
case DeviceSettingsPreferenceConst.PREF_VOLUME:
|
||||||
setVolume(sharedPreferences);
|
setVolume(sharedPreferences);
|
||||||
break;
|
break;
|
||||||
case DeviceSettingsPreferenceConst.PREF_TEMPERATURE_SCALE_CF:
|
case SettingsActivity.PREF_UNIT_TEMPERATURE:
|
||||||
String scale = sharedPreferences.getString(DeviceSettingsPreferenceConst.PREF_TEMPERATURE_SCALE_CF, "c");
|
final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
|
||||||
int value = "c".equals(scale) ? 0x0a : 0x0b;
|
int value = temperatureUnit == TemperatureUnit.CELSIUS ? 0x0a : 0x0b;
|
||||||
applySetting(byteArray(value), null);
|
applySetting(byteArray(value), null);
|
||||||
}
|
}
|
||||||
builder.queue();
|
builder.queue();
|
||||||
|
|||||||
+10
-8
@@ -135,7 +135,9 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
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.Weather;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.WeatherMapper;
|
import nodomain.freeyourgadget.gadgetbridge.model.weather.WeatherMapper;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||||
@@ -486,7 +488,7 @@ public class FitProDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
case DeviceSettingsPreferenceConst.PREF_DISPLAY_ON_LIFT_END:
|
case DeviceSettingsPreferenceConst.PREF_DISPLAY_ON_LIFT_END:
|
||||||
setDisplayOnLift(builder);
|
setDisplayOnLift(builder);
|
||||||
break;
|
break;
|
||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
case SettingsActivity.PREF_UNIT_DISTANCE:
|
||||||
case ActivityUser.PREF_USER_WEIGHT_KG:
|
case ActivityUser.PREF_USER_WEIGHT_KG:
|
||||||
case ActivityUser.PREF_USER_GENDER:
|
case ActivityUser.PREF_USER_GENDER:
|
||||||
case ActivityUser.PREF_USER_HEIGHT_CM:
|
case ActivityUser.PREF_USER_HEIGHT_CM:
|
||||||
@@ -554,8 +556,8 @@ public class FitProDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
short todayMax = (short) (weatherSpec.getTodayMaxTemp() - 273);
|
short todayMax = (short) (weatherSpec.getTodayMaxTemp() - 273);
|
||||||
short todayMin = (short) (weatherSpec.getTodayMinTemp() - 273);
|
short todayMin = (short) (weatherSpec.getTodayMinTemp() - 273);
|
||||||
byte weatherUnit = 0;
|
byte weatherUnit = 0;
|
||||||
String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
|
final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
|
||||||
if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) {
|
if (temperatureUnit == TemperatureUnit.FAHRENHEIT) {
|
||||||
todayMax = (short) (todayMax * 1.8f + 32);
|
todayMax = (short) (todayMax * 1.8f + 32);
|
||||||
todayMin = (short) (todayMin * 1.8f + 32);
|
todayMin = (short) (todayMin * 1.8f + 32);
|
||||||
weatherUnit = 1;
|
weatherUnit = 1;
|
||||||
@@ -728,13 +730,13 @@ public class FitProDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
int heightCm = activityUser.getHeightCm();
|
int heightCm = activityUser.getHeightCm();
|
||||||
int weightKg = activityUser.getWeightKg();
|
int weightKg = activityUser.getWeightKg();
|
||||||
|
|
||||||
byte distanceUnit = UNIT_METRIC;
|
byte distanceUnitByte = UNIT_METRIC;
|
||||||
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_imperial))) {
|
if (distanceUnit == DistanceUnit.IMPERIAL) {
|
||||||
distanceUnit = UNIT_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());
|
byte[] data = craftData(CMD_GROUP_GENERAL, CMD_SET_USER_DATA, ByteBuffer.allocate(4).putInt(userData).array());
|
||||||
builder.write(writeCharacteristic, data);
|
builder.write(writeCharacteristic, data);
|
||||||
return this;
|
return this;
|
||||||
|
|||||||
+10
-9
@@ -41,9 +41,11 @@ import nodomain.freeyourgadget.gadgetbridge.model.BatteryState
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec
|
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.CannedMessagesSpec
|
import nodomain.freeyourgadget.gadgetbridge.model.CannedMessagesSpec
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.Contact
|
import nodomain.freeyourgadget.gadgetbridge.model.Contact
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec
|
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec
|
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec
|
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.AbstractBTLESingleDeviceSupport
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.sony.wena3.protocol.packets.notification.defines.VibrationKind
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.sony.wena3.protocol.packets.notification.defines.VibrationKind
|
||||||
@@ -395,7 +397,9 @@ class GloryFitSupport() : AbstractBTLESingleDeviceSupport(LOG) {
|
|||||||
setLanguage(builder)
|
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
|
setUserInfo(builder) // user info also has temperature unit
|
||||||
setUnits(builder)
|
setUnits(builder)
|
||||||
}
|
}
|
||||||
@@ -953,8 +957,7 @@ class GloryFitSupport() : AbstractBTLESingleDeviceSupport(LOG) {
|
|||||||
0x00.toByte()
|
0x00.toByte()
|
||||||
}
|
}
|
||||||
|
|
||||||
val measurementSystem =
|
val temperatureUnit = GBApplication.getPrefs().temperatureUnit
|
||||||
GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric")
|
|
||||||
|
|
||||||
val buf = ByteBuffer.allocate(19).order(ByteOrder.BIG_ENDIAN)
|
val buf = ByteBuffer.allocate(19).order(ByteOrder.BIG_ENDIAN)
|
||||||
buf.put(CMD_USER_INFO)
|
buf.put(CMD_USER_INFO)
|
||||||
@@ -976,7 +979,7 @@ class GloryFitSupport() : AbstractBTLESingleDeviceSupport(LOG) {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
buf.put(0x00) // ?
|
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(0x01) // ?
|
||||||
buf.put(heartRateAlertLow)
|
buf.put(heartRateAlertLow)
|
||||||
|
|
||||||
@@ -1100,18 +1103,16 @@ class GloryFitSupport() : AbstractBTLESingleDeviceSupport(LOG) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setUnits(builder: TransactionBuilder) {
|
private fun setUnits(builder: TransactionBuilder) {
|
||||||
val measurementSystem =
|
val distanceUnit = GBApplication.getPrefs().distanceUnit
|
||||||
GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric")
|
|
||||||
val devicePrefs = getDevicePrefs()
|
val devicePrefs = getDevicePrefs()
|
||||||
|
|
||||||
val metric = measurementSystem == "metric"
|
|
||||||
val timeFormat24h = DeviceSettingsPreferenceConst.PREF_TIMEFORMAT_24H == devicePrefs.timeFormat
|
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)
|
val buf = ByteBuffer.allocate(3).order(ByteOrder.BIG_ENDIAN)
|
||||||
buf.put(CMD_UNITS)
|
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)
|
buf.put(if (timeFormat24h) 0x01 else 0x02)
|
||||||
|
|
||||||
builder.write(UUID_CHARACTERISTIC_GLORYFIT_CMD_WRITE, *buf.array())
|
builder.write(UUID_CHARACTERISTIC_GLORYFIT_CMD_WRITE, *buf.array())
|
||||||
|
|||||||
+4
-4
@@ -56,6 +56,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService;
|
||||||
@@ -115,7 +116,7 @@ public final class HamaFit6900DeviceSupport extends AbstractBTLESingleDeviceSupp
|
|||||||
sendMessage("update-language+timeformat", makeSetSystemDataMessage());
|
sendMessage("update-language+timeformat", makeSetSystemDataMessage());
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
case SettingsActivity.PREF_UNIT_DISTANCE:
|
||||||
sendMessage("update-units", makeSetUnitMessage());
|
sendMessage("update-units", makeSetUnitMessage());
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -424,10 +425,9 @@ public final class HamaFit6900DeviceSupport extends AbstractBTLESingleDeviceSupp
|
|||||||
}
|
}
|
||||||
|
|
||||||
private byte[] makeSetUnitMessage() {
|
private byte[] makeSetUnitMessage() {
|
||||||
final Prefs prefs = GBApplication.getPrefs();
|
final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit();
|
||||||
String unit = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric");
|
|
||||||
|
|
||||||
return Message.encodeSetUnit(unit.equals("metric"));
|
return Message.encodeSetUnit(distanceUnit == DistanceUnit.METRIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte[] makeSetUserInfoMessage() {
|
private byte[] makeSetUserInfoMessage() {
|
||||||
|
|||||||
+1
-1
@@ -584,7 +584,7 @@ public class HPlusSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
try {
|
try {
|
||||||
builder = performInitialized("Sending configuration for option: " + config);
|
builder = performInitialized("Sending configuration for option: " + config);
|
||||||
switch (config) {
|
switch (config) {
|
||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
case SettingsActivity.PREF_UNIT_DISTANCE:
|
||||||
setUnit(builder);
|
setUnit(builder);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-8
@@ -118,7 +118,9 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.SleepState;
|
import nodomain.freeyourgadget.gadgetbridge.model.SleepState;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.WearingState;
|
import nodomain.freeyourgadget.gadgetbridge.model.WearingState;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||||
@@ -2688,7 +2690,7 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport
|
|||||||
case PREF_HOURLY_CHIME_END:
|
case PREF_HOURLY_CHIME_END:
|
||||||
setHourlyChime(builder);
|
setHourlyChime(builder);
|
||||||
break;
|
break;
|
||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
case SettingsActivity.PREF_UNIT_DISTANCE:
|
||||||
setDistanceUnit(builder);
|
setDistanceUnit(builder);
|
||||||
break;
|
break;
|
||||||
case MiBandConst.PREF_SWIPE_UNLOCK:
|
case MiBandConst.PREF_SWIPE_UNLOCK:
|
||||||
@@ -2872,7 +2874,7 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport
|
|||||||
return;
|
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);
|
int tz_offset_hours = SimpleTimeZone.getDefault().getOffset(weatherSpec.getTimestamp() * 1000L) / (1000 * 60 * 60);
|
||||||
try {
|
try {
|
||||||
TransactionBuilder builder;
|
TransactionBuilder builder;
|
||||||
@@ -2893,7 +2895,7 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport
|
|||||||
buf.put(condition);
|
buf.put(condition);
|
||||||
|
|
||||||
int currentTemp = weatherSpec.getCurrentTemp() - 273;
|
int currentTemp = weatherSpec.getCurrentTemp() - 273;
|
||||||
if (unit == MiBandConst.DistanceUnit.IMPERIAL) {
|
if (temperatureUnit == TemperatureUnit.FAHRENHEIT) {
|
||||||
currentTemp = (int) WeatherUtils.celsiusToFahrenheit(currentTemp);
|
currentTemp = (int) WeatherUtils.celsiusToFahrenheit(currentTemp);
|
||||||
}
|
}
|
||||||
buf.put((byte) currentTemp);
|
buf.put((byte) currentTemp);
|
||||||
@@ -2978,7 +2980,7 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport
|
|||||||
|
|
||||||
int todayMaxTemp = weatherSpec.getTodayMaxTemp() - 273;
|
int todayMaxTemp = weatherSpec.getTodayMaxTemp() - 273;
|
||||||
int todayMinTemp = weatherSpec.getTodayMinTemp() - 273;
|
int todayMinTemp = weatherSpec.getTodayMinTemp() - 273;
|
||||||
if (unit == MiBandConst.DistanceUnit.IMPERIAL) {
|
if (temperatureUnit == TemperatureUnit.FAHRENHEIT) {
|
||||||
todayMaxTemp = (int) WeatherUtils.celsiusToFahrenheit(todayMaxTemp);
|
todayMaxTemp = (int) WeatherUtils.celsiusToFahrenheit(todayMaxTemp);
|
||||||
todayMinTemp = (int) WeatherUtils.celsiusToFahrenheit(todayMinTemp);
|
todayMinTemp = (int) WeatherUtils.celsiusToFahrenheit(todayMinTemp);
|
||||||
}
|
}
|
||||||
@@ -2997,7 +2999,7 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport
|
|||||||
|
|
||||||
int forecastMaxTemp = forecast.getMaxTemp() - 273;
|
int forecastMaxTemp = forecast.getMaxTemp() - 273;
|
||||||
int forecastMinTemp = forecast.getMinTemp() - 273;
|
int forecastMinTemp = forecast.getMinTemp() - 273;
|
||||||
if (unit == MiBandConst.DistanceUnit.IMPERIAL) {
|
if (temperatureUnit == TemperatureUnit.FAHRENHEIT) {
|
||||||
forecastMaxTemp = (int) WeatherUtils.celsiusToFahrenheit(forecastMaxTemp);
|
forecastMaxTemp = (int) WeatherUtils.celsiusToFahrenheit(forecastMaxTemp);
|
||||||
forecastMinTemp = (int) WeatherUtils.celsiusToFahrenheit(forecastMinTemp);
|
forecastMinTemp = (int) WeatherUtils.celsiusToFahrenheit(forecastMinTemp);
|
||||||
}
|
}
|
||||||
@@ -3638,9 +3640,9 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setDistanceUnit(TransactionBuilder builder) {
|
private void setDistanceUnit(TransactionBuilder builder) {
|
||||||
MiBandConst.DistanceUnit unit = HuamiCoordinator.getDistanceUnit();
|
DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit();
|
||||||
LOG.info("Setting distance unit to " + unit);
|
LOG.info("Setting distance unit to {}", distanceUnit);
|
||||||
if (unit == MiBandConst.DistanceUnit.METRIC) {
|
if (distanceUnit == DistanceUnit.METRIC) {
|
||||||
writeToConfiguration(builder, HuamiService.COMMAND_DISTANCE_UNIT_METRIC);
|
writeToConfiguration(builder, HuamiService.COMMAND_DISTANCE_UNIT_METRIC);
|
||||||
} else {
|
} else {
|
||||||
writeToConfiguration(builder, HuamiService.COMMAND_DISTANCE_UNIT_IMPERIAL);
|
writeToConfiguration(builder, HuamiService.COMMAND_DISTANCE_UNIT_IMPERIAL);
|
||||||
|
|||||||
+38
-29
@@ -73,6 +73,9 @@ import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiCoordinator;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.devices.miband.DoNotDisturb;
|
import nodomain.freeyourgadget.gadgetbridge.devices.miband.DoNotDisturb;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst;
|
import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
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.btle.BLETypeConversions;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.ZeppOsMenuType;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.ZeppOsMenuType;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.ZeppOsSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.ZeppOsSupport;
|
||||||
@@ -162,7 +165,9 @@ public class ZeppOsConfigService extends AbstractZeppOsService {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// Measurement system is global
|
// 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);
|
withTransactionBuilder("set measurement system", this::setMeasurementSystem);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -258,28 +263,20 @@ public class ZeppOsConfigService extends AbstractZeppOsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setMeasurementSystem(final ZeppOsTransactionBuilder builder) {
|
private void setMeasurementSystem(final ZeppOsTransactionBuilder builder) {
|
||||||
final String measurementSystem = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric");
|
final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit();
|
||||||
LOG.info("Setting measurement system to {}", measurementSystem);
|
final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
|
||||||
|
final WeightUnit weightUnit = GBApplication.getPrefs().getWeightUnit();
|
||||||
final byte distanceUnit;
|
LOG.info(
|
||||||
final byte temperatureUnit;
|
"Setting measurement system - distance={}, temperature={}, weight={}",
|
||||||
final byte weightUnit;
|
distanceUnit,
|
||||||
|
temperatureUnit,
|
||||||
// FIXME we should be able to configure these separately
|
weightUnit
|
||||||
if ("metric".equals(measurementSystem)) {
|
);
|
||||||
distanceUnit = 0;
|
|
||||||
temperatureUnit = 0;
|
|
||||||
weightUnit = 0;
|
|
||||||
} else {
|
|
||||||
distanceUnit = 1;
|
|
||||||
temperatureUnit = 1;
|
|
||||||
weightUnit = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
newSetter()
|
newSetter()
|
||||||
.setByte(ConfigArg.DISTANCE_UNIT, distanceUnit)
|
.setByte(ConfigArg.DISTANCE_UNIT, encodeByte(ConfigArg.DISTANCE_UNIT, distanceUnit.name().toLowerCase(Locale.ROOT)))
|
||||||
.setByte(ConfigArg.TEMPERATURE_UNIT, temperatureUnit)
|
.setByte(ConfigArg.TEMPERATURE_UNIT, encodeByte(ConfigArg.TEMPERATURE_UNIT, temperatureUnit.name().toLowerCase(Locale.ROOT)))
|
||||||
.setByte(ConfigArg.WEIGHT_UNIT, weightUnit)
|
.setByte(ConfigArg.WEIGHT_UNIT, encodeByte(ConfigArg.WEIGHT_UNIT, weightUnit.name().toLowerCase(Locale.ROOT)))
|
||||||
.write(builder);
|
.write(builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -795,8 +792,12 @@ public class ZeppOsConfigService extends AbstractZeppOsService {
|
|||||||
return encodeString(TIME_FORMAT_MAP, value);
|
return encodeString(TIME_FORMAT_MAP, value);
|
||||||
case DND_MODE:
|
case DND_MODE:
|
||||||
return encodeEnum(DND_MODE_MAP, value);
|
return encodeEnum(DND_MODE_MAP, value);
|
||||||
|
case DISTANCE_UNIT:
|
||||||
|
return encodeEnum(DISTANCE_UNIT_MAP, value);
|
||||||
case TEMPERATURE_UNIT:
|
case TEMPERATURE_UNIT:
|
||||||
return encodeEnum(TEMPERATURE_UNIT_MAP, value);
|
return encodeEnum(TEMPERATURE_UNIT_MAP, value);
|
||||||
|
case WEIGHT_UNIT:
|
||||||
|
return encodeEnum(WEIGHT_UNIT_MAP, value);
|
||||||
case NIGHT_MODE_MODE:
|
case NIGHT_MODE_MODE:
|
||||||
return encodeString(NIGHT_MODE_MAP, value);
|
return encodeString(NIGHT_MODE_MAP, value);
|
||||||
case WEARING_DIRECTION_BUTTONS:
|
case WEARING_DIRECTION_BUTTONS:
|
||||||
@@ -1380,10 +1381,18 @@ public class ZeppOsConfigService extends AbstractZeppOsService {
|
|||||||
case DND_MODE:
|
case DND_MODE:
|
||||||
decoder = b -> decodeEnum(DND_MODE_MAP, b);
|
decoder = b -> decodeEnum(DND_MODE_MAP, b);
|
||||||
break;
|
break;
|
||||||
|
case DISTANCE_UNIT:
|
||||||
|
// TODO: This should be per device...
|
||||||
|
decoder = b -> decodeEnum(DISTANCE_UNIT_MAP, b);
|
||||||
|
break;
|
||||||
case TEMPERATURE_UNIT:
|
case TEMPERATURE_UNIT:
|
||||||
// TODO: This should be per device...
|
// TODO: This should be per device...
|
||||||
decoder = b -> decodeEnum(TEMPERATURE_UNIT_MAP, b);
|
decoder = b -> decodeEnum(TEMPERATURE_UNIT_MAP, b);
|
||||||
break;
|
break;
|
||||||
|
case WEIGHT_UNIT:
|
||||||
|
// TODO: This should be per device...
|
||||||
|
decoder = b -> decodeEnum(WEIGHT_UNIT_MAP, b);
|
||||||
|
break;
|
||||||
case NIGHT_MODE_MODE:
|
case NIGHT_MODE_MODE:
|
||||||
decoder = b -> decodeString(NIGHT_MODE_MAP, b);
|
decoder = b -> decodeString(NIGHT_MODE_MAP, b);
|
||||||
break;
|
break;
|
||||||
@@ -1534,20 +1543,20 @@ public class ZeppOsConfigService extends AbstractZeppOsService {
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
private static final Map<Byte, Enum<?>> DISTANCE_UNIT_MAP = new HashMap<>() {{
|
private static final Map<Byte, Enum<?>> DISTANCE_UNIT_MAP = new HashMap<>() {{
|
||||||
put((byte) 0x00, MiBandConst.DistanceUnit.METRIC);
|
put((byte) 0x00, DistanceUnit.METRIC);
|
||||||
put((byte) 0x01, MiBandConst.DistanceUnit.IMPERIAL);
|
put((byte) 0x01, DistanceUnit.IMPERIAL);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
private static final Map<Byte, Enum<?>> TEMPERATURE_UNIT_MAP = new HashMap<>() {{
|
private static final Map<Byte, Enum<?>> TEMPERATURE_UNIT_MAP = new HashMap<>() {{
|
||||||
put((byte) 0x00, MiBandConst.DistanceUnit.METRIC);
|
put((byte) 0x00, DistanceUnit.METRIC);
|
||||||
put((byte) 0x01, MiBandConst.DistanceUnit.IMPERIAL);
|
put((byte) 0x01, DistanceUnit.IMPERIAL);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
private static final Map<Byte, Enum<?>> WEIGHT_UNIT_MAP = new HashMap<>() {{
|
private static final Map<Byte, Enum<?>> WEIGHT_UNIT_MAP = new HashMap<>() {{
|
||||||
put((byte) 0x00, MiBandConst.DistanceUnit.METRIC);
|
put((byte) 0x00, WeightUnit.KILOGRAM);
|
||||||
//put((byte) 0x01, MiBandConst.DistanceUnit.IMPERIAL); // jin (500g)
|
put((byte) 0x01, WeightUnit.JIN); // jin (500g)
|
||||||
put((byte) 0x02, MiBandConst.DistanceUnit.IMPERIAL);
|
put((byte) 0x02, WeightUnit.POUND);
|
||||||
//put((byte) 0x03, MiBandConst.DistanceUnit.IMPERIAL); // stone (1 stone = 14 pounds)
|
put((byte) 0x03, WeightUnit.STONE); // stone (1 stone = 14 pounds)
|
||||||
}};
|
}};
|
||||||
|
|
||||||
private static final Map<Byte, String> TIME_FORMAT_MAP = new HashMap<>() {{
|
private static final Map<Byte, String> TIME_FORMAT_MAP = new HashMap<>() {{
|
||||||
|
|||||||
+2
-2
@@ -1130,7 +1130,7 @@ public class HuaweiSupportProvider {
|
|||||||
setDateFormat();
|
setDateFormat();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
case SettingsActivity.PREF_UNIT_DISTANCE:
|
||||||
case DeviceSettingsPreferenceConst.PREF_LANGUAGE: {
|
case DeviceSettingsPreferenceConst.PREF_LANGUAGE: {
|
||||||
setLanguageSetting();
|
setLanguageSetting();
|
||||||
break;
|
break;
|
||||||
@@ -1173,7 +1173,7 @@ public class HuaweiSupportProvider {
|
|||||||
setContinuousSkinTemperatureMeasurement();
|
setContinuousSkinTemperatureMeasurement();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DeviceSettingsPreferenceConst.PREF_TEMPERATURE_SCALE_CF: {
|
case SettingsActivity.PREF_UNIT_TEMPERATURE: {
|
||||||
setTemperatureUnit();
|
setTemperatureUnit();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -44,7 +44,6 @@ import de.greenrobot.dao.query.CloseableListIterator;
|
|||||||
import de.greenrobot.dao.query.QueryBuilder;
|
import de.greenrobot.dao.query.QueryBuilder;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.charts.TimestampTranslation;
|
import nodomain.freeyourgadget.gadgetbridge.activities.charts.TimestampTranslation;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.workouts.charts.DefaultWorkoutCharts;
|
import nodomain.freeyourgadget.gadgetbridge.activities.workouts.charts.DefaultWorkoutCharts;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.workouts.entries.ActivitySummaryProgressEntry;
|
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.HeartRateZones;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.heartratezones.HeartRateZonesSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.heartratezones.HeartRateZonesSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.workout.WorkoutChart;
|
import nodomain.freeyourgadget.gadgetbridge.model.workout.WorkoutChart;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.StringUtils;
|
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()) {
|
try (CloseableListIterator<HuaweiWorkoutPaceSample> it = qbPace.build().listIterator()) {
|
||||||
|
|
||||||
int paceWeightSum = 0;
|
int paceWeightSum = 0;
|
||||||
|
|||||||
+3
-4
@@ -19,10 +19,9 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
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.HuaweiPacket;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.Weather;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.Weather;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider;
|
||||||
|
|
||||||
@@ -41,8 +40,8 @@ public class SendWeatherCurrentRequest extends Request {
|
|||||||
@Override
|
@Override
|
||||||
protected List<byte[]> createRequest() throws RequestCreationException {
|
protected List<byte[]> createRequest() throws RequestCreationException {
|
||||||
Weather.HuaweiTemperatureFormat temperatureFormat = Weather.HuaweiTemperatureFormat.CELSIUS;
|
Weather.HuaweiTemperatureFormat temperatureFormat = Weather.HuaweiTemperatureFormat.CELSIUS;
|
||||||
String unit = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
|
final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
|
||||||
if (unit.equals(GBApplication.getContext().getString(R.string.p_unit_imperial)))
|
if (temperatureUnit == TemperatureUnit.FAHRENHEIT)
|
||||||
temperatureFormat = Weather.HuaweiTemperatureFormat.FAHRENHEIT;
|
temperatureFormat = Weather.HuaweiTemperatureFormat.FAHRENHEIT;
|
||||||
try {
|
try {
|
||||||
Short pm25 = null;
|
Short pm25 = null;
|
||||||
|
|||||||
+3
-4
@@ -19,10 +19,9 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
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.HuaweiPacket;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.Weather;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.Weather;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider;
|
||||||
|
|
||||||
public class SendWeatherUnitRequest extends Request {
|
public class SendWeatherUnitRequest extends Request {
|
||||||
@@ -36,8 +35,8 @@ public class SendWeatherUnitRequest extends Request {
|
|||||||
@Override
|
@Override
|
||||||
protected List<byte[]> createRequest() throws RequestCreationException {
|
protected List<byte[]> createRequest() throws RequestCreationException {
|
||||||
Weather.HuaweiTemperatureFormat temperatureFormat = Weather.HuaweiTemperatureFormat.CELSIUS;
|
Weather.HuaweiTemperatureFormat temperatureFormat = Weather.HuaweiTemperatureFormat.CELSIUS;
|
||||||
String unit = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
|
final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
|
||||||
if (unit.equals(GBApplication.getContext().getString(R.string.p_unit_imperial)))
|
if (temperatureUnit == TemperatureUnit.FAHRENHEIT)
|
||||||
temperatureFormat = Weather.HuaweiTemperatureFormat.FAHRENHEIT;
|
temperatureFormat = Weather.HuaweiTemperatureFormat.FAHRENHEIT;
|
||||||
try {
|
try {
|
||||||
return new Weather.WeatherUnitRequest(this.paramsProvider, temperatureFormat).serialize();
|
return new Weather.WeatherUnitRequest(this.paramsProvider, temperatureFormat).serialize();
|
||||||
|
|||||||
+4
-7
@@ -24,12 +24,11 @@ import java.util.List;
|
|||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
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.DeviceSettingsPreferenceConst;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.LocaleConfig;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.LocaleConfig;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.LocaleConfig.SetLanguageSetting;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.LocaleConfig.SetLanguageSetting;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider;
|
||||||
|
|
||||||
public class SetLanguageSettingRequest extends Request {
|
public class SetLanguageSettingRequest extends Request {
|
||||||
@@ -62,11 +61,9 @@ public class SetLanguageSettingRequest extends Request {
|
|||||||
localeString = localeString.replace("_", "-");
|
localeString = localeString.replace("_", "-");
|
||||||
}
|
}
|
||||||
LOG.debug("localeString: {}", localeString);
|
LOG.debug("localeString: {}", localeString);
|
||||||
String measurementString = GBApplication
|
final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit();
|
||||||
.getPrefs()
|
LOG.debug("distanceUnit: {}", distanceUnit);
|
||||||
.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, getContext().getString(R.string.p_unit_metric));
|
byte measurement = distanceUnit == DistanceUnit.METRIC ? LocaleConfig.MeasurementSystem.metric : LocaleConfig.MeasurementSystem.imperial;
|
||||||
LOG.debug("measurementString: {}", measurementString);
|
|
||||||
byte measurement = measurementString.equals("metric") ? LocaleConfig.MeasurementSystem.metric : LocaleConfig.MeasurementSystem.imperial;
|
|
||||||
try {
|
try {
|
||||||
return new SetLanguageSetting(paramsProvider, localeString.getBytes(StandardCharsets.UTF_8), measurement).serialize();
|
return new SetLanguageSetting(paramsProvider, localeString.getBytes(StandardCharsets.UTF_8), measurement).serialize();
|
||||||
} catch (HuaweiPacket.CryptoException e) {
|
} catch (HuaweiPacket.CryptoException e) {
|
||||||
|
|||||||
+3
-3
@@ -22,9 +22,9 @@ import org.slf4j.LoggerFactory;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
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.HuaweiPacket;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.LocaleConfig;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.LocaleConfig;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider;
|
||||||
|
|
||||||
public class SetTemperatureUnitSetting extends Request {
|
public class SetTemperatureUnitSetting extends Request {
|
||||||
@@ -38,8 +38,8 @@ public class SetTemperatureUnitSetting extends Request {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<byte[]> createRequest() throws RequestCreationException {
|
protected List<byte[]> createRequest() throws RequestCreationException {
|
||||||
String temperatureScale = GBApplication.getDeviceSpecificSharedPrefs(this.getDevice().getAddress()).getString(DeviceSettingsPreferenceConst.PREF_TEMPERATURE_SCALE_CF, "");
|
TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
|
||||||
byte isFahrenheit = (byte) ((temperatureScale.equals("f")) ? 1 : 0);
|
byte isFahrenheit = (byte) (temperatureUnit == TemperatureUnit.FAHRENHEIT ? 1 : 0);
|
||||||
try {
|
try {
|
||||||
return new LocaleConfig.SetTemperatureUnitSetting(paramsProvider, isFahrenheit).serialize();
|
return new LocaleConfig.SetTemperatureUnitSetting(paramsProvider, isFahrenheit).serialize();
|
||||||
} catch (HuaweiPacket.CryptoException e) {
|
} catch (HuaweiPacket.CryptoException e) {
|
||||||
|
|||||||
+6
-5
@@ -133,7 +133,9 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.WeatherMapper;
|
import nodomain.freeyourgadget.gadgetbridge.model.weather.WeatherMapper;
|
||||||
@@ -449,7 +451,7 @@ public class LaxasFitDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
case DeviceSettingsPreferenceConst.PREF_DISPLAY_ON_LIFT_END:
|
case DeviceSettingsPreferenceConst.PREF_DISPLAY_ON_LIFT_END:
|
||||||
setDisplayOnLift(builder);
|
setDisplayOnLift(builder);
|
||||||
break;
|
break;
|
||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
case SettingsActivity.PREF_UNIT_DISTANCE:
|
||||||
case ActivityUser.PREF_USER_WEIGHT_KG:
|
case ActivityUser.PREF_USER_WEIGHT_KG:
|
||||||
case ActivityUser.PREF_USER_GENDER:
|
case ActivityUser.PREF_USER_GENDER:
|
||||||
case ActivityUser.PREF_USER_HEIGHT_CM:
|
case ActivityUser.PREF_USER_HEIGHT_CM:
|
||||||
@@ -508,8 +510,8 @@ public class LaxasFitDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
short todayMax = (short) (weatherSpec.getTodayMaxTemp() - 273);
|
short todayMax = (short) (weatherSpec.getTodayMaxTemp() - 273);
|
||||||
short todayMin = (short) (weatherSpec.getTodayMinTemp() - 273);
|
short todayMin = (short) (weatherSpec.getTodayMinTemp() - 273);
|
||||||
byte weatherUnit = 0;
|
byte weatherUnit = 0;
|
||||||
String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
|
final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
|
||||||
if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) {
|
if (temperatureUnit == TemperatureUnit.FAHRENHEIT) {
|
||||||
todayMax = (short) (todayMax * 1.8f + 32);
|
todayMax = (short) (todayMax * 1.8f + 32);
|
||||||
todayMin = (short) (todayMin * 1.8f + 32);
|
todayMin = (short) (todayMin * 1.8f + 32);
|
||||||
weatherUnit = 1;
|
weatherUnit = 1;
|
||||||
@@ -683,8 +685,7 @@ public class LaxasFitDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
int weightKg = activityUser.getWeightKg();
|
int weightKg = activityUser.getWeightKg();
|
||||||
|
|
||||||
byte distanceUnit = UNIT_METRIC;
|
byte distanceUnit = UNIT_METRIC;
|
||||||
String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
|
if (GBApplication.getPrefs().getDistanceUnit() == DistanceUnit.IMPERIAL) {
|
||||||
if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) {
|
|
||||||
distanceUnit = UNIT_IMPERIAL;
|
distanceUnit = UNIT_IMPERIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-6
@@ -64,6 +64,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.RecordedDataTypes;
|
import nodomain.freeyourgadget.gadgetbridge.model.RecordedDataTypes;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||||
@@ -100,7 +101,7 @@ import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
|||||||
public class LefunDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
public class LefunDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(LefunDeviceSupport.class);
|
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 final Queue<Request> queuedRequests = new ConcurrentLinkedQueue<>();
|
||||||
|
|
||||||
private int lastStepsCount = -1;
|
private int lastStepsCount = -1;
|
||||||
@@ -338,7 +339,7 @@ public class LefunDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM: {
|
case SettingsActivity.PREF_UNIT_DISTANCE: {
|
||||||
sendUnitsSetting(null);
|
sendUnitsSetting(null);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -357,12 +358,10 @@ public class LefunDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
* @param builder the transaction builder to append to
|
* @param builder the transaction builder to append to
|
||||||
*/
|
*/
|
||||||
private void sendUnitsSetting(TransactionBuilder builder) {
|
private void sendUnitsSetting(TransactionBuilder builder) {
|
||||||
Prefs prefs = GBApplication.getPrefs();
|
final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit();
|
||||||
String units = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM,
|
|
||||||
getContext().getString(R.string.p_unit_metric));
|
|
||||||
|
|
||||||
byte lefunUnits;
|
byte lefunUnits;
|
||||||
if (getContext().getString(R.string.p_unit_metric).equals(units)) {
|
if (distanceUnit == DistanceUnit.METRIC) {
|
||||||
lefunUnits = SettingsCommand.MEASUREMENT_UNIT_METRIC;
|
lefunUnits = SettingsCommand.MEASUREMENT_UNIT_METRIC;
|
||||||
} else {
|
} else {
|
||||||
lefunUnits = SettingsCommand.MEASUREMENT_UNIT_IMPERIAL;
|
lefunUnits = SettingsCommand.MEASUREMENT_UNIT_IMPERIAL;
|
||||||
|
|||||||
+4
-3
@@ -71,6 +71,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.BatteryState;
|
import nodomain.freeyourgadget.gadgetbridge.model.BatteryState;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||||
@@ -862,7 +863,7 @@ public class WatchXPlusDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
builder = performInitialized("sendConfig: " + config);
|
builder = performInitialized("sendConfig: " + config);
|
||||||
switch (config) {
|
switch (config) {
|
||||||
// settings from App Settings
|
// settings from App Settings
|
||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
case SettingsActivity.PREF_UNIT_DISTANCE:
|
||||||
setUnitsSettings();
|
setUnitsSettings();
|
||||||
break;
|
break;
|
||||||
case ActivityUser.PREF_USER_STEPS_GOAL:
|
case ActivityUser.PREF_USER_STEPS_GOAL:
|
||||||
@@ -1094,9 +1095,9 @@ public class WatchXPlusDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
*/
|
*/
|
||||||
private void setUnitsSettings() {
|
private void setUnitsSettings() {
|
||||||
int units = 0;
|
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;
|
units = 1;
|
||||||
LOG.info(" Changed units: imperial ");
|
LOG.info(" Changed units: imperial ");
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+7
-5
@@ -32,6 +32,7 @@ import java.util.SimpleTimeZone;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
|
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventBatteryInfo;
|
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.entities.User;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.BatteryState;
|
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.AbstractBTLESingleDeviceSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService;
|
||||||
@@ -153,9 +155,9 @@ public class MijiaLywsdSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
builder.read(MijiaLywsdSupport.UUID_TIME);
|
builder.read(MijiaLywsdSupport.UUID_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setTemperatureScale(TransactionBuilder builder, SharedPreferences prefs) {
|
private void setTemperatureScale(TransactionBuilder builder) {
|
||||||
String scale = prefs.getString(PREF_TEMPERATURE_SCALE_CF, "");
|
final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
|
||||||
builder.write(MijiaLywsdSupport.UUID_SCALE, new byte[]{(byte) ("f".equals(scale) ? 0x01 : 0xff)});
|
builder.write(MijiaLywsdSupport.UUID_SCALE, (byte) (temperatureUnit == TemperatureUnit.FAHRENHEIT ? 0x01 : 0xff));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setComfortLevel(TransactionBuilder builder, SharedPreferences prefs) {
|
private void setComfortLevel(TransactionBuilder builder, SharedPreferences prefs) {
|
||||||
@@ -485,8 +487,8 @@ public class MijiaLywsdSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
TransactionBuilder builder = performInitialized("Sending configuration for option: " + config);
|
TransactionBuilder builder = performInitialized("Sending configuration for option: " + config);
|
||||||
|
|
||||||
switch (config) {
|
switch (config) {
|
||||||
case PREF_TEMPERATURE_SCALE_CF:
|
case SettingsActivity.PREF_UNIT_TEMPERATURE:
|
||||||
setTemperatureScale(builder, prefs);
|
setTemperatureScale(builder);
|
||||||
break;
|
break;
|
||||||
case PREF_MIJIA_LYWSD_COMFORT_TEMPERATURE_LOWER:
|
case PREF_MIJIA_LYWSD_COMFORT_TEMPERATURE_LOWER:
|
||||||
case PREF_MIJIA_LYWSD_COMFORT_TEMPERATURE_UPPER:
|
case PREF_MIJIA_LYWSD_COMFORT_TEMPERATURE_UPPER:
|
||||||
|
|||||||
+10
-4
@@ -32,6 +32,7 @@ import java.util.UUID;
|
|||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
|
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventVersionInfo;
|
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.devices.miscale.MiScaleSampleProvider;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.entities.MiScaleWeightSample;
|
import nodomain.freeyourgadget.gadgetbridge.entities.MiScaleWeightSample;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
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.AbstractBTLESingleDeviceSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattCharacteristic;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattCharacteristic;
|
||||||
@@ -188,10 +190,14 @@ public class MiSmartScaleDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
try {
|
try {
|
||||||
TransactionBuilder builder = performInitialized("config");
|
TransactionBuilder builder = performInitialized("config");
|
||||||
|
|
||||||
if (config.equals(PREF_MISCALE_WEIGHT_UNIT)) {
|
if (config.equals(SettingsActivity.PREF_UNIT_WEIGHT)) {
|
||||||
int unit = Integer.parseInt(prefs.getString(PREF_MISCALE_WEIGHT_UNIT, "0"));
|
final WeightUnit weightUnit = GBApplication.getPrefs().getWeightUnit();
|
||||||
|
final byte unitByte = switch (weightUnit) {
|
||||||
setConfigValue(builder, CFG_WEIGHT_UNIT, (byte)unit);
|
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)) {
|
} else if (config.equals(PREF_MISCALE_SMALL_OBJECTS)) {
|
||||||
boolean enabled = prefs.getBoolean(PREF_MISCALE_SMALL_OBJECTS, false);
|
boolean enabled = prefs.getBoolean(PREF_MISCALE_SMALL_OBJECTS, false);
|
||||||
|
|
||||||
|
|||||||
+7
-7
@@ -104,6 +104,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.BatteryState;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.model.CalendarEventSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.CalendarEventSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||||
@@ -607,16 +608,15 @@ public class MoyoungDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setMeasurementSystem(TransactionBuilder builder) {
|
private void setMeasurementSystem(TransactionBuilder builder) {
|
||||||
Prefs prefs = GBApplication.getPrefs();
|
final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit();
|
||||||
String unit = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
|
|
||||||
|
|
||||||
MoyoungEnumMetricSystem metricSystem = null;
|
MoyoungEnumMetricSystem metricSystem = null;
|
||||||
if (unit.equals(getContext().getString(R.string.p_unit_metric)))
|
if (distanceUnit == DistanceUnit.METRIC)
|
||||||
metricSystem = MoyoungEnumMetricSystem.METRIC_SYSTEM;
|
metricSystem = MoyoungEnumMetricSystem.METRIC_SYSTEM;
|
||||||
else if (unit.equals(getContext().getString(R.string.p_unit_imperial)))
|
else if (distanceUnit == DistanceUnit.IMPERIAL)
|
||||||
metricSystem = MoyoungEnumMetricSystem.IMPERIAL_SYSTEM;
|
metricSystem = MoyoungEnumMetricSystem.IMPERIAL_SYSTEM;
|
||||||
else
|
else
|
||||||
LOG.warn("Invalid unit preference: {}", unit);
|
LOG.warn("Invalid unit preference: {}", distanceUnit);
|
||||||
|
|
||||||
if (metricSystem != null) {
|
if (metricSystem != null) {
|
||||||
if (builder == null)
|
if (builder == null)
|
||||||
@@ -1606,7 +1606,7 @@ public class MoyoungDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
sendSetting(getSetting("TIME_SYSTEM"), timeSystem);
|
sendSetting(getSetting("TIME_SYSTEM"), timeSystem);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
case SettingsActivity.PREF_UNIT_DISTANCE:
|
||||||
setMeasurementSystem(null);
|
setMeasurementSystem(null);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1854,7 +1854,7 @@ public class MoyoungDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
// case "METRIC_SYSTEM":
|
// case "METRIC_SYSTEM":
|
||||||
// MoyoungEnumMetricSystem metricSystem = (MoyoungEnumMetricSystem) value;
|
// MoyoungEnumMetricSystem metricSystem = (MoyoungEnumMetricSystem) value;
|
||||||
// if (metricSystem == MoyoungEnumMetricSystem.METRIC_SYSTEM)
|
// 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)
|
// else if (metricSystem == MoyoungEnumMetricSystem.IMPERIAL_SYSTEM)
|
||||||
// changedProperties.put(DeviceSettingsPreferenceConst.PREF_MEASUREMENTSYSTEM, getContext().getString(R.string.p_unit_imperial));
|
// changedProperties.put(DeviceSettingsPreferenceConst.PREF_MEASUREMENTSYSTEM, getContext().getString(R.string.p_unit_imperial));
|
||||||
// else
|
// else
|
||||||
|
|||||||
+4
-3
@@ -49,6 +49,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
|
||||||
@@ -262,7 +263,7 @@ public class No1F1Support extends AbstractBTLESingleDeviceSupport {
|
|||||||
try {
|
try {
|
||||||
builder = performInitialized("Sending configuration for option: " + config);
|
builder = performInitialized("Sending configuration for option: " + config);
|
||||||
switch (config) {
|
switch (config) {
|
||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
case SettingsActivity.PREF_UNIT_DISTANCE:
|
||||||
setDisplaySettings(builder);
|
setDisplaySettings(builder);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -304,8 +305,8 @@ public class No1F1Support extends AbstractBTLESingleDeviceSupport {
|
|||||||
0x00, // 1 - display distance in kilometers, 2 - in miles
|
0x00, // 1 - display distance in kilometers, 2 - in miles
|
||||||
0x00 // 1 - display 24-hour clock, 2 - for 12-hour with AM/PM
|
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));
|
final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit();
|
||||||
if (units.equals(getContext().getString(R.string.p_unit_metric))) {
|
if (distanceUnit == DistanceUnit.METRIC) {
|
||||||
displayBytes[1] = 1;
|
displayBytes[1] = 1;
|
||||||
} else {
|
} else {
|
||||||
displayBytes[1] = 2;
|
displayBytes[1] = 2;
|
||||||
|
|||||||
+3
-4
@@ -41,8 +41,6 @@ import java.util.SimpleTimeZone;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
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.GBDeviceEvent;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventAppInfo;
|
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventAppInfo;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventAppManagement;
|
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.NotificationSpec.Action;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.RecordedDataTypes;
|
import nodomain.freeyourgadget.gadgetbridge.model.RecordedDataTypes;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
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.Weather;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.WeatherMapper;
|
import nodomain.freeyourgadget.gadgetbridge.model.weather.WeatherMapper;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol;
|
import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol;
|
||||||
@@ -1157,8 +1156,8 @@ public class PebbleProtocol extends GBDeviceProtocol {
|
|||||||
tomorrowConditionCode = tomorrow.getConditionCode();
|
tomorrowConditionCode = tomorrow.getConditionCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
|
final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
|
||||||
if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) {
|
if (temperatureUnit == TemperatureUnit.FAHRENHEIT) {
|
||||||
currentTemp = (short) (currentTemp * 1.8f + 32);
|
currentTemp = (short) (currentTemp * 1.8f + 32);
|
||||||
todayMax = (short) (todayMax * 1.8f + 32);
|
todayMax = (short) (todayMax * 1.8f + 32);
|
||||||
todayMin = (short) (todayMin * 1.8f + 32);
|
todayMin = (short) (todayMin * 1.8f + 32);
|
||||||
|
|||||||
+4
-5
@@ -38,11 +38,11 @@ import java.util.UUID;
|
|||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.externalevents.AlarmReceiver;
|
import nodomain.freeyourgadget.gadgetbridge.externalevents.AlarmReceiver;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.CalendarEventSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.CalendarEventSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||||
@@ -114,8 +114,8 @@ public class PebbleSupport extends AbstractSerialDeviceSupport {
|
|||||||
// Catch fake URLs first
|
// Catch fake URLs first
|
||||||
if (uri.equals(Uri.parse("fake://health"))) {
|
if (uri.equals(Uri.parse("fake://health"))) {
|
||||||
getDeviceIOThread().write(pebbleProtocol.encodeActivateHealth(true));
|
getDeviceIOThread().write(pebbleProtocol.encodeActivateHealth(true));
|
||||||
String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, getContext().getString(R.string.p_unit_metric));
|
final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit();
|
||||||
if (units.equals(getContext().getString(R.string.p_unit_metric))) {
|
if (distanceUnit == DistanceUnit.METRIC) {
|
||||||
pebbleIoThread.write(pebbleProtocol.encodeSetSaneDistanceUnit(true));
|
pebbleIoThread.write(pebbleProtocol.encodeSetSaneDistanceUnit(true));
|
||||||
} else {
|
} else {
|
||||||
pebbleIoThread.write(pebbleProtocol.encodeSetSaneDistanceUnit(false));
|
pebbleIoThread.write(pebbleProtocol.encodeSetSaneDistanceUnit(false));
|
||||||
@@ -145,8 +145,7 @@ public class PebbleSupport extends AbstractSerialDeviceSupport {
|
|||||||
while (keysIterator.hasNext()) {
|
while (keysIterator.hasNext()) {
|
||||||
String keyStr = keysIterator.next();
|
String keyStr = keysIterator.next();
|
||||||
Object object = json.get(keyStr);
|
Object object = json.get(keyStr);
|
||||||
if (object instanceof JSONArray) {
|
if (object instanceof JSONArray jsonArray) {
|
||||||
JSONArray jsonArray = (JSONArray) object;
|
|
||||||
byte[] byteArray = new byte[jsonArray.length()];
|
byte[] byteArray = new byte[jsonArray.length()];
|
||||||
for (int i = 0; i < jsonArray.length(); i++) {
|
for (int i = 0; i < jsonArray.length(); i++) {
|
||||||
byteArray[i] = ((Integer) jsonArray.get(i)).byteValue();
|
byteArray[i] = ((Integer) jsonArray.get(i)).byteValue();
|
||||||
|
|||||||
+4
-4
@@ -123,6 +123,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceApp;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceApp;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
|
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.GenericItem;
|
import nodomain.freeyourgadget.gadgetbridge.model.GenericItem;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.ItemWithDetails;
|
import nodomain.freeyourgadget.gadgetbridge.model.ItemWithDetails;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
|
||||||
@@ -571,10 +572,9 @@ public class FossilHRWatchAdapter extends FossilWatchAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setUnitsConfig() {
|
private void setUnitsConfig() {
|
||||||
Prefs prefs = GBApplication.getPrefs();
|
final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit();
|
||||||
String unit = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
|
|
||||||
int value = 8; // dont know what this bit means but it was set for me before tampering
|
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
|
value |= (4 | 1); // temperature and distance
|
||||||
}
|
}
|
||||||
queueWrite(
|
queueWrite(
|
||||||
@@ -1939,7 +1939,7 @@ public class FossilHRWatchAdapter extends FossilWatchAdapter {
|
|||||||
saveRawActivityFiles = getDeviceSpecificPreferences().getBoolean("save_raw_activity_files", false);
|
saveRawActivityFiles = getDeviceSpecificPreferences().getBoolean("save_raw_activity_files", false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
case SettingsActivity.PREF_UNIT_DISTANCE:
|
||||||
setUnitsConfig();
|
setUnitsConfig();
|
||||||
break;
|
break;
|
||||||
case DeviceSettingsPreferenceConst.PREF_HYBRID_HR_ACTIVITY_RECOGNITION_RUNNING_ENABLED:
|
case DeviceSettingsPreferenceConst.PREF_HYBRID_HR_ACTIVITY_RECOGNITION_RUNNING_ENABLED:
|
||||||
|
|||||||
+6
-6
@@ -17,6 +17,8 @@
|
|||||||
|
|
||||||
package nodomain.freeyourgadget.gadgetbridge.service.devices.tlw64;
|
package nodomain.freeyourgadget.gadgetbridge.service.devices.tlw64;
|
||||||
|
|
||||||
|
import static org.apache.commons.lang3.math.NumberUtils.min;
|
||||||
|
|
||||||
import android.bluetooth.BluetoothGatt;
|
import android.bluetooth.BluetoothGatt;
|
||||||
import android.bluetooth.BluetoothGattCharacteristic;
|
import android.bluetooth.BluetoothGattCharacteristic;
|
||||||
import android.text.format.DateFormat;
|
import android.text.format.DateFormat;
|
||||||
@@ -35,7 +37,6 @@ import java.util.UUID;
|
|||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
|
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
|
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.ActivityUser;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
|
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.AlarmUtils;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.math.NumberUtils.min;
|
|
||||||
|
|
||||||
public class TLW64Support extends AbstractBTLESingleDeviceSupport {
|
public class TLW64Support extends AbstractBTLESingleDeviceSupport {
|
||||||
|
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(TLW64Support.class);
|
private static final Logger LOG = LoggerFactory.getLogger(TLW64Support.class);
|
||||||
@@ -66,7 +66,7 @@ public class TLW64Support extends AbstractBTLESingleDeviceSupport {
|
|||||||
private final GBDeviceEventVersionInfo versionCmd = new GBDeviceEventVersionInfo();
|
private final GBDeviceEventVersionInfo versionCmd = new GBDeviceEventVersionInfo();
|
||||||
public BluetoothGattCharacteristic ctrlCharacteristic = null;
|
public BluetoothGattCharacteristic ctrlCharacteristic = null;
|
||||||
public BluetoothGattCharacteristic notifyCharacteristic = null;
|
public BluetoothGattCharacteristic notifyCharacteristic = null;
|
||||||
private List<TLW64ActivitySample> samples = new ArrayList<>();
|
private final List<TLW64ActivitySample> samples = new ArrayList<>();
|
||||||
private byte crc = 0;
|
private byte crc = 0;
|
||||||
private int firstTimestamp = 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 distance in kilometers, 2 - in miles
|
||||||
(byte) 0x00 // 1 - display 24-hour clock, 2 - for 12-hour with AM/PM
|
(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));
|
final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit();
|
||||||
if (units.equals(getContext().getString(R.string.p_unit_metric))) {
|
if (distanceUnit == DistanceUnit.METRIC) {
|
||||||
displayBytes[1] = 1;
|
displayBytes[1] = 1;
|
||||||
} else {
|
} else {
|
||||||
displayBytes[1] = 2;
|
displayBytes[1] = 2;
|
||||||
|
|||||||
+4
-4
@@ -47,12 +47,12 @@ import java.util.List;
|
|||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationType;
|
import nodomain.freeyourgadget.gadgetbridge.model.NotificationType;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport;
|
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.NotificationProvider;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.withingssteelhr.communication.notification.NotificationSource;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.withingssteelhr.communication.notification.NotificationSource;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
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 nodomain.freeyourgadget.gadgetbridge.util.StringUtils;
|
||||||
|
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_LANGUAGE;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_LANGUAGE;
|
||||||
@@ -755,9 +755,9 @@ public class WithingsSteelHRDeviceSupport extends AbstractBTLESingleDeviceSuppor
|
|||||||
}
|
}
|
||||||
|
|
||||||
private short getUnit() {
|
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;
|
return UserUnitConstants.UNIT_KM;
|
||||||
} else {
|
} else {
|
||||||
return UserUnitConstants.UNIT_MILES;
|
return UserUnitConstants.UNIT_MILES;
|
||||||
|
|||||||
+6
-8
@@ -35,9 +35,9 @@ import java.util.Locale;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.XiaomiWeatherConditions;
|
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.weather.Weather;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.proto.xiaomi.XiaomiProto;
|
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)
|
// TODO add preference for warning notifications (if that has any effect at all)
|
||||||
|
|
||||||
switch (config) {
|
switch (config) {
|
||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
case SettingsActivity.PREF_UNIT_TEMPERATURE:
|
||||||
setMeasurementSystem();
|
setMeasurementSystem();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -474,16 +474,14 @@ public class XiaomiWeatherService extends AbstractXiaomiService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setMeasurementSystem() {
|
private void setMeasurementSystem() {
|
||||||
final String metricScale = getSupport().getContext().getString(R.string.p_unit_metric);
|
final TemperatureUnit temperatureUnit = GBApplication.getPrefs().getTemperatureUnit();
|
||||||
final String imperialScale = getSupport().getContext().getString(R.string.p_unit_imperial);
|
LOG.info("Setting temperature unit to {}", temperatureUnit);
|
||||||
final String measurementSystem = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, metricScale);
|
|
||||||
LOG.info("Setting measurement system to {}", measurementSystem);
|
|
||||||
|
|
||||||
int unitValue = TEMPERATURE_SCALE_CELSIUS;
|
int unitValue = TEMPERATURE_SCALE_CELSIUS;
|
||||||
|
|
||||||
if (measurementSystem.equals(imperialScale)) {
|
if (temperatureUnit == TemperatureUnit.FAHRENHEIT) {
|
||||||
unitValue = TEMPERATURE_SCALE_FAHRENHEIT;
|
unitValue = TEMPERATURE_SCALE_FAHRENHEIT;
|
||||||
} else if (!measurementSystem.equals(metricScale)) {
|
} else if (temperatureUnit != TemperatureUnit.CELSIUS) {
|
||||||
LOG.warn("Unknown measurement system, defaulting to celsius");
|
LOG.warn("Unknown measurement system, defaulting to celsius");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -55,6 +55,7 @@ import nodomain.freeyourgadget.gadgetbridge.entities.ColmiHeartRateSample;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.BatteryState;
|
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.AbstractBTLESingleDeviceSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService;
|
||||||
@@ -523,7 +524,7 @@ public class YawellRingDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
public void onSendConfiguration(String config) {
|
public void onSendConfiguration(String config) {
|
||||||
final Prefs prefs = getDevicePrefs();
|
final Prefs prefs = getDevicePrefs();
|
||||||
switch (config) {
|
switch (config) {
|
||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
case SettingsActivity.PREF_UNIT_DISTANCE:
|
||||||
setUserPreferences();
|
setUserPreferences();
|
||||||
break;
|
break;
|
||||||
case DeviceSettingsPreferenceConst.PREF_SPO2_ALL_DAY_MONITORING:
|
case DeviceSettingsPreferenceConst.PREF_SPO2_ALL_DAY_MONITORING:
|
||||||
@@ -601,9 +602,8 @@ public class YawellRingDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setUserPreferences() {
|
private void setUserPreferences() {
|
||||||
final Prefs prefs = getDevicePrefs();
|
|
||||||
final ActivityUser user = new ActivityUser();
|
final ActivityUser user = new ActivityUser();
|
||||||
final String measurementSystem = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric");
|
final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit();
|
||||||
byte userGender;
|
byte userGender;
|
||||||
switch (user.getGender()) {
|
switch (user.getGender()) {
|
||||||
case ActivityUser.GENDER_FEMALE:
|
case ActivityUser.GENDER_FEMALE:
|
||||||
@@ -620,7 +620,7 @@ public class YawellRingDeviceSupport extends AbstractBTLESingleDeviceSupport {
|
|||||||
YawellRingConstants.CMD_PREFERENCES,
|
YawellRingConstants.CMD_PREFERENCES,
|
||||||
YawellRingConstants.PREF_WRITE,
|
YawellRingConstants.PREF_WRITE,
|
||||||
0x00, // 24h format, 0x01 is 12h format
|
0x00, // 24h format, 0x01 is 12h format
|
||||||
(byte) ("metric".equals(measurementSystem) ? 0x00 : 0x01),
|
(byte) (distanceUnit == DistanceUnit.METRIC ? 0x00 : 0x01),
|
||||||
userGender,
|
userGender,
|
||||||
(byte) user.getAge(),
|
(byte) user.getAge(),
|
||||||
(byte) user.getHeightCm(),
|
(byte) user.getHeightCm(),
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import java.text.DecimalFormatSymbols;
|
|||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
import nodomain.freeyourgadget.gadgetbridge.model.DistanceUnit;
|
||||||
|
|
||||||
public class FormatUtils {
|
public class FormatUtils {
|
||||||
|
|
||||||
@@ -45,8 +45,8 @@ public class FormatUtils {
|
|||||||
distanceFormatted = distanceMeters / 1000;
|
distanceFormatted = distanceMeters / 1000;
|
||||||
unit = GBApplication.getContext().getString(R.string.distance_format_kilometers);
|
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));
|
final DistanceUnit distanceUnit = GBApplication.getPrefs().getDistanceUnit();
|
||||||
if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) {
|
if (distanceUnit == DistanceUnit.IMPERIAL) {
|
||||||
unit = GBApplication.getContext().getString(R.string.distance_format_feet);
|
unit = GBApplication.getContext().getString(R.string.distance_format_feet);
|
||||||
distanceFormatted = distanceFeet;
|
distanceFormatted = distanceFeet;
|
||||||
if (distanceFeet > 6000) {
|
if (distanceFeet > 6000) {
|
||||||
|
|||||||
@@ -35,10 +35,14 @@ import org.slf4j.LoggerFactory;
|
|||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
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 {
|
public class GBPrefs extends Prefs {
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(GBPrefs.class);
|
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");
|
return getLocalTime("notification_times_end", "22:00");
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isMetricUnits() {
|
public TemperatureUnit getTemperatureUnit() {
|
||||||
return getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric").equals("metric");
|
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() {
|
public boolean syncTime() {
|
||||||
|
|||||||
@@ -2654,8 +2654,8 @@
|
|||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="pref_values_unit_system">
|
<string-array name="pref_values_unit_system">
|
||||||
<item>@string/p_unit_metric</item>
|
<item>metric</item>
|
||||||
<item>@string/p_unit_imperial</item>
|
<item>imperial</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="pref_timeformat_entries">
|
<string-array name="pref_timeformat_entries">
|
||||||
@@ -4703,18 +4703,6 @@
|
|||||||
<item>5</item>
|
<item>5</item>
|
||||||
</string-array>
|
</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">
|
<string-array name="fitness_tracking_apps_package_names">
|
||||||
<item>de.dennisguse.opentracks</item>
|
<item>de.dennisguse.opentracks</item>
|
||||||
<item>de.dennisguse.opentracks.playstore</item>
|
<item>de.dennisguse.opentracks.playstore</item>
|
||||||
@@ -5087,13 +5075,13 @@
|
|||||||
<item>white</item>
|
<item>white</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="temperature_scales_cf">
|
<string-array name="temperature_scales">
|
||||||
<item>@string/temperature_scale_celsius</item>
|
<item>@string/temperature_scale_celsius</item>
|
||||||
<item>@string/temperature_scale_fahrenheit</item>
|
<item>@string/temperature_scale_fahrenheit</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="temperature_scales_cf_values">
|
<string-array name="temperature_scales_values">
|
||||||
<item>c</item>
|
<item>celsius</item>
|
||||||
<item>f</item>
|
<item>fahrenheit</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="femometer_measurement_mode">
|
<string-array name="femometer_measurement_mode">
|
||||||
|
|||||||
@@ -481,6 +481,9 @@
|
|||||||
<string name="pref_title_unit_system">Units</string>
|
<string name="pref_title_unit_system">Units</string>
|
||||||
<string name="pref_title_nautical_units">Nautical 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_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_timeformat">Time format</string>
|
||||||
<string name="pref_title_screentime">Screen on duration</string>
|
<string name="pref_title_screentime">Screen on duration</string>
|
||||||
<string name="pref_title_goal_secondary">Secondary goal</string>
|
<string name="pref_title_goal_secondary">Secondary goal</string>
|
||||||
|
|||||||
@@ -87,9 +87,6 @@
|
|||||||
<item name="p_normal" type="string">normal</item>
|
<item name="p_normal" type="string">normal</item>
|
||||||
<item name="p_sensitive" type="string">sensitive</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_auto" type="string">auto</item>
|
||||||
<item name="p_timeformat_24h" type="string">24h</item>
|
<item name="p_timeformat_24h" type="string">24h</item>
|
||||||
<item name="p_timeformat_am_pm" type="string">am/pm</item>
|
<item name="p_timeformat_am_pm" type="string">am/pm</item>
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<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
|
<SwitchPreferenceCompat
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:icon="@drawable/ic_pressure"
|
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>
|
|
||||||
@@ -71,21 +71,6 @@
|
|||||||
android:title="@string/pref_title_language"
|
android:title="@string/pref_title_language"
|
||||||
android:icon="@drawable/ic_translate"
|
android:icon="@drawable/ic_translate"
|
||||||
app:useSimpleSummaryProvider="true" />
|
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
|
<PreferenceScreen
|
||||||
android:key="pref_screen_rtl"
|
android:key="pref_screen_rtl"
|
||||||
android:title="@string/preferences_rtl_settings"
|
android:title="@string/preferences_rtl_settings"
|
||||||
@@ -115,6 +100,42 @@
|
|||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
</PreferenceCategory>
|
</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
|
<PreferenceCategory
|
||||||
android:key="pref_key_datetime"
|
android:key="pref_key_datetime"
|
||||||
android:title="@string/pref_header_datetime">
|
android:title="@string/pref_header_datetime">
|
||||||
|
|||||||
Reference in New Issue
Block a user