diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/redmiwatch4/RedmiWatch4Coordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/redmiwatch4/RedmiWatch4Coordinator.java
new file mode 100644
index 000000000..7d438b071
--- /dev/null
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/redmiwatch4/RedmiWatch4Coordinator.java
@@ -0,0 +1,77 @@
+/* Copyright (C) 2024 Yoran Vulker
+
+ 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.redmiwatch4;
+
+import android.content.Context;
+import android.net.Uri;
+
+import androidx.annotation.Nullable;
+
+import java.util.regex.Pattern;
+
+import nodomain.freeyourgadget.gadgetbridge.R;
+import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
+import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.XiaomiCoordinator;
+import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.XiaomiInstallHandler;
+
+public class RedmiWatch4Coordinator extends XiaomiCoordinator {
+
+ @Override
+ public int getDeviceNameResource() {
+ return R.string.devicetype_redmi_watch_4;
+ }
+
+ @Override
+ protected Pattern getSupportedDeviceName() {
+ return Pattern.compile("^Redmi Watch 4 [0-9A-F]{4}$");
+ }
+
+ @Override
+ public boolean isExperimental() {
+ return true;
+ }
+
+ @Override
+ public ConnectionType getConnectionType() {
+ // this device likely supports both connection types if we indicate
+ // that we are an iOS device in the final auth step
+ return ConnectionType.BT_CLASSIC;
+ }
+
+ @Nullable
+ @Override
+ public InstallHandler findInstallHandler(Uri uri, Context context) {
+ final XiaomiInstallHandler handler = new XiaomiInstallHandler(uri, context);
+
+ return handler.isValid() ? handler : null;
+ }
+
+ @Override
+ public int getDefaultIconResource() {
+ return R.drawable.ic_device_amazfit_bip;
+ }
+
+ @Override
+ public int getDisabledIconResource() {
+ return R.drawable.ic_device_amazfit_bip_disabled;
+ }
+
+ @Override
+ public int getWorldClocksSlotCount() {
+ return 20;
+ }
+}
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 33b098bbe..5f8f2b2f8 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java
@@ -187,6 +187,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.redmismartbandpro.Red
import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.redmiwatch2.RedmiWatch2Coordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.redmiwatch2lite.RedmiWatch2LiteCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.redmiwatch3.RedmiWatch3Coordinator;
+import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.redmiwatch4.RedmiWatch4Coordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.watchs1.XiaomiWatchS1Coordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.watchs1active.XiaomiWatchS1ActiveCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.watchs1pro.XiaomiWatchS1ProCoordinator;
@@ -257,6 +258,7 @@ public enum DeviceType {
REDMIWATCH2(RedmiWatch2Coordinator.class),
REDMIWATCH2LITE(RedmiWatch2LiteCoordinator.class),
REDMISMARTBANDPRO(RedmiSmartBandProCoordinator.class),
+ REDMIWATCH4(RedmiWatch4Coordinator.class),
XIAOMI_WATCH_S1_ACTIVE(XiaomiWatchS1ActiveCoordinator.class),
XIAOMI_WATCH_S1_PRO(XiaomiWatchS1ProCoordinator.class),
XIAOMI_WATCH_S1(XiaomiWatchS1Coordinator.class),
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 45110e573..fa5a87498 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1559,6 +1559,7 @@
Redmi Watch 2
Redmi Watch 2 Lite
Redmi Smart Band Pro
+ Redmi Watch 4
Choose export location
General
High-priority