diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/AbstractMoyoungDeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/AbstractMoyoungDeviceCoordinator.java
index 427ef8570c..b5bff66c8a 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/AbstractMoyoungDeviceCoordinator.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/AbstractMoyoungDeviceCoordinator.java
@@ -37,6 +37,7 @@ import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpec
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsScreen;
import nodomain.freeyourgadget.gadgetbridge.capabilities.HeartRateCapability;
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator;
+import nodomain.freeyourgadget.gadgetbridge.devices.MoyoungBloodPressureSampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.MoyoungSpo2SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.MoyoungStressSampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
@@ -64,6 +65,7 @@ import nodomain.freeyourgadget.gadgetbridge.entities.MoyoungStressSampleDao;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryParser;
+import nodomain.freeyourgadget.gadgetbridge.model.BloodPressureSample;
import nodomain.freeyourgadget.gadgetbridge.model.Spo2Sample;
import nodomain.freeyourgadget.gadgetbridge.model.StressSample;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
@@ -126,6 +128,11 @@ public abstract class AbstractMoyoungDeviceCoordinator extends AbstractBLEDevice
return new MoyoungSpo2SampleProvider(device, session);
}
+ @Override
+ public TimeSampleProvider extends BloodPressureSample> getBloodPressureSampleProvider(final GBDevice device, final DaoSession session) {
+ return new MoyoungBloodPressureSampleProvider(device, session);
+ }
+
@Override
public TimeSampleProvider extends StressSample> getStressSampleProvider(GBDevice device, DaoSession session) {
return new MoyoungStressSampleProvider(device, session);
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/P22B1Coordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/P22B1Coordinator.java
new file mode 100644
index 0000000000..15630f4cf2
--- /dev/null
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/P22B1Coordinator.java
@@ -0,0 +1,46 @@
+/* Copyright (C) 2025 Gadgetbridge Contributors
+
+ 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.moyoung;
+
+import androidx.annotation.DrawableRes;
+
+import java.util.regex.Pattern;
+
+import nodomain.freeyourgadget.gadgetbridge.R;
+
+public class P22B1Coordinator extends AbstractMoyoungDeviceCoordinator {
+ @Override
+ protected Pattern getSupportedDeviceName() {
+ return Pattern.compile("^P22B1", Pattern.CASE_INSENSITIVE);
+ }
+
+ @Override
+ public int getDeviceNameResource() {
+ return R.string.devicetype_p22b1;
+ }
+
+ @Override
+ @DrawableRes
+ public int getDefaultIconResource() {
+ return R.drawable.ic_device_p22;
+ }
+
+ @Override
+ public String getManufacturer() {
+ return "Mo Young / Da Fit";
+ }
+}
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 78e6780de0..acd0bda62d 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java
@@ -378,6 +378,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.moyoung.R50ProCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.moyoung.RainbuvvyT97Coordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.moyoung.ViranC29Coordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.moyoung.ZL02DCoordinator;
+import nodomain.freeyourgadget.gadgetbridge.devices.moyoung.P22B1Coordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.no1f1.No1F1Coordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.nothing.CmfBuds2Coordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.nothing.CmfBuds2aCoordinator;
@@ -634,6 +635,7 @@ public enum DeviceType {
Q8(Q8Coordinator.class),
SG2(SG2Coordinator.class),
NO1F1(No1F1Coordinator.class),
+ P22B1(P22B1Coordinator.class),
TECLASTH30(TeclastH30Coordinator.class),
Y5(Y5Coordinator.class),
XWATCH(XWatchCoordinator.class),
diff --git a/app/src/main/res/drawable/ic_device_p22.xml b/app/src/main/res/drawable/ic_device_p22.xml
new file mode 100644
index 0000000000..881015898a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_device_p22.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8a7ab54857..a1f7207eb9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -3970,6 +3970,7 @@
Menu structure: %s
Please rebuild your watchface for custom menu
Mi Band HRX
+ P22B1
Left
Center
diff --git a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/devices/BluetoothNameTest.java b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/devices/BluetoothNameTest.java
index 0d52367060..0ad6e326db 100644
--- a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/devices/BluetoothNameTest.java
+++ b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/devices/BluetoothNameTest.java
@@ -89,6 +89,7 @@ public class BluetoothNameTest extends TestBase {
put("fenix 6X Sapphire", DeviceType.GARMIN_FENIX_6X_SAPPHIRE); // #5496
put("fenix 6S Pro Solar", DeviceType.GARMIN_FENIX_6S_PRO_SOLAR); // #5568
put("R50Pro", DeviceType.R50PRO);
+ put("P22B1", DeviceType.P22B1);
put("SBM67", DeviceType.SILVERCREST_SBM_67);
put("BPM Smart", DeviceType.SANITAS_SBM_67);
put("Sinilink-APP", DeviceType.SINILINK); // #6040