mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Zepp OS: Fix measurement system configuration
This commit is contained in:
+35
-1
@@ -79,6 +79,7 @@ import java.util.concurrent.TimeUnit;
|
||||
|
||||
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.deviceevents.GBDeviceEventAppInfo;
|
||||
import nodomain.freeyourgadget.gadgetbridge.capabilities.loyaltycards.LoyaltyCard;
|
||||
@@ -259,11 +260,18 @@ public class ZeppOsSupport extends HuamiSupport implements ZeppOsFileTransferSer
|
||||
case ActivityUser.PREF_USER_SLEEP_DURATION:
|
||||
case ActivityUser.PREF_USER_GOAL_WEIGHT_KG:
|
||||
case ActivityUser.PREF_USER_GOAL_STANDING_TIME_HOURS:
|
||||
case ActivityUser.PREF_USER_GOAL_FAT_BURN_TIME_MINUTES:
|
||||
case ActivityUser.PREF_USER_GOAL_FAT_BURN_TIME_MINUTES: {
|
||||
final TransactionBuilder builder = createTransactionBuilder("set fitness goal");
|
||||
setFitnessGoal(builder);
|
||||
builder.queue(getQueue());
|
||||
return;
|
||||
}
|
||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM: {
|
||||
final TransactionBuilder builder = createTransactionBuilder("set measurement system");
|
||||
setMeasurementSystem(builder);
|
||||
builder.queue(getQueue());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if any of the services handles this config
|
||||
@@ -447,6 +455,32 @@ public class ZeppOsSupport extends HuamiSupport implements ZeppOsFileTransferSer
|
||||
return this;
|
||||
}
|
||||
|
||||
protected void setMeasurementSystem(final TransactionBuilder builder) {
|
||||
final String measurementSystem = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, "metric");
|
||||
LOG.info("Setting measurement system to {}", measurementSystem);
|
||||
|
||||
final byte distanceUnit;
|
||||
final byte temperatureUnit;
|
||||
final byte weightUnit;
|
||||
|
||||
// FIXME we should be able to configure these separately
|
||||
if ("metric".equals(measurementSystem)) {
|
||||
distanceUnit = 0;
|
||||
temperatureUnit = 0;
|
||||
weightUnit = 0;
|
||||
} else {
|
||||
distanceUnit = 1;
|
||||
temperatureUnit = 1;
|
||||
weightUnit = 2;
|
||||
}
|
||||
|
||||
configService.newSetter()
|
||||
.setByte(ZeppOsConfigService.ConfigArg.DISTANCE_UNIT, distanceUnit)
|
||||
.setByte(TEMPERATURE_UNIT, temperatureUnit)
|
||||
.setByte(ZeppOsConfigService.ConfigArg.WEIGHT_UNIT, weightUnit)
|
||||
.write(builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ZeppOsSupport setUserInfo(final TransactionBuilder builder) {
|
||||
LOG.info("Attempting to set user info...");
|
||||
|
||||
+15
-1
@@ -421,15 +421,17 @@ public class ZeppOsConfigService extends AbstractZeppOsService {
|
||||
// System
|
||||
TIME_FORMAT(ConfigGroup.SYSTEM, ConfigType.BYTE, 0x01, PREF_TIMEFORMAT),
|
||||
DATE_FORMAT(ConfigGroup.SYSTEM, ConfigType.STRING, 0x02, PREF_DATEFORMAT),
|
||||
DISTANCE_UNIT(ConfigGroup.SYSTEM, ConfigType.BYTE, 0x05, null), // TODO needs to be handled globally
|
||||
DND_MODE(ConfigGroup.SYSTEM, ConfigType.BYTE, 0x0a, PREF_DO_NOT_DISTURB),
|
||||
DND_SCHEDULED_START(ConfigGroup.SYSTEM, ConfigType.DATETIME_HH_MM, 0x0b, PREF_DO_NOT_DISTURB_START),
|
||||
DND_SCHEDULED_END(ConfigGroup.SYSTEM, ConfigType.DATETIME_HH_MM, 0x0c, PREF_DO_NOT_DISTURB_END),
|
||||
CALL_DELAY(ConfigGroup.SYSTEM, ConfigType.SHORT, 0x11, PREF_NOTIFICATION_DELAY_CALLS),
|
||||
TEMPERATURE_UNIT(ConfigGroup.SYSTEM, ConfigType.BYTE, 0x12, SettingsActivity.PREF_MEASUREMENT_SYSTEM),
|
||||
TEMPERATURE_UNIT(ConfigGroup.SYSTEM, ConfigType.BYTE, 0x12, null), // TODO needs to be handled globally
|
||||
TIME_FORMAT_FOLLOWS_PHONE(ConfigGroup.SYSTEM, ConfigType.BOOL, 0x13, null /* special case, handled below */),
|
||||
UPPER_BUTTON_LONG_PRESS(ConfigGroup.SYSTEM, ConfigType.STRING_LIST, 0x15, PREF_UPPER_BUTTON_LONG_PRESS),
|
||||
LOWER_BUTTON_PRESS(ConfigGroup.SYSTEM, ConfigType.STRING_LIST, 0x16, PREF_LOWER_BUTTON_SHORT_PRESS),
|
||||
DISPLAY_CALLER(ConfigGroup.SYSTEM, ConfigType.BOOL, 0x18, PREF_DISPLAY_CALLER),
|
||||
WEIGHT_UNIT(ConfigGroup.SYSTEM, ConfigType.BYTE, 0x1a, null), // TODO needs to be handled globally
|
||||
NIGHT_MODE_MODE(ConfigGroup.SYSTEM, ConfigType.BYTE, 0x1b, PREF_NIGHT_MODE),
|
||||
NIGHT_MODE_SCHEDULED_START(ConfigGroup.SYSTEM, ConfigType.DATETIME_HH_MM, 0x1c, PREF_NIGHT_MODE_START),
|
||||
NIGHT_MODE_SCHEDULED_END(ConfigGroup.SYSTEM, ConfigType.DATETIME_HH_MM, 0x1d, PREF_NIGHT_MODE_END),
|
||||
@@ -1731,11 +1733,23 @@ public class ZeppOsConfigService extends AbstractZeppOsService {
|
||||
put((byte) 0x03, DoNotDisturb.ALWAYS);
|
||||
}};
|
||||
|
||||
private static final Map<Byte, Enum<?>> DISTANCE_UNIT_MAP = new HashMap<Byte, Enum<?>>() {{
|
||||
put((byte) 0x00, MiBandConst.DistanceUnit.METRIC);
|
||||
put((byte) 0x01, MiBandConst.DistanceUnit.IMPERIAL);
|
||||
}};
|
||||
|
||||
private static final Map<Byte, Enum<?>> TEMPERATURE_UNIT_MAP = new HashMap<Byte, Enum<?>>() {{
|
||||
put((byte) 0x00, MiBandConst.DistanceUnit.METRIC);
|
||||
put((byte) 0x01, MiBandConst.DistanceUnit.IMPERIAL);
|
||||
}};
|
||||
|
||||
private static final Map<Byte, Enum<?>> WEIGHT_UNIT_MAP = new HashMap<Byte, Enum<?>>() {{
|
||||
put((byte) 0x00, MiBandConst.DistanceUnit.METRIC);
|
||||
//put((byte) 0x01, MiBandConst.DistanceUnit.IMPERIAL); // jin (500g)
|
||||
put((byte) 0x02, MiBandConst.DistanceUnit.IMPERIAL);
|
||||
//put((byte) 0x03, MiBandConst.DistanceUnit.IMPERIAL); // stone (1 stone = 14 pounds)
|
||||
}};
|
||||
|
||||
private static final Map<Byte, String> TIME_FORMAT_MAP = new HashMap<Byte, String>() {{
|
||||
put((byte) 0x00, DeviceSettingsPreferenceConst.PREF_TIMEFORMAT_24H);
|
||||
put((byte) 0x01, DeviceSettingsPreferenceConst.PREF_TIMEFORMAT_12H);
|
||||
|
||||
Reference in New Issue
Block a user