Activity Summary: Draw fit file if available

This commit is contained in:
José Rebelo 2024-05-01 22:21:34 +01:00
parent 525b395c01
commit 972a2e8b30
2 changed files with 54 additions and 21 deletions

View File

@ -34,12 +34,17 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.model.GPSCoordinate;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitFile;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitImporter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.RecordData;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages.FitRecord;
import nodomain.freeyourgadget.gadgetbridge.util.gpx.GpxParseException;
import nodomain.freeyourgadget.gadgetbridge.util.gpx.GpxParser;
import nodomain.freeyourgadget.gadgetbridge.util.gpx.model.GpxFile;
@ -76,21 +81,40 @@ public class ActivitySummariesGpsFragment extends AbstractGBFragment {
new Thread(new Runnable() {
@Override
public void run() {
final GpxFile gpxFile;
try (FileInputStream inputStream = new FileInputStream(inputFile)) {
final GpxParser gpxParser = new GpxParser(inputStream);
gpxFile = gpxParser.getGpxFile();
} catch (final IOException e) {
LOG.error("Failed to open {}", inputFile, e);
return;
} catch (final GpxParseException e) {
LOG.error("Failed to parse gpx file", e);
final List<GPSCoordinate> points = new ArrayList<>();
if (inputFile.getName().endsWith(".gpx")) {
try (FileInputStream inputStream = new FileInputStream(inputFile)) {
final GpxParser gpxParser = new GpxParser(inputStream);
points.addAll(gpxParser.getGpxFile().getPoints());
} catch (final IOException e) {
LOG.error("Failed to open {}", inputFile, e);
return;
} catch (final GpxParseException e) {
LOG.error("Failed to parse gpx file", e);
return;
}
} else if (inputFile.getName().endsWith(".fit")) {
try {
FitFile fitFile = FitFile.parseIncoming(inputFile);
for (final RecordData record : fitFile.getRecords()) {
if (record instanceof FitRecord) {
points.add(((FitRecord) record).toActivityPoint().getLocation());
}
}
} catch (final IOException e) {
LOG.error("Failed to open {}", inputFile, e);
return;
} catch (final Exception e) {
LOG.error("Failed to parse fit file", e);
return;
}
} else {
LOG.warn("Unknown file type {}", inputFile.getName());
return;
}
if (!gpxFile.getPoints().isEmpty()) {
drawTrack(canvas, gpxFile.getPoints());
if (!points.isEmpty()) {
drawTrack(canvas, points);
}
}
}).start();

View File

@ -183,9 +183,9 @@ public class ActivitySummaryDetail extends AbstractGBActivity {
makeSummaryHeader(newItem);
makeSummaryContent(newItem);
activitySummariesChartFragment.setDateAndGetData(getGBDevice(currentItem.getDevice()), currentItem.getStartTime().getTime() / 1000, currentItem.getEndTime().getTime() / 1000);
if (get_gpx_file() != null) {
if (getTrackFile() != null) {
showCanvas();
activitySummariesGpsFragment.set_data(get_gpx_file());
activitySummariesGpsFragment.set_data(getTrackFile());
} else {
hideCanvas();
}
@ -205,9 +205,9 @@ public class ActivitySummaryDetail extends AbstractGBActivity {
makeSummaryHeader(newItem);
makeSummaryContent(newItem);
activitySummariesChartFragment.setDateAndGetData(getGBDevice(currentItem.getDevice()), currentItem.getStartTime().getTime() / 1000, currentItem.getEndTime().getTime() / 1000);
if (get_gpx_file() != null) {
if (getTrackFile() != null) {
showCanvas();
activitySummariesGpsFragment.set_data(get_gpx_file());
activitySummariesGpsFragment.set_data(getTrackFile());
} else {
hideCanvas();
}
@ -226,9 +226,9 @@ public class ActivitySummaryDetail extends AbstractGBActivity {
makeSummaryHeader(currentItem);
makeSummaryContent(currentItem);
activitySummariesChartFragment.setDateAndGetData(getGBDevice(currentItem.getDevice()), currentItem.getStartTime().getTime() / 1000, currentItem.getEndTime().getTime() / 1000);
if (get_gpx_file() != null) {
if (getTrackFile() != null) {
showCanvas();
activitySummariesGpsFragment.set_data(get_gpx_file());
activitySummariesGpsFragment.set_data(getTrackFile());
} else {
hideCanvas();
}
@ -319,9 +319,9 @@ public class ActivitySummaryDetail extends AbstractGBActivity {
public void onClick(DialogInterface dialog, int which) {
currentItem.setGpxTrack(selectedGpxFile);
currentItem.update();
if (get_gpx_file() != null) {
if (getTrackFile() != null) {
showCanvas();
activitySummariesGpsFragment.set_data(get_gpx_file());
activitySummariesGpsFragment.set_data(getTrackFile());
} else {
hideCanvas();
}
@ -703,7 +703,7 @@ public class ActivitySummaryDetail extends AbstractGBActivity {
gpsView.setLayoutParams(params);
}
private File get_gpx_file() {
private File getTrackFile() {
final String gpxTrack = currentItem.getGpxTrack();
if (gpxTrack != null) {
File file = new File(gpxTrack);
@ -713,6 +713,15 @@ public class ActivitySummaryDetail extends AbstractGBActivity {
return null;
}
}
final String rawDetails = currentItem.getRawDetailsPath();
if (rawDetails != null && rawDetails.endsWith(".fit")) {
File file = new File(rawDetails);
if (file.exists()) {
return file;
} else {
return null;
}
}
return null;
}