From a7eed9efd763aaa666ca91329607813b968baa6b Mon Sep 17 00:00:00 2001 From: aptitudepi <45304559+aptitudepi@users.noreply.github.com> Date: Tue, 23 Jun 2026 22:28:18 +0100 Subject: [PATCH] P22B1: Add support as Moyoung-based device --- .../AbstractMoyoungDeviceCoordinator.java | 7 +++ .../devices/moyoung/P22B1Coordinator.java | 46 +++++++++++++++++++ .../gadgetbridge/model/DeviceType.java | 2 + app/src/main/res/drawable/ic_device_p22.xml | 22 +++++++++ app/src/main/res/values/strings.xml | 1 + .../devices/BluetoothNameTest.java | 1 + 6 files changed, 79 insertions(+) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/P22B1Coordinator.java create mode 100644 app/src/main/res/drawable/ic_device_p22.xml 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 getBloodPressureSampleProvider(final GBDevice device, final DaoSession session) { + return new MoyoungBloodPressureSampleProvider(device, session); + } + @Override public TimeSampleProvider 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