diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/amazfitbips/AmazfitBipSCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/amazfitbips/AmazfitBipSCoordinator.java index 9acf0a5dd..fe1e27b67 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/amazfitbips/AmazfitBipSCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/amazfitbips/AmazfitBipSCoordinator.java @@ -79,7 +79,7 @@ public class AmazfitBipSCoordinator extends HuamiCoordinator { @Override public int[] getSupportedDeviceSpecificSettings(GBDevice device) { return new int[]{ - R.xml.devicesettings_amazfitbip, + R.xml.devicesettings_amazfitbips, R.xml.devicesettings_timeformat, R.xml.devicesettings_wearlocation, R.xml.devicesettings_custom_emoji_font, diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipSSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipSSupport.java index 7c113b1e3..36a9b3a66 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipSSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipSSupport.java @@ -17,6 +17,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitbip; import android.content.Context; +import android.content.SharedPreferences; import android.net.Uri; import org.slf4j.Logger; @@ -25,7 +26,13 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; +import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiFWHelper; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; @@ -83,4 +90,62 @@ public class AmazfitBipSSupport extends AmazfitBipSupport { public HuamiFWHelper createFWHelper(Uri uri, Context context) throws IOException { return null; } + + @Override + protected AmazfitBipSSupport setDisplayItems(TransactionBuilder builder) { + if (gbDevice.getFirmwareVersion() == null) { + LOG.warn("Device not initialized yet, won't set menu items"); + return this; + } + + SharedPreferences prefs = GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()); + Set pages = prefs.getStringSet(HuamiConst.PREF_DISPLAY_ITEMS, new HashSet<>(Arrays.asList(getContext().getResources().getStringArray(R.array.pref_bips_display_items_default)))); + LOG.info("Setting display items to " + (pages == null ? "none" : pages)); + byte[] command = new byte[]{ + 0x1E, + 0x00, 0x00, (byte) 0xFF, 0x01, // Status + 0x01, 0x00, (byte) 0xFF, 0x02, // HR + 0x02, 0x00, (byte) 0xFF, 0x19, // PAI + 0x03, 0x00, (byte) 0xFF, 0x03, // Workout + 0x04, 0x00, (byte) 0xFF, 0x11, // Alipay + 0x05, 0x00, (byte) 0xFF, 0x10, // NFC + 0x06, 0x00, (byte) 0xFF, 0x04, // Weather + 0x07, 0x00, (byte) 0xFF, 0x09, // Alarm + 0x08, 0x00, (byte) 0xFF, 0x1B, // Timer + 0x09, 0x00, (byte) 0xFF, 0x16, // Compass + 0x0A, 0x00, (byte) 0xFF, 0x1A, // Unknown + 0x0B, 0x00, (byte) 0xFF, 0x0B, // Music + 0x0C, 0x00, (byte) 0xFF, 0x13 // Settings + }; + + String[] keys = {"status", "hr", "pai", "workout", "alipay", "nfc", "weather", "alarm", "timer", "compass", "unknown", "music", "settings"}; + byte[] ids = {1, 2, 25, 3, 17, 16, 4, 9, 27, 22, 26, 11, 19}; + + if (pages != null) { + // it seem that we first have to put all ENABLED items into the array + int pos = 1; + for (int i = 0; i < keys.length; i++) { + String key = keys[i]; + byte id = ids[i]; + if (pages.contains(key)) { + command[pos + 1] = 0x00; + command[pos + 3] = id; + pos += 4; + } + } + // And then all DISABLED ones + for (int i = 0; i < keys.length; i++) { + String key = keys[i]; + byte id = ids[i]; + if (!pages.contains(key)) { + command[pos + 1] = 0x01; + command[pos + 3] = id; + pos += 4; + } + } + writeToChunked(builder, 2, command); + } + + return this; + } } diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index a99461b48..be91fc25d 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -426,6 +426,54 @@ @string/p_menuitem_more + + @string/menuitem_status + @string/menuitem_hr + @string/menuitem_pai + @string/menuitem_workout + @string/menuitem_alipay + @string/menuitem_nfc + @string/menuitem_weather + @string/menuitem_alarm + @string/menuitem_timer + @string/menuitem_compass + @string/menuitem_unknown + @string/menuitem_music + @string/menuitem_settings + + + + @string/p_menuitem_status + @string/p_menuitem_hr + @string/p_menuitem_pai + @string/p_menuitem_workout + @string/p_menuitem_alipay + @string/p_menuitem_nfc + @string/p_menuitem_weather + @string/p_menuitem_alarm + @string/p_menuitem_timer + @string/p_menuitem_compass + @string/p_menuitem_unknown + @string/p_menuitem_music + @string/p_menuitem_settings + + + + @string/p_menuitem_status + @string/p_menuitem_hr + @string/p_menuitem_pai + @string/p_menuitem_workout + @string/p_menuitem_alipay + @string/p_menuitem_nfc + @string/p_menuitem_weather + @string/p_menuitem_alarm + @string/p_menuitem_timer + @string/p_menuitem_compass + @string/p_menuitem_unknown + @string/p_menuitem_music + @string/p_menuitem_settings + + @string/unit_metric @string/unit_imperial diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0407727e7..5cf5ba45e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -772,6 +772,7 @@ Heart Rate Event Reminder Workout + Unknown Minutes: Hours: Seconds: diff --git a/app/src/main/res/values/values.xml b/app/src/main/res/values/values.xml index ca612c270..6933e94ee 100644 --- a/app/src/main/res/values/values.xml +++ b/app/src/main/res/values/values.xml @@ -37,6 +37,7 @@ pai eventreminder workout + unknown off on diff --git a/app/src/main/res/xml/devicesettings_amazfitbips.xml b/app/src/main/res/xml/devicesettings_amazfitbips.xml new file mode 100644 index 000000000..e29b0001a --- /dev/null +++ b/app/src/main/res/xml/devicesettings_amazfitbips.xml @@ -0,0 +1,20 @@ + + + + +