From 47b2412663681676268efe024b1dd604af783198 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Sat, 21 Mar 2026 16:04:52 +0000 Subject: [PATCH] ZL02D: Initial support --- .../devices/moyoung/ZL02DCoordinator.java | 78 +++++++++++++++++++ .../gadgetbridge/model/DeviceType.java | 2 + app/src/main/res/values/strings.xml | 1 + .../AbstractDeviceCoordinatorTest.java | 1 + 4 files changed, 82 insertions(+) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/ZL02DCoordinator.java diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/ZL02DCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/ZL02DCoordinator.java new file mode 100644 index 0000000000..b032714d80 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/moyoung/ZL02DCoordinator.java @@ -0,0 +1,78 @@ +/* Copyright (C) 2025 Arjan Schrijver + + 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 androidx.annotation.NonNull; + +import java.util.regex.Pattern; + +import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; + +public class ZL02DCoordinator extends AbstractMoyoungDeviceCoordinator { + @Override + protected Pattern getSupportedDeviceName() { + return Pattern.compile("^ZL02D$"); + } + + @Override + public int getDeviceNameResource() { + return R.string.devicetype_zl02d; + } + + @Override + @DrawableRes + public int getDefaultIconResource() { + return R.drawable.ic_device_miwatch; + } + + @Override + public String getManufacturer() { + return "Mo Young / Da Fit"; + } + + @Override + public int getMtu() { + return 508; + } + + @Override + public int getAlarmSlotCount(GBDevice device) { + return 8; + } + + @Override + public int getWorldClocksSlotCount() { + return 6; + } + + @Override + public int getWorldClocksLabelLength() { + return 30; + } + + @Override + public boolean supportsRemSleep(@NonNull GBDevice device) { + return true; + } + + @Override + public boolean supportsStressMeasurement(@NonNull GBDevice device) { + return true; + } +} 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 738db551b2..e5089364cc 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java @@ -345,6 +345,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.moyoung.MisirunC17Coordinato 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.no1f1.No1F1Coordinator; import nodomain.freeyourgadget.gadgetbridge.devices.nothing.CmfBuds2Coordinator; import nodomain.freeyourgadget.gadgetbridge.devices.nothing.CmfBudsPro2Coordinator; @@ -886,6 +887,7 @@ public enum DeviceType { KSIX_VENTURE(KsixVentureCoordinator.class), FIREBOLTT_TALK(FireBolttTalkCoordinator.class), VIRAN_C29(ViranC29Coordinator.class), + ZL02D(ZL02DCoordinator.class), R50PRO(R50ProCoordinator.class), RAINBUVVY_T97(RainbuvvyT97Coordinator.class), ADVAN_WATCH_SE1_AI(AdvanWatchSE1AICoordinator.class), diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 48c04d9e23..aa046d1d44 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2185,6 +2185,7 @@ Colmi V73 Colmi V76 Colmi V89 + ZL02D Colmi P80 Blackview R60 Misirun C17 diff --git a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinatorTest.java b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinatorTest.java index c023aaa0a8..ea4d0814d0 100644 --- a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinatorTest.java +++ b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinatorTest.java @@ -46,6 +46,7 @@ public class AbstractDeviceCoordinatorTest extends TestBase { put("D3(ID-417F)", DeviceType.D3); put("S10", DeviceType.QECNATO_S10); put("S52", DeviceType.S52); + put("ZL02D", DeviceType.ZL02D); put("R11C_B200", DeviceType.YAWELL_R11); put("R11_B200", DeviceType.YAWELL_R11); put("WF-C710N", DeviceType.SONY_WF_C710N);