From a2c249b86ea518152bf3031887527ec85c047e6e Mon Sep 17 00:00:00 2001 From: Arjan Schrijver Date: Mon, 8 Jun 2026 21:25:46 +0200 Subject: [PATCH] OpenTracks: Fix extra empty activitytrack and rare crash --- .../opentracks/OpenTracksContentObserver.java | 3 +++ .../opentracks/OpenTracksController.java | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/opentracks/OpenTracksContentObserver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/opentracks/OpenTracksContentObserver.java index a04a97d8f4..824f7203e1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/opentracks/OpenTracksContentObserver.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/opentracks/OpenTracksContentObserver.java @@ -95,6 +95,9 @@ public class OpenTracksContentObserver extends ContentObserver { if (uri == null) { return; // nothing can be done without an uri } + if (mContext == null) { + return; // change received after finishing + } if (tracksUri.toString().startsWith(uri.toString())) { final List tracks = Track.readTracks(mContext.getContentResolver(), tracksUri, protocolVersion); if (!tracks.isEmpty()) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/opentracks/OpenTracksController.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/opentracks/OpenTracksController.java index 6d6fc32944..08fd67cfa5 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/opentracks/OpenTracksController.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/opentracks/OpenTracksController.java @@ -32,12 +32,14 @@ import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; +import java.util.List; import java.util.Locale; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.export.ActivityTrackExporter; import nodomain.freeyourgadget.gadgetbridge.export.GPXExporter; import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; +import nodomain.freeyourgadget.gadgetbridge.model.ActivityPoint; import nodomain.freeyourgadget.gadgetbridge.model.ActivityTrack; import nodomain.freeyourgadget.gadgetbridge.util.FileUtils; import nodomain.freeyourgadget.gadgetbridge.util.GB; @@ -161,9 +163,20 @@ public class OpenTracksController extends Activity { } private static void saveToGpx(ActivityTrack activityTrack) { - if (activityTrack == null || activityTrack.getSegments().isEmpty()) { + if (activityTrack == null || activityTrack.getSegments() == null || activityTrack.getSegments().isEmpty()) { LOG.debug("No GPS track points to save — skipping GPX export"); return; + } else { + boolean trackpointsFound = false; + for (List segment : activityTrack.getSegments()) { + if (!segment.isEmpty()) { + trackpointsFound = true; + } + } + if (!trackpointsFound) { + LOG.debug("No GPS track points to save — skipping GPX export"); + return; + } } final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());