From c1d8eb58b9bef4fab9d2998b6dcff8a201f8e631 Mon Sep 17 00:00:00 2001 From: Thomas Kuehne Date: Fri, 1 May 2026 10:27:43 +0000 Subject: [PATCH] Garmin: check if GPX export is enabled before generating the export ActivityTrack --- .../gadgetbridge/export/AutoGpxExporter.java | 55 +++++++++++++++---- .../devices/garmin/fit/FitImporter.java | 10 ++-- 2 files changed, 49 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/export/AutoGpxExporter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/export/AutoGpxExporter.java index 0cb9e51cac..ac82146e93 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/export/AutoGpxExporter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/export/AutoGpxExporter.java @@ -1,8 +1,25 @@ +/* Copyright (C) 2026 José Rebelo, Thomas Kuehne + + 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.export; import android.content.Context; import android.net.Uri; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.documentfile.provider.DocumentFile; @@ -30,21 +47,41 @@ import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs; public class AutoGpxExporter { private static final Logger LOG = LoggerFactory.getLogger(AutoGpxExporter.class); - public static void doExport(final Context context, - final GBDevice gbDevice, - @Nullable final BaseActivitySummary summary, - final ActivityTrack activityTrack) { + public static boolean isExportEnabled(@NonNull final GBDevice gbDevice) { + return getExportDirectory(gbDevice) != null; + } + + @Nullable + public static String getExportDirectory(@NonNull final GBDevice gbDevice) { final GBPrefs prefs = GBApplication.getPrefs(); final boolean enabled = prefs.getBoolean(GBPrefs.AUTO_EXPORT_GPX_ENABLED, false); if (!enabled) { LOG.debug("Auto gpx export is disabled"); - return; + return null; } final Set selectedDevices = prefs.getStringSet(GBPrefs.AUTO_EXPORT_GPX_SELECTED_DEVICES, Collections.emptySet()); final boolean allDevices = prefs.getBoolean(GBPrefs.AUTO_EXPORT_GPX_ALL_DEVICES, true); if (!allDevices && !selectedDevices.contains(gbDevice.getAddress())) { - LOG.debug("Skipping auto gpx export - not enabled for {}", gbDevice); + LOG.debug("Auto gpx export is not enabled for {}", gbDevice); + return null; + } + + final String directory = prefs.getString(GBPrefs.AUTO_EXPORT_GPX_DIRECTORY, ""); + if (directory.isBlank()) { + LOG.warn("No auto gpx export directory specified"); + return null; + } + + return directory; + } + + public static void doExport(final Context context, + final GBDevice gbDevice, + @Nullable final BaseActivitySummary summary, + final ActivityTrack activityTrack) { + final String directory = getExportDirectory(gbDevice); + if (directory == null) { return; } @@ -55,12 +92,6 @@ public class AutoGpxExporter { return; } - final String directory = prefs.getString(GBPrefs.AUTO_EXPORT_GPX_DIRECTORY, ""); - if (directory.isBlank()) { - LOG.warn("Not auto-exporting gpx, no directory specified"); - return; - } - final String trackType; if (summary != null) { trackType = context.getString(ActivityKind.fromCode(summary.getActivityKind()).getLabel()).toLowerCase(Locale.ROOT); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/FitImporter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/FitImporter.java index 882e4daefa..b792d68749 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/FitImporter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/FitImporter.java @@ -701,10 +701,12 @@ public class FitImporter { } // Export to gpx - final FitActivityTrackProvider activityTrackProvider = new FitActivityTrackProvider(); - final ActivityTrack activityTrack = activityTrackProvider.getActivityTrack(summary); - if (activityTrack != null) { - AutoGpxExporter.doExport(context, gbDevice, summary, activityTrack); + if (AutoGpxExporter.isExportEnabled(gbDevice)) { + final FitActivityTrackProvider activityTrackProvider = new FitActivityTrackProvider(); + final ActivityTrack activityTrack = activityTrackProvider.getActivityTrack(summary); + if (activityTrack != null) { + AutoGpxExporter.doExport(context, gbDevice, summary, activityTrack); + } } }