From 5224244f74ba72bd005f9fa1a9cbf84566d87019 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Sun, 19 May 2024 23:35:26 +0100 Subject: [PATCH] Garmin: Fix edge case in sleep overlay If the sleep session ends outside the queried time range, we need to fetch the next sleep stage outside the range so that we can overlay it properly. --- .../devices/AbstractTimeSampleProvider.java | 19 ++++++ .../garmin/GarminActivitySampleProvider.java | 58 +++++++++++-------- .../garmin/GarminEventSampleProvider.java | 21 +++++++ 3 files changed, 73 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractTimeSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractTimeSampleProvider.java index 9840e89cb..a1f600f8c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractTimeSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractTimeSampleProvider.java @@ -119,6 +119,25 @@ public abstract class AbstractTimeSampleProvider i return !samples.isEmpty() ? samples.get(0) : null; } + public T getNextSampleAfter(final long timestampFrom) { + final Device dbDevice = DBHelper.findDevice(getDevice(), getSession()); + if (dbDevice == null) { + // no device, no sample + return null; + } + + final Property deviceIdSampleProp = getDeviceIdentifierSampleProperty(); + final Property timestampSampleProp = getTimestampSampleProperty(); + final List samples = getSampleDao().queryBuilder() + .where(deviceIdSampleProp.eq(dbDevice.getId()), + timestampSampleProp.ge(timestampFrom)) + .orderAsc(getTimestampSampleProperty()) + .limit(1) + .list(); + + return !samples.isEmpty() ? samples.get(0) : null; + } + @Nullable @Override public T getFirstSample() { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/garmin/GarminActivitySampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/garmin/GarminActivitySampleProvider.java index 8a6412b10..33074c748 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/garmin/GarminActivitySampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/garmin/GarminActivitySampleProvider.java @@ -121,7 +121,7 @@ public class GarminActivitySampleProvider extends AbstractSampleProvider sleepEventSamples = eventSampleProvider.getSleepEvents( - timestamp_from * 1000L - 86400000L, + timestamp_from * 1000L, timestamp_to * 1000L ); if (!sleepEventSamples.isEmpty()) { @@ -138,8 +138,19 @@ public class GarminActivitySampleProvider extends AbstractSampleProvider stageSamples = sleepStagesSampleProvider.getAllSamples( - timestamp_from * 1000L - 86400000L, + timestamp_from * 1000L, timestamp_to * 1000L ); @@ -148,29 +159,7 @@ public class GarminActivitySampleProvider extends AbstractSampleProvider samples = getSampleDao().queryBuilder() + .where( + deviceIdSampleProp.eq(dbDevice.getId()), + timestampSampleProp.ge(timestampFrom), + GarminEventSampleDao.Properties.Event.eq(74) + ).orderAsc(getTimestampSampleProperty()) + .limit(1) + .list(); + + return !samples.isEmpty() ? samples.get(0) : null; + } }