Amazfit Active 2 NFC Square: Fix recognition

This commit is contained in:
José Rebelo
2025-07-08 20:04:55 +01:00
parent 87d6a677ec
commit f5f2f23793
32 changed files with 143 additions and 119 deletions
@@ -53,35 +53,9 @@ public class HuamiConst {
public static final String MI_BAND4_NAME = "Mi Smart Band 4";
public static final String MI_BAND5_NAME = "Mi Smart Band 5";
public static final String MI_BAND6_NAME = "Mi Smart Band 6";
public static final String AMAZFIT_ACTIVE_NAME = "Amazfit Active";
public static final String AMAZFIT_ACTIVE_2_NAME = "Active 2 (Round)";
public static final String AMAZFIT_ACTIVE_2_NFC_NAME = "Active 2 NFC (Round)";
public static final String AMAZFIT_ACTIVE_EDGE_NAME = "Amazfit Active Edge";
public static final String AMAZFIT_BALANCE_NAME = "Amazfit Balance";
public static final String AMAZFIT_BALANCE_2_NAME = "Amazfit Balance 2";
public static final String AMAZFIT_BAND5_NAME = "Amazfit Band 5";
public static final String AMAZFIT_BAND7_NAME = "Amazfit Band 7";
public static final String AMAZFIT_NEO_NAME = "Amazfit Neo";
public static final String AMAZFIT_X = "Amazfit X";
public static final String AMAZFIT_BIP5_NAME = "Amazfit Bip 5";
public static final String AMAZFIT_BIP5_UNITY_NAME = "Amazfit Bip 5 Unity";
public static final String AMAZFIT_BIP6_NAME = "Amazfit Bip 6";
public static final String AMAZFIT_GTS3_NAME = "Amazfit GTS 3";
public static final String AMAZFIT_GTS4_NAME = "Amazfit GTS 4";
public static final String AMAZFIT_GTS4_MINI_NAME = "Amazfit GTS 4 Mini";
public static final String AMAZFIT_GTR3_NAME = "Amazfit GTR 3";
public static final String AMAZFIT_GTR3_PRO_NAME = "Amazfit GTR 3 Pro";
public static final String AMAZFIT_GTR4_NAME = "Amazfit GTR 4";
public static final String AMAZFIT_GTR_MINI_NAME = "Amazfit GTR Mini";
public static final String AMAZFIT_TREX_2_NAME = "Amazfit T-Rex 2";
public static final String AMAZFIT_TREX_3_NAME = "Amazfit T-Rex 3";
public static final String AMAZFIT_TREX_ULTRA = "Amazfit T-Rex Ultra";
public static final String AMAZFIT_CHEETAH_PRO_NAME = "Amazfit Cheetah Pro";
public static final String AMAZFIT_CHEETAH_SQUARE_NAME = "Amazfit Cheetah S";
public static final String AMAZFIT_CHEETAH_ROUND_NAME = "Amazfit Cheetah R";
public static final String AMAZFIT_FALCON_NAME = "Amazfit Falcon";
public static final String XIAOMI_SMART_BAND7_NAME = "Xiaomi Smart Band 7";
public static final String XIAOMI_SMART_BAND7_PRO_NAME = "Xiaomi Smart Band 7 Pro";
public static final String PREF_DISPLAY_ITEMS = "display_items";
@@ -77,7 +77,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.service
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
public abstract class ZeppOsCoordinator extends HuamiCoordinator {
public abstract String getDeviceBluetoothName();
public abstract List<String> getDeviceBluetoothNames();
public abstract Set<Integer> getDeviceSources();
@@ -100,7 +100,17 @@ public abstract class ZeppOsCoordinator extends HuamiCoordinator {
// only be used for calls, and Gadgetbridge can't use for pairing.
// **Additionally**, it was also reported on some issues such as #4827 that some devices
// only broadcast the one with the mac address, which Gadgetbridge can use for pairing...
return Pattern.compile("^" + Pattern.quote(getDeviceBluetoothName()) + "([- ]+[A-Z0-9]{4})?$");
final StringBuilder sb = new StringBuilder();
sb.append("^(");
final List<String> deviceBluetoothNames = getDeviceBluetoothNames();
for (String name : deviceBluetoothNames) {
sb.append(Pattern.quote(name)).append("|");
}
sb.setLength(sb.length() - 1); // remove last |
sb.append(")");
sb.append("([- ]+[A-Z0-9]{4})?$");
return Pattern.compile(sb.toString());
}
@NonNull
@@ -149,7 +159,7 @@ public abstract class ZeppOsCoordinator extends HuamiCoordinator {
final ZeppOsFwInstallHandler fwInstallHandler = new ZeppOsFwInstallHandler(
uri,
context,
getDeviceBluetoothName(),
getDeviceBluetoothNames(),
getDeviceSources()
);
return fwInstallHandler.isValid() ? fwInstallHandler : null;
@@ -38,6 +38,7 @@ import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.zip.CRC32;
@@ -60,7 +61,7 @@ public class ZeppOsFwHelper {
private final Uri uri;
private final Context context;
private final String deviceName;
private final List<String> deviceNames;
private final Set<Integer> deviceSources;
private HuamiFirmwareType firmwareType = HuamiFirmwareType.INVALID;
@@ -69,10 +70,10 @@ public class ZeppOsFwHelper {
private String version = "Unknown";
private GBDeviceApp gbDeviceApp = null;
public ZeppOsFwHelper(final Uri uri, final Context context, final String deviceName, final Set<Integer> deviceSources) {
public ZeppOsFwHelper(final Uri uri, final Context context, final List<String> deviceNames, final Set<Integer> deviceSources) {
this.uri = uri;
this.context = context;
this.deviceName = deviceName;
this.deviceNames = deviceNames;
this.deviceSources = deviceSources;
processUri();
@@ -445,12 +446,15 @@ public class ZeppOsFwHelper {
return false;
}
if (!searchString(firmwareBin, deviceName)) {
LOG.warn("Failed to find {} in fwBytes", deviceName);
return false;
for (String deviceName : deviceNames) {
if (searchString(firmwareBin, deviceName)) {
return true;
}
}
return true;
LOG.warn("Failed to find any known device names {} in fwBytes", deviceNames);
return false;
}
public static String getFirmwareVersion(final byte[] firmwareBin) {
@@ -17,6 +17,7 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.straps;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
@@ -30,8 +31,8 @@ public class AmazfitHelioStrapCoordinator extends ZeppOsCoordinator {
}
@Override
public String getDeviceBluetoothName() {
return "Amazfit Helio Strap"; // no mac address at the end
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit Helio Strap"); // no mac address at the end
}
@Override
@@ -16,8 +16,10 @@
along with this program. If not, see <https://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Collections;
import java.util.List;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
/**
* This seems to be the same as the Active 2, but with NFC. The bluetooth name is different, but the
@@ -25,8 +27,9 @@ import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
*/
public class AmazfitActive2NfcCoordinator extends AmazfitActive2RoundCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_ACTIVE_2_NFC_NAME;
public List<String> getDeviceBluetoothNames() {
// FIXME migrate device type to normal active 2
return Collections.singletonList("Active 2 NFC (Round)");
}
@Override
@@ -18,17 +18,19 @@ package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitActive2RoundCoordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_ACTIVE_2_NAME;
public List<String> getDeviceBluetoothNames() {
return Arrays.asList(
"Active 2 (Round)"
);
}
@Override
@@ -17,7 +17,9 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
@@ -32,8 +34,13 @@ public class AmazfitActive2SquareCoordinator extends ZeppOsCoordinator {
}
@Override
public String getDeviceBluetoothName() {
return "Active 2 (Square)";
public List<String> getDeviceBluetoothNames() {
return Arrays.asList(
"Active 2 (Square)", // never seen, assumption following the Round one
"Active 2 NFC (Square)", // never seen, assumption following the Round one
"Active 2 Square", // never seen
"Active 2 NFC Square" // #5056
);
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitActiveCoordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_ACTIVE_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit Active");
}
@Override
@@ -17,11 +17,12 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
@@ -32,8 +33,8 @@ public class AmazfitActiveEdgeCoordinator extends ZeppOsCoordinator {
}
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_ACTIVE_EDGE_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit Active Edge");
}
@Override
@@ -17,11 +17,12 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
@@ -32,8 +33,8 @@ public class AmazfitBalance2Coordinator extends ZeppOsCoordinator {
}
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_BALANCE_2_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit Balance 2");
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitBalanceCoordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_BALANCE_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit Balance");
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitBand7Coordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_BAND7_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit Band 7");
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitBip5Coordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_BIP5_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit Bip 5");
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitBip5UnityCoordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_BIP5_UNITY_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit Bip 5 Unity");
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitBip6Coordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_BIP6_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit Bip 6");
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitCheetahProCoordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_CHEETAH_PRO_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit Cheetah Pro");
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitCheetahRoundCoordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_CHEETAH_ROUND_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit Cheetah R");
}
@Override
@@ -18,17 +18,17 @@ package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitCheetahSquareCoordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_CHEETAH_SQUARE_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit Cheetah S");
}
@Override
@@ -17,11 +17,12 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
@@ -32,8 +33,8 @@ public class AmazfitFalconCoordinator extends ZeppOsCoordinator {
}
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_FALCON_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit Falcon");
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitGTR3Coordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_GTR3_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit GTR 3");
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitGTR3ProCoordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_GTR3_PRO_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit GTR 3 Pro");
}
@Override
@@ -17,20 +17,21 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitGTR4Coordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_GTR4_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit GTR 4");
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitGTRMiniCoordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_GTR_MINI_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit GTR Mini");
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitGTS3Coordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_GTS3_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit GTS 3");
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitGTS4Coordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_GTS4_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit GTS 4");
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitGTS4MiniCoordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_GTS4_MINI_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit GTS 4 Mini");
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitTRex2Coordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_TREX_2_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit T-Rex 2");
}
@Override
@@ -17,11 +17,12 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
@@ -33,8 +34,8 @@ public class AmazfitTRex3Coordinator extends ZeppOsCoordinator {
}
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_TREX_3_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit T-Rex 3");
}
@Override
@@ -17,18 +17,19 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AmazfitTRexUltraCoordinator extends ZeppOsCoordinator {
@Override
public String getDeviceBluetoothName() {
return HuamiConst.AMAZFIT_TREX_ULTRA;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Amazfit T-Rex Ultra");
}
@Override
@@ -17,13 +17,14 @@
package nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.watches;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
@@ -35,8 +36,8 @@ public class MiBand7Coordinator extends ZeppOsCoordinator {
}
@Override
public String getDeviceBluetoothName() {
return HuamiConst.XIAOMI_SMART_BAND7_NAME;
public List<String> getDeviceBluetoothNames() {
return Collections.singletonList("Xiaomi Smart Band 7");
}
@Override
@@ -32,6 +32,7 @@ import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.R;
@@ -52,10 +53,10 @@ public class ZeppOsFwInstallHandler implements InstallHandler {
private final ZeppOsFwHelper mHelper;
public ZeppOsFwInstallHandler(final Uri uri, final Context context, final String deviceName, final Set<Integer> deviceSources) {
public ZeppOsFwInstallHandler(final Uri uri, final Context context, final List<String> deviceNames, final Set<Integer> deviceSources) {
mUri = uri;
mContext = context;
mHelper = new ZeppOsFwHelper(uri, context, deviceName, deviceSources);
mHelper = new ZeppOsFwHelper(uri, context, deviceNames, deviceSources);
}
@Override
@@ -94,7 +94,7 @@ public class ZeppOsFirmwareUpdateOperation extends AbstractZeppOsOperation<ZeppO
fwHelper = new ZeppOsFwHelper(
uri,
getContext(),
((ZeppOsCoordinator) coordinator).getDeviceBluetoothName(),
((ZeppOsCoordinator) coordinator).getDeviceBluetoothNames(),
((ZeppOsCoordinator) coordinator).getDeviceSources()
);
@@ -150,7 +150,7 @@ public class ZeppOsFirmwareUpdateOperation extends AbstractZeppOsOperation<ZeppO
// break;
case UpdateFirmwareOperation2020.REPLY_UPDATE_PROGRESS:
int offset = (value[2] & 0xff) | ((value[3] & 0xff) << 8) | ((value[4] & 0xff) << 16) | ((value[5] & 0xff) << 24);
LOG.info("update progress " + offset + " bytes");
LOG.info("update progress {} bytes", offset);
sendFirmwareDataChunk(offset);
break;
case UpdateFirmwareOperation2020.COMMAND_COMPLETE_TRANSFER: