From 1224cfeffc6a11aef8654439496b5f161dfc59ba Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Wed, 21 Oct 2020 21:43:48 +0200 Subject: [PATCH] Amazfit Bip S: unify shortcuts code with display items code --- .../service/devices/huami/HuamiSupport.java | 19 +++++-- .../amazfitband5/AmazfitBand5Support.java | 2 +- .../huami/amazfitbips/AmazfitBipSSupport.java | 57 ++++--------------- .../huami/amazfitgts/AmazfitGTSSupport.java | 2 +- .../devices/huami/miband5/MiBand5Support.java | 2 +- 5 files changed, 27 insertions(+), 55 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java index 3245ac2cd..ec06fc75c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java @@ -2313,15 +2313,24 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport { return this; } - protected HuamiSupport setDisplayItemsNew(TransactionBuilder builder, int defaultSettings, Map keyIdMap) { + protected HuamiSupport setDisplayItemsNew(TransactionBuilder builder, boolean isShortcuts, int defaultSettings, Map keyIdMap) { 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(defaultSettings)))); - LOG.info("Setting display items to " + (pages == null ? "none" : pages)); + Set pages; + byte menuType; + if (isShortcuts) { + menuType = (byte) 0xfd; + pages = prefs.getStringSet(HuamiConst.PREF_SHORTCUTS, new HashSet<>(Arrays.asList(getContext().getResources().getStringArray(R.array.pref_bips_shortcuts_default)))); + LOG.info("Setting shortcuts to " + (pages == null ? "none" : pages)); + } else { + menuType = (byte) 0xff; + pages = prefs.getStringSet(HuamiConst.PREF_DISPLAY_ITEMS, new HashSet<>(Arrays.asList(getContext().getResources().getStringArray(defaultSettings)))); + LOG.info("Setting display items to " + (pages == null ? "none" : pages)); + } if (pages != null) { byte[] command = new byte[keyIdMap.size() * 4 + 1]; @@ -2336,7 +2345,7 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport { if (pages.contains(key)) { command[pos++] = (byte) index++; command[pos++] = 0x00; - command[pos++] = (byte) 0xff; + command[pos++] = menuType; command[pos++] = (byte) id; } } @@ -2348,7 +2357,7 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport { if (!pages.contains(key)) { command[pos++] = (byte) index++; command[pos++] = 0x01; - command[pos++] = (byte) 0xff; + command[pos++] = (byte) menuType; command[pos++] = (byte) id; } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitband5/AmazfitBand5Support.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitband5/AmazfitBand5Support.java index 9f350c107..5badad8cf 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitband5/AmazfitBand5Support.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitband5/AmazfitBand5Support.java @@ -51,7 +51,7 @@ public class AmazfitBand5Support extends MiBand5Support { keyIdMap.put("stress", 0x1c); keyIdMap.put("cycles", 0x1d); - setDisplayItemsNew(builder, R.array.pref_amazfitband5_display_items_default, keyIdMap); + setDisplayItemsNew(builder, false, R.array.pref_amazfitband5_display_items_default, keyIdMap); return this; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbips/AmazfitBipSSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbips/AmazfitBipSSupport.java index 686a9291f..0b1a49e39 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbips/AmazfitBipSSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbips/AmazfitBipSSupport.java @@ -132,59 +132,22 @@ public class AmazfitBipSSupport extends AmazfitBipSupport { keyIdMap.put("music", 0x0b); keyIdMap.put("settings", 0x13); - setDisplayItemsNew(builder, R.array.pref_bips_display_items_default, keyIdMap); + setDisplayItemsNew(builder, false, R.array.pref_bips_display_items_default, keyIdMap); return this; } @Override protected AmazfitBipSSupport setShortcuts(TransactionBuilder builder) { - if (gbDevice.getFirmwareVersion() == null) { - LOG.warn("Device not initialized yet, won't set shortcuts"); - return this; - } - - SharedPreferences prefs = GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()); - Set pages = prefs.getStringSet(HuamiConst.PREF_SHORTCUTS, new HashSet<>(Arrays.asList(getContext().getResources().getStringArray(R.array.pref_bips_shortcuts_default)))); - LOG.info("Setting shortcuts to " + (pages == null ? "none" : pages)); - byte[] command = new byte[]{ - 0x1E, - 0x00, 0x00, (byte) 0xFD, 0x01, // Status - 0x01, 0x00, (byte) 0xFD, 0x11, // Alipay - 0x02, 0x00, (byte) 0xFD, 0x10, // NFC - 0x03, 0x00, (byte) 0xFD, 0x19, // PAI - 0x04, 0x00, (byte) 0xFD, 0x02, // HR - 0x05, 0x00, (byte) 0xFD, 0x0B, // Music - 0x06, 0x00, (byte) 0xFD, 0x04, // Weather - }; - - String[] keys = {"status", "alipay", "nfc", "pai", "hr", "music", "weather"}; - byte[] ids = {1, 17, 16, 25, 2, 11, 4}; - - 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); - } + Map keyIdMap = new LinkedHashMap<>(); + keyIdMap.put("status", 0x01); + keyIdMap.put("alipay", 0x11); + keyIdMap.put("nfc", 0x10); + keyIdMap.put("pai", 0x19); + keyIdMap.put("hr", 0x02); + keyIdMap.put("music", 0x0b); + keyIdMap.put("weather", 0x04); + setDisplayItemsNew(builder, true, R.array.pref_bips_display_items_default, keyIdMap); return this; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts/AmazfitGTSSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts/AmazfitGTSSupport.java index 1a7ab2a9b..46bcff777 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts/AmazfitGTSSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts/AmazfitGTSSupport.java @@ -80,7 +80,7 @@ public class AmazfitGTSSupport extends AmazfitBipSupport { keyIdMap.put("more", 0x07); keyIdMap.put("settings", 0x13); - setDisplayItemsNew(builder, R.array.pref_gts_display_items_default, keyIdMap); + setDisplayItemsNew(builder, false, R.array.pref_gts_display_items_default, keyIdMap); return this; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband5/MiBand5Support.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband5/MiBand5Support.java index 8eb2ee7c8..a1bc831f9 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband5/MiBand5Support.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband5/MiBand5Support.java @@ -50,7 +50,7 @@ public class MiBand5Support extends MiBand4Support { keyIdMap.put("stress", 0x1c); keyIdMap.put("cycles", 0x1d); - setDisplayItemsNew(builder, R.array.pref_miband5_display_items_default, keyIdMap); + setDisplayItemsNew(builder, false, R.array.pref_miband5_display_items_default, keyIdMap); return this; }