From fd03accd4cfd2a64c7bf7fb0b4f9808911d12193 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Mon, 8 Jun 2026 21:09:15 +0100 Subject: [PATCH] Xiaomi Smart Band 10 Pro: Experimental support --- .../watches/MiBand10ProCoordinator.java | 57 +++++++++++++++++++ .../gadgetbridge/model/DeviceType.java | 2 + app/src/main/res/values/strings.xml | 1 + ...inatorTest.java => BluetoothNameTest.java} | 3 +- 4 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/watches/MiBand10ProCoordinator.java rename app/src/test/java/nodomain/freeyourgadget/gadgetbridge/devices/{AbstractDeviceCoordinatorTest.java => BluetoothNameTest.java} (99%) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/watches/MiBand10ProCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/watches/MiBand10ProCoordinator.java new file mode 100644 index 0000000000..00bc10a562 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/watches/MiBand10ProCoordinator.java @@ -0,0 +1,57 @@ +/* Copyright (C) 2026 José Rebelo + + 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.devices.xiaomi.watches; + +import androidx.annotation.NonNull; + +import java.util.regex.Pattern; + +import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.XiaomiCoordinator; +import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; + +public class MiBand10ProCoordinator extends XiaomiCoordinator { + @Override + public int getDeviceNameResource() { + return R.string.devicetype_miband10pro; + } + + @Override + protected Pattern getSupportedDeviceName() { + return Pattern.compile("^Xiaomi Smart Band 10 Pro [0-9A-F]{4}$"); + } + + @Override + public boolean isExperimental() { + return true; + } + + @Override + public ConnectionType getConnectionType() { + return ConnectionType.BT_CLASSIC; + } + + @Override + public int getDefaultIconResource() { + return R.drawable.ic_device_default; + } + + @Override + public DeviceKind getDeviceKind(@NonNull GBDevice device) { + return DeviceKind.FITNESS_BAND; + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java index af179688b3..ee66e846b6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java @@ -197,6 +197,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.gloryfit.watches.Y66Coordina import nodomain.freeyourgadget.gadgetbridge.devices.gloryfit.watches.Y6Coordinator; import nodomain.freeyourgadget.gadgetbridge.devices.gree.GreeAcCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.hama.fit6900.HamaFit6900DeviceCoordinator; +import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.watches.MiBand10ProCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.xplora.XploraXmoveDeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.hplus.EXRIZUK8Coordinator; import nodomain.freeyourgadget.gadgetbridge.devices.hplus.HPlusCoordinator; @@ -555,6 +556,7 @@ public enum DeviceType { MIBAND9ACTIVE(MiBand9ActiveCoordinator.class), MIBAND9PRO(MiBand9ProCoordinator.class), MIBAND10(MiBand10Coordinator.class), + MIBAND10PRO(MiBand10ProCoordinator.class), MIWATCHLITE(MiWatchLiteCoordinator.class), MIWATCHCOLORSPORT(MiWatchColorSportCoordinator.class), REDMIBUDS3PRO(RedmiBuds3ProCoordinator.class), diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6cd8948903..d75d3b88ae 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1906,6 +1906,7 @@ Xiaomi Smart Band 9 Active Xiaomi Smart Band 9 Pro Xiaomi Smart Band 10 + Xiaomi Smart Band 10 Pro Amazfit Balance Amazfit Balance 2 Amazfit Balance 2 XT diff --git a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinatorTest.java b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/devices/BluetoothNameTest.java similarity index 99% rename from app/src/test/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinatorTest.java rename to app/src/test/java/nodomain/freeyourgadget/gadgetbridge/devices/BluetoothNameTest.java index 779569455a..0406902cd7 100644 --- a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinatorTest.java +++ b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/devices/BluetoothNameTest.java @@ -13,7 +13,7 @@ import java.util.regex.Pattern; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; import nodomain.freeyourgadget.gadgetbridge.test.TestBase; -public class AbstractDeviceCoordinatorTest extends TestBase { +public class BluetoothNameTest extends TestBase { @Test public void deviceMatchingByNameTest() { final Map bluetoothNameToExpectedType = new HashMap<>() {{ @@ -201,6 +201,7 @@ public class AbstractDeviceCoordinatorTest extends TestBase { put("OV-Touch2.6_LE", DeviceType.OVTOUCH26); // #5628 put("BPW4500", DeviceType.BRAUN_BPW4500); // #5886 put("MATSON Monitor", DeviceType.BM2_BATTERY_MONITOR); // #6212 + put("Xiaomi Smart Band 10 Pro AB01", DeviceType.MIBAND10PRO); // #6248 }}; for (Map.Entry e : bluetoothNameToExpectedType.entrySet()) {