Zepp OS: Fix measurement system configuration

This commit is contained in:
José Rebelo
2025-03-09 15:28:50 +00:00
parent f3b204366c
commit 91fec89ba2
2 changed files with 50 additions and 2 deletions
@@ -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...");
@@ -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);