diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ActivitySummariesActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ActivitySummariesActivity.java index cfdd1e850..533469e5f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ActivitySummariesActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ActivitySummariesActivity.java @@ -80,6 +80,8 @@ public class ActivitySummariesActivity extends AbstractListActivity trackPoints = track.getTrackPoints(); String source = getSource(track); + boolean atLeastOnePointExported = false; for (ActivityPoint point : trackPoints) { - exportTrackPoint(ser, point, source); + atLeastOnePointExported = exportTrackPoint(ser, point, source) | atLeastOnePointExported ; + } + + if(!atLeastOnePointExported) { + throw new GPXTrackEmptyException(); } ser.endTag(NS_DEFAULT, "trkseg"); @@ -98,10 +103,10 @@ public class GPXExporter implements ActivityTrackExporter { return track.getDevice().getName(); } - private void exportTrackPoint(XmlSerializer ser, ActivityPoint point, String source) throws IOException { + private boolean exportTrackPoint(XmlSerializer ser, ActivityPoint point, String source) throws IOException { GPSCoordinate location = point.getLocation(); if (location == null) { - return; // skip invalid points, that just contain hr data, for example + return false; // skip invalid points, that just contain hr data, for example } ser.startTag(NS_DEFAULT, "trkpt"); ser.attribute(NS_DEFAULT, "lon", formatLocation(location.getLongitude())); @@ -117,6 +122,8 @@ public class GPXExporter implements ActivityTrackExporter { exportTrackpointExtensions(ser, point); ser.endTag(NS_DEFAULT, "trkpt"); + + return true; } private void exportTrackpointExtensions(XmlSerializer ser, ActivityPoint point) throws IOException { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/operations/FetchSportsDetailsOperation.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/operations/FetchSportsDetailsOperation.java index 2d0d450aa..b32a221ae 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/operations/FetchSportsDetailsOperation.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/operations/FetchSportsDetailsOperation.java @@ -100,12 +100,18 @@ public class FetchSportsDetailsOperation extends AbstractFetchOperation { ActivityTrackExporter exporter = createExporter(); String fileName = FileUtils.makeValidFileName("gadgetbridge-track-" + DateTimeUtils.formatIso8601(summary.getStartTime())); File targetFile = new File(FileUtils.getExternalFilesDir(), fileName); - exporter.performExport(track, targetFile); - try (DBHandler dbHandler = GBApplication.acquireDB()) { - summary.setGpxTrack(targetFile.getAbsolutePath()); - dbHandler.getDaoSession().getBaseActivitySummaryDao().update(summary); + try { + exporter.performExport(track, targetFile); + + try (DBHandler dbHandler = GBApplication.acquireDB()) { + summary.setGpxTrack(targetFile.getAbsolutePath()); + dbHandler.getDaoSession().getBaseActivitySummaryDao().update(summary); + } + } catch (ActivityTrackExporter.GPXTrackEmptyException ex) { + GB.toast(getContext(), "This activity does not contain GPX tracks.", Toast.LENGTH_LONG, GB.ERROR, ex); } + GregorianCalendar endTime = BLETypeConversions.createCalendar(); endTime.setTime(summary.getEndTime()); saveLastSyncTimestamp(endTime);