OpenTracks: Fix extra empty activitytrack and rare crash

This commit is contained in:
Arjan Schrijver
2026-06-08 21:25:46 +02:00
parent ef7a297100
commit a2c249b86e
2 changed files with 17 additions and 1 deletions
@@ -95,6 +95,9 @@ public class OpenTracksContentObserver extends ContentObserver {
if (uri == null) { if (uri == null) {
return; // nothing can be done without an uri return; // nothing can be done without an uri
} }
if (mContext == null) {
return; // change received after finishing
}
if (tracksUri.toString().startsWith(uri.toString())) { if (tracksUri.toString().startsWith(uri.toString())) {
final List<Track> tracks = Track.readTracks(mContext.getContentResolver(), tracksUri, protocolVersion); final List<Track> tracks = Track.readTracks(mContext.getContentResolver(), tracksUri, protocolVersion);
if (!tracks.isEmpty()) { if (!tracks.isEmpty()) {
@@ -32,12 +32,14 @@ import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Locale; import java.util.Locale;
import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.export.ActivityTrackExporter; import nodomain.freeyourgadget.gadgetbridge.export.ActivityTrackExporter;
import nodomain.freeyourgadget.gadgetbridge.export.GPXExporter; import nodomain.freeyourgadget.gadgetbridge.export.GPXExporter;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityPoint;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityTrack; import nodomain.freeyourgadget.gadgetbridge.model.ActivityTrack;
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils; import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GB;
@@ -161,9 +163,20 @@ public class OpenTracksController extends Activity {
} }
private static void saveToGpx(ActivityTrack activityTrack) { 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"); LOG.debug("No GPS track points to save — skipping GPX export");
return; return;
} else {
boolean trackpointsFound = false;
for (List<ActivityPoint> 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()); final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());