diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmlTrackWriter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmlTrackWriter.java index 91f8b9c47..d3656c1ff 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmlTrackWriter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmlTrackWriter.java @@ -166,7 +166,7 @@ public class KmlTrackWriter implements TrackWriter { boolean existsPhoto = FileUtils.getPhotoFileIfExists(context, waypoint.getTrackId(), waypoint.getPhotoURI()) != null; if (waypoint.hasPhoto() && exportPhotos && existsPhoto) { float heading = getHeading(waypoint.getTrackId(), waypoint.getLocation()); - writePhotoOverlay(waypoint.getName(), waypoint.getCategory(), waypoint.getDescription(), waypoint.getLocation(), waypoint.getPhotoUrl(), heading); + writePhotoOverlay(waypoint, heading); } else { writePlacemark(waypoint.getName(), waypoint.getCategory(), waypoint.getDescription(), WAYPOINT_STYLE, waypoint.getLocation()); } @@ -324,32 +324,29 @@ public class KmlTrackWriter implements TrackWriter { } /** - * Writes a photo overlay. - * @param name the name - * @param category the category - * @param description the description - * @param location the location - * @param photoUrl the photo url - * @param heading the heading + * Writes a photo overlay from waypoint. + * + * @param waypoint Waypoint object. + * @param heading the heading. */ - private void writePhotoOverlay(String name, String category, String description, Location location, String photoUrl, float heading) { - if (location != null && exportTrackDetail) { + private void writePhotoOverlay(Waypoint waypoint, float heading) { + if (waypoint.getLocation() != null && exportTrackDetail) { printWriter.println(""); - printWriter.println("" + StringUtils.formatCData(name) + ""); - printWriter.println("" + StringUtils.formatCData(description) + ""); + printWriter.println("" + StringUtils.formatCData(waypoint.getName()) + ""); + printWriter.println("" + StringUtils.formatCData(waypoint.getDescription()) + ""); printWriter.print(""); - printWriter.print("" + location.getLongitude() + ""); - printWriter.print("" + location.getLatitude() + ""); + printWriter.print("" + waypoint.getLocation().getLongitude() + ""); + printWriter.print("" + waypoint.getLocation().getLatitude() + ""); printWriter.print("20"); printWriter.print("" + heading + ""); printWriter.print("90"); printWriter.println(""); - printWriter.println("" + getTime(location) + ""); + printWriter.println("" + getTime(waypoint.getLocation()) + ""); printWriter.println("#" + KmlTrackWriter.WAYPOINT_STYLE + ""); - writeCategory(category); + writeCategory(waypoint.getCategory()); if (exportPhotos) { - printWriter.println("" + KmzTrackExporter.buildKmzImageFilePath(Uri.parse(photoUrl)) + ""); + printWriter.println("" + KmzTrackExporter.buildKmzImageFilePath(waypoint) + ""); } printWriter.print(""); @@ -360,7 +357,7 @@ public class KmlTrackWriter implements TrackWriter { printWriter.print("45"); printWriter.println(""); printWriter.println(""); - printWriter.println("" + getCoordinates(location, ",") + ""); + printWriter.println("" + getCoordinates(waypoint.getLocation(), ",") + ""); printWriter.println(""); printWriter.println(""); } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmzTrackExporter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmzTrackExporter.java index 2f4ccab39..ca4fc59a2 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmzTrackExporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmzTrackExporter.java @@ -115,7 +115,7 @@ public class KmzTrackExporter implements TrackExporter { Uri uriPhoto = waypoint.getPhotoURI(); boolean existsPhoto = FileUtils.getPhotoFileIfExists(context, track.getId(), uriPhoto) != null; if (existsPhoto) { - addImage(context, zipOutputStream, uriPhoto); + addImage(context, zipOutputStream, uriPhoto, waypoint); } } @@ -126,9 +126,9 @@ public class KmzTrackExporter implements TrackExporter { } } - private void addImage(Context context, ZipOutputStream zipOutputStream, Uri uri) throws IOException { + private void addImage(Context context, ZipOutputStream zipOutputStream, Uri uri, Waypoint waypoint) throws IOException { try (InputStream inputStream = context.getContentResolver().openInputStream(uri)) { - ZipEntry zipEntry = new ZipEntry(buildKmzImageFilePath(uri)); + ZipEntry zipEntry = new ZipEntry(buildKmzImageFilePath(waypoint)); zipOutputStream.putNextEntry(zipEntry); if (inputStream == null) throw new FileNotFoundException(); @@ -151,11 +151,13 @@ public class KmzTrackExporter implements TrackExporter { } /** - * Builds and returns the path for the file that will be saved inside KMZ_IMAGES_DIR. + * Builds and returns the path for the image that will be saved inside KMZ_IMAGES_DIR for the waypoint. * - * @param uri URI object. + * @param waypoint Waypoint object. */ - public static String buildKmzImageFilePath(Uri uri) { - return KMZ_IMAGES_DIR + File.separatorChar + FileUtils.sanitizeFileName(uri.getLastPathSegment()); + public static String buildKmzImageFilePath(Waypoint waypoint) { + String ext = FileUtils.getExtension(waypoint.getPhotoUrl()); + ext = ext == null ? "" : "." + ext; + return KMZ_IMAGES_DIR + File.separatorChar + FileUtils.sanitizeFileName(waypoint.getId() + ext); } } \ No newline at end of file