From 515b9efce866c0f7567d833b572011ca9743c826 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Mon, 14 Aug 2023 18:40:39 +0100 Subject: [PATCH] Zepp OS: Fix calendar sync for Zepp OS 2 --- .../gadgetbridge/externalevents/CalendarReceiver.java | 7 +++++++ .../devices/banglejs/BangleJSDeviceSupport.java | 6 ++---- .../service/devices/huami/Huami2021Support.java | 3 ++- .../huami/zeppos/services/ZeppOsCalendarService.java | 11 ++++++++++- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/CalendarReceiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/CalendarReceiver.java index 79ebf78f9..658960e94 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/CalendarReceiver.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/CalendarReceiver.java @@ -34,6 +34,7 @@ import java.util.Hashtable; import java.util.List; import de.greenrobot.dao.query.QueryBuilder; +import nodomain.freeyourgadget.gadgetbridge.BuildConfig; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; @@ -224,4 +225,10 @@ public class CalendarReceiver extends BroadcastReceiver { } } } + + public static void forceSync() { + final Intent intent = new Intent("FORCE_CALENDAR_SYNC"); + intent.setPackage(BuildConfig.APPLICATION_ID); + GBApplication.getContext().sendBroadcast(intent); + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java index 4faf6af03..63307d337 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java @@ -109,6 +109,7 @@ import nodomain.freeyourgadget.gadgetbridge.entities.BangleJSActivitySample; import nodomain.freeyourgadget.gadgetbridge.entities.CalendarSyncState; import nodomain.freeyourgadget.gadgetbridge.entities.CalendarSyncStateDao; import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; +import nodomain.freeyourgadget.gadgetbridge.externalevents.CalendarReceiver; import nodomain.freeyourgadget.gadgetbridge.externalevents.gps.GBLocationManager; import nodomain.freeyourgadget.gadgetbridge.externalevents.gps.LocationProviderType; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; @@ -869,10 +870,7 @@ public class BangleJSDeviceSupport extends AbstractBTLEDeviceSupport { GB.toast("Database Error while forcefully syncing Calendar", Toast.LENGTH_SHORT, GB.ERROR, e1); } //force a syncCalendar now, send missing events - Context context = GBApplication.getContext(); - Intent intent = new Intent("FORCE_CALENDAR_SYNC"); - intent.setPackage(BuildConfig.APPLICATION_ID); - GBApplication.getContext().sendBroadcast(intent); + CalendarReceiver.forceSync(); } /** diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021Support.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021Support.java index e11b83a29..589f8b9b2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021Support.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021Support.java @@ -81,6 +81,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsGpxRouteI import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst; import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.miband.VibrationProfile; +import nodomain.freeyourgadget.gadgetbridge.externalevents.CalendarReceiver; import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceApp; import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; @@ -94,7 +95,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.Reminder; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; -import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLEOperation; import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions; import nodomain.freeyourgadget.gadgetbridge.service.btle.GattCharacteristic; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; @@ -335,6 +335,7 @@ public abstract class Huami2021Support extends HuamiSupport implements ZeppOsFil @Override protected Huami2021Support sendCalendarEvents(final TransactionBuilder builder) { // We have native calendar sync + CalendarReceiver.forceSync(); return this; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsCalendarService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsCalendarService.java index 420e57ac6..9be8c429a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsCalendarService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsCalendarService.java @@ -78,7 +78,7 @@ public class ZeppOsCalendarService extends AbstractZeppOsService { case CMD_CAPABILITIES_RESPONSE: version = payload[1]; getSupport().evaluateGBDeviceEvent(new GBDeviceEventUpdatePreferences(PREF_VERSION, version)); - if (version != 1) { + if (version != 1 && version != 3) { LOG.warn("Unsupported calendar service version {}", version); return; } @@ -121,6 +121,11 @@ public class ZeppOsCalendarService extends AbstractZeppOsService { length += calendarEventSpec.description.getBytes(StandardCharsets.UTF_8).length; } + if (version == 3) { + // Extra null byte at the end + length++; + } + final ByteBuffer buf = ByteBuffer.allocate(length); buf.order(ByteOrder.LITTLE_ENDIAN); buf.put(CMD_CREATE_EVENT); @@ -163,6 +168,10 @@ public class ZeppOsCalendarService extends AbstractZeppOsService { buf.put((byte) 0x00); // ? // TODO: Description here + if (version == 3) { + buf.put((byte) 0x00); // ? + } + write("add calendar event", buf.array()); }