From 9d6f9f7d57322967cce3b0f6150c218b134f7e9e Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Tue, 10 Nov 2020 21:56:00 +0100 Subject: [PATCH] Huami: Unify menu id lookup tables and simplify code --- .../service/devices/huami/HuamiMenuType.java | 53 +++++++++++++++++++ .../service/devices/huami/HuamiSupport.java | 19 ++----- .../amazfitband5/AmazfitBand5Support.java | 42 +-------------- .../huami/amazfitbips/AmazfitBipSSupport.java | 36 +------------ .../huami/amazfitgts/AmazfitGTSSupport.java | 18 +------ .../devices/huami/miband5/MiBand5Support.java | 39 +------------- app/src/main/res/values/arrays.xml | 6 +-- app/src/main/res/values/values.xml | 1 + 8 files changed, 67 insertions(+), 147 deletions(-) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiMenuType.java diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiMenuType.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiMenuType.java new file mode 100644 index 000000000..3fcd9dd7d --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiMenuType.java @@ -0,0 +1,53 @@ +/* Copyright (C) 2020 Andreas Shimokawa + + This file is part of Gadgetbridge. + + Gadgetbridge is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Gadgetbridge is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . */ +package nodomain.freeyourgadget.gadgetbridge.service.devices.huami; + +import java.util.HashMap; +import java.util.Map; + +class HuamiMenuType { + public static final Map idLookup = new HashMap() {{ + put("status", 0x01); + put("hr", 0x02); + put("workout", 0x03); + put("weather", 0x04); + put("notifications", 0x06); + put("more", 0x07); + put("dnd", 0x08); + put("alarm", 0x09); + put("takephoto", 0x0a); + put("music", 0x0b); + put("stopwatch", 0x0c); + put("timer", 0x0d); + put("findphone", 0x0e); + put("mutephone", 0x0f); + put("nfc", 0x10); + put("alipay", 0x11); + put("settings", 0x13); + put("activity", 0x14); + put("eventreminder", 0x15); + put("compass", 0x16); + put("pai", 0x19); + put("worldclock", 0x1a); + put("timer_stopwatch", 0x1b); + put("stress", 0x1c); + put("period", 0x1d); + put("spo2", 0x24); + put("breathing",0x33); + put("alexa", 0x39); + }}; +} \ No newline at end of file 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 1d9723aca..121894387 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 @@ -2388,7 +2388,7 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport { return this; } - protected HuamiSupport setDisplayItemsNew(TransactionBuilder builder, boolean isShortcuts, int defaultSettings, Map keyIdMap) { + protected HuamiSupport setDisplayItemsNew(TransactionBuilder builder, boolean isShortcuts, int defaultSettings) { SharedPreferences prefs = GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()); String pages; List enabledList; @@ -2409,9 +2409,8 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport { } LOG.info("enabled items" + enabledList); - byte[] command = new byte[(keyIdMap.size() + 1) * 4 + 1]; + byte[] command = new byte[(enabledList.size() + 1) * 4 + 1]; command[0] = 0x1e; - // it seem that we first have to put all ENABLED items into the array, oder does matter int pos = 1; int index = 0; @@ -2422,7 +2421,7 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport { command[pos++] = 0x12; for (String key : enabledList) { - Integer id = keyIdMap.get(key); + Integer id = HuamiMenuType.idLookup.get(key); if (id != null) { command[pos++] = (byte) index++; command[pos++] = 0x00; @@ -2430,18 +2429,6 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport { command[pos++] = id.byteValue(); } } - // And then all DISABLED ones, order does not matter - for (Map.Entry entry : keyIdMap.entrySet()) { - String key = entry.getKey(); - int id = entry.getValue(); - - if (!enabledList.contains(key)) { - command[pos++] = (byte) index++; - command[pos++] = 0x01; - command[pos++] = menuType; - command[pos++] = (byte) id; - } - } writeToChunked(builder, 2, command); return this; 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 a584847ee..da9c56b4c 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 @@ -23,8 +23,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.Map; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiFWHelper; @@ -37,49 +35,13 @@ public class AmazfitBand5Support extends MiBand5Support { @Override protected AmazfitBand5Support setDisplayItems(TransactionBuilder builder) { - Map keyIdMap = new LinkedHashMap<>(); - keyIdMap.put("status", 0x01); - keyIdMap.put("pai", 0x19); - keyIdMap.put("hr", 0x02); - keyIdMap.put("spo2", 0x24); - keyIdMap.put("notifications", 0x06); - keyIdMap.put("breathing", 0x33); - keyIdMap.put("eventreminder", 0x15); - keyIdMap.put("weather", 0x04); - keyIdMap.put("workout", 0x03); - keyIdMap.put("more", 0x07); - keyIdMap.put("stress", 0x1c); - keyIdMap.put("period", 0x1d); - - setDisplayItemsNew(builder, false, R.array.pref_amazfitband5_display_items_default, keyIdMap); + setDisplayItemsNew(builder, false, R.array.pref_amazfitband5_display_items_default); return this; } @Override protected AmazfitBand5Support setShortcuts(TransactionBuilder builder) { - Map keyIdMap = new LinkedHashMap<>(); - keyIdMap.put("notifications", 0x06); - keyIdMap.put("weather", 0x04); - keyIdMap.put("music", 0x0b); - keyIdMap.put("timer", 0x0d); - keyIdMap.put("alarm", 0x09); - keyIdMap.put("findphone", 0x0e); - keyIdMap.put("worldclock", 0x1a); - keyIdMap.put("status", 0x01); - keyIdMap.put("pai", 0x19); - keyIdMap.put("hr", 0x02); - keyIdMap.put("spo2", 0x24); - keyIdMap.put("stress", 0x1c); - keyIdMap.put("eventreminder", 0x15); - keyIdMap.put("dnd", 0x08); - keyIdMap.put("stopwatch", 0x0c); - keyIdMap.put("workout", 0x03); - keyIdMap.put("mutephone", 0x0f); - keyIdMap.put("period", 0x1d); - keyIdMap.put("takephoto", 0x0a); - keyIdMap.put("alexa", 0x39); - setDisplayItemsNew(builder, true, R.array.pref_amazfitband5_shortcuts_default, keyIdMap); - + setDisplayItemsNew(builder, true, R.array.pref_amazfitband5_shortcuts_default); 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 0b1a49e39..98526d557 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 @@ -17,7 +17,6 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitbips; import android.content.Context; -import android.content.SharedPreferences; import android.net.Uri; import org.slf4j.Logger; @@ -26,15 +25,8 @@ 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.LinkedHashMap; -import java.util.Map; -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.devices.huami.amazfitbips.AmazfitBipSFWHelper; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; @@ -117,37 +109,13 @@ public class AmazfitBipSSupport extends AmazfitBipSupport { @Override protected AmazfitBipSSupport setDisplayItems(TransactionBuilder builder) { - Map keyIdMap = new LinkedHashMap<>(); - keyIdMap.put("status", 0x01); - keyIdMap.put("hr", 0x02); - keyIdMap.put("pai", 0x19); - keyIdMap.put("workout", 0x03); - keyIdMap.put("alipay", 0x11); - keyIdMap.put("nfc", 0x10); - keyIdMap.put("weather", 0x04); - keyIdMap.put("alarm", 0x09); - keyIdMap.put("timer", 0x1b); - keyIdMap.put("compass", 0x16); - keyIdMap.put("worldclock", 0x1a); - keyIdMap.put("music", 0x0b); - keyIdMap.put("settings", 0x13); - - setDisplayItemsNew(builder, false, R.array.pref_bips_display_items_default, keyIdMap); + setDisplayItemsNew(builder, false, R.array.pref_bips_display_items_default); return this; } @Override protected AmazfitBipSSupport setShortcuts(TransactionBuilder builder) { - 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); + setDisplayItemsNew(builder, true, R.array.pref_bips_display_items_default); 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 46bcff777..e09d55a7b 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 @@ -23,8 +23,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.Map; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiFWHelper; @@ -66,21 +64,7 @@ public class AmazfitGTSSupport extends AmazfitBipSupport { @Override protected AmazfitGTSSupport setDisplayItems(TransactionBuilder builder) { - Map keyIdMap = new LinkedHashMap<>(); - keyIdMap.put("status", 0x01); - keyIdMap.put("pai", 0x19); - keyIdMap.put("hr", 0x02); - keyIdMap.put("workout", 0x03); - keyIdMap.put("activity", 0x14); - keyIdMap.put("weather", 0x04); - keyIdMap.put("music", 0x0b); - keyIdMap.put("notifications", 0x06); - keyIdMap.put("alarm", 0x09); - keyIdMap.put("eventreminder", 0x15); - keyIdMap.put("more", 0x07); - keyIdMap.put("settings", 0x13); - - setDisplayItemsNew(builder, false, R.array.pref_gts_display_items_default, keyIdMap); + setDisplayItemsNew(builder, false, R.array.pref_gts_display_items_default); 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 af31c9969..ef03535dc 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 @@ -23,8 +23,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.Map; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiFWHelper; @@ -37,46 +35,13 @@ public class MiBand5Support extends MiBand4Support { @Override protected MiBand5Support setDisplayItems(TransactionBuilder builder) { - Map keyIdMap = new LinkedHashMap<>(); - keyIdMap.put("status", 0x01); - keyIdMap.put("pai", 0x19); - keyIdMap.put("hr", 0x02); - keyIdMap.put("notifications", 0x06); - keyIdMap.put("breathing", 0x33); - keyIdMap.put("eventreminder", 0x15); - keyIdMap.put("weather", 0x04); - keyIdMap.put("workout", 0x03); - keyIdMap.put("more", 0x07); - keyIdMap.put("stress", 0x1c); - keyIdMap.put("period", 0x1d); - - setDisplayItemsNew(builder, false, R.array.pref_miband5_display_items_default, keyIdMap); + setDisplayItemsNew(builder, false, R.array.pref_miband5_display_items_default); return this; } @Override protected MiBand5Support setShortcuts(TransactionBuilder builder) { - Map keyIdMap = new LinkedHashMap<>(); - keyIdMap.put("notifications", 0x06); - keyIdMap.put("weather", 0x04); - keyIdMap.put("music", 0x0b); - keyIdMap.put("timer", 0x0d); - keyIdMap.put("alarm", 0x09); - keyIdMap.put("findphone", 0x0e); - keyIdMap.put("worldclock", 0x1a); - keyIdMap.put("status", 0x01); - keyIdMap.put("pai", 0x19); - keyIdMap.put("hr", 0x02); - keyIdMap.put("stress", 0x1c); - keyIdMap.put("eventreminder", 0x15); - keyIdMap.put("dnd", 0x08); - keyIdMap.put("stopwatch", 0x0c); - keyIdMap.put("workout", 0x03); - keyIdMap.put("mutephone", 0x0f); - keyIdMap.put("period", 0x1d); - keyIdMap.put("takephoto", 0x0a); - setDisplayItemsNew(builder, true, R.array.pref_miband5_shortcuts_default, keyIdMap); - + setDisplayItemsNew(builder, true, R.array.pref_miband5_shortcuts_default); return this; } diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 880fbda92..c492e518b 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -356,8 +356,8 @@ - @string/menuitem_weather @string/menuitem_notifications + @string/menuitem_weather @string/menuitem_music @string/menuitem_timer @string/menuitem_alarm @@ -449,8 +449,8 @@ - @string/menuitem_weather @string/menuitem_notifications + @string/menuitem_weather @string/menuitem_music @string/menuitem_timer @string/menuitem_alarm @@ -648,7 +648,7 @@ @string/p_menuitem_nfc @string/p_menuitem_weather @string/p_menuitem_alarm - @string/p_menuitem_timer + @string/p_menuitem_timer_stopwatch @string/p_menuitem_compass @string/p_menuitem_worldclock @string/p_menuitem_music diff --git a/app/src/main/res/values/values.xml b/app/src/main/res/values/values.xml index 923579587..f510a23a3 100644 --- a/app/src/main/res/values/values.xml +++ b/app/src/main/res/values/values.xml @@ -46,6 +46,7 @@ mutephone takephoto alexa + timer_stopwatch off on