Cleanup: in TrackImporter create Track object when all data got loaded.

This commit is contained in:
Dennis Guse
2025-11-24 21:55:45 +01:00
parent a6d4a05839
commit 1672ba99ad
4 changed files with 37 additions and 27 deletions
@@ -60,11 +60,6 @@ public class Track {
this(ZoneOffset.UTC, statistics); this(ZoneOffset.UTC, statistics);
} }
@Deprecated //TODO Remove
public Track(@NonNull ZoneOffset zoneOffset) {
this(zoneOffset, Statistics.DEFAULT);
}
public Track(@NonNull ZoneOffset zoneOffset, @NonNull Statistics trackStatistics) { public Track(@NonNull ZoneOffset zoneOffset, @NonNull Statistics trackStatistics) {
this.zoneOffset = zoneOffset; this.zoneOffset = zoneOffset;
this.trackStatistics = trackStatistics; this.trackStatistics = trackStatistics;
@@ -167,7 +167,7 @@ public class GPXTrackImporter extends DefaultHandler implements XMLImporter.Trac
// Backward compatibility: up v4.9.1 as <type> contained localized content. // Backward compatibility: up v4.9.1 as <type> contained localized content.
activityTypeLocalized = activityType; activityTypeLocalized = activityType;
} }
trackImporter.setTrack(context, name, uuid, description, activityTypeLocalized, activityType, zoneOffset); trackImporter.setTrackData(context, name, uuid, description, activityTypeLocalized, activityType, zoneOffset);
zoneOffset = null; zoneOffset = null;
} }
case TAG_TRACK_SEGMENT -> onTrackSegmentEnd(); case TAG_TRACK_SEGMENT -> onTrackSegmentEnd();
@@ -170,7 +170,7 @@ public class KMLTrackImporter extends DefaultHandler implements XMLImporter.Trac
onMarkerEnd(); onMarkerEnd();
case TAG_COORDINATES -> onMarkerLocationEnd(); case TAG_COORDINATES -> onMarkerLocationEnd();
case TAG_MULTI_TRACK, TAG_KML22_MULTI_TRACK -> { case TAG_MULTI_TRACK, TAG_KML22_MULTI_TRACK -> {
trackImporter.setTrack(context, name, uuid, description, activityTypeLocalized, activityType, zoneOffset); trackImporter.setTrackData(context, name, uuid, description, activityTypeLocalized, activityType, zoneOffset);
zoneOffset = null; zoneOffset = null;
} }
case TAG_TRACK, TAG_KML22_TRACK -> onTrackSegmentEnd(); case TAG_TRACK, TAG_KML22_TRACK -> onTrackSegmentEnd();
@@ -15,6 +15,7 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.UUID; import java.util.UUID;
import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.R;
@@ -54,7 +55,7 @@ public class TrackImporter {
private final List<Track.Id> trackIds = new ArrayList<>(); private final List<Track.Id> trackIds = new ArrayList<>();
// Current track // Current track
private Track track; private TrackData trackData;
private final List<TrackPoint> trackPoints = new LinkedList<>(); private final List<TrackPoint> trackPoints = new LinkedList<>();
private final List<Marker> markers = new LinkedList<>(); private final List<Marker> markers = new LinkedList<>();
@@ -66,11 +67,11 @@ public class TrackImporter {
} }
void newTrack() { void newTrack() {
if (track != null) { if (trackData != null) {
finishTrack(); finishTrack();
} }
track = null; trackData = null;
trackPoints.clear(); trackPoints.clear();
markers.clear(); markers.clear();
} }
@@ -87,33 +88,32 @@ public class TrackImporter {
this.markers.addAll(markers); this.markers.addAll(markers);
} }
void setTrack(Context context, String name, String uuid, String description, String activityTypeLocalized, String activityTypeId, @Nullable ZoneOffset zoneOffset) { void setTrackData(Context context, String name, String uuid, String description, String activityTypeLocalized, String activityTypeId, @Nullable ZoneOffset zoneOffset) {
track = new Track(zoneOffset != null ? zoneOffset : ZoneOffset.UTC); trackData = new TrackData();
track.setName(name != null ? name : ""); trackData.name = Objects.requireNonNullElse(name, ""); //TODO This should be handled by Track.
trackData.zoneOffset = Objects.requireNonNullElse(zoneOffset, ZoneOffset.UTC);
try { try {
track.setUuid(UUID.fromString(uuid)); trackData.uuid = UUID.fromString(uuid);
} catch (IllegalArgumentException | NullPointerException e) { } catch (IllegalArgumentException | NullPointerException e) {
Log.w(TAG, "could not parse Track UUID, generating a new one."); Log.w(TAG, "could not parse Track UUID, generating a new one.");
track.setUuid(UUID.randomUUID()); trackData.uuid = UUID.randomUUID();
} }
track.setDescription(description != null ? description : ""); trackData.description = Objects.requireNonNullElse(description, ""); //TODO This should be handled by Track.
trackData.activityTypeLocalized = activityTypeLocalized;
if (activityTypeLocalized != null) {
track.setActivityTypeLocalized(activityTypeLocalized);
}
ActivityType activityType;
if (activityTypeId == null) { if (activityTypeId == null) {
activityType = ActivityType.findByLocalizedString(context, activityTypeLocalized); trackData.activityType = ActivityType.findByLocalizedString(context, activityTypeLocalized);
} else { } else {
activityType = ActivityType.findBy(activityTypeId); trackData.activityType = ActivityType.findBy(activityTypeId);
} }
track.setActivityType(activityType);
} }
void finish() { void finish() {
if (track != null) { if (trackData != null) {
finishTrack(); finishTrack();
} }
} }
@@ -124,13 +124,13 @@ public class TrackImporter {
} }
// Store Track // Store Track
if (contentProviderUtils.getTrack(track.getUuid()) != null) { if (contentProviderUtils.getTrack(trackData.uuid) != null) {
if (preventReimport) { if (preventReimport) {
throw new ImportAlreadyExistsException(context.getString(R.string.import_prevent_reimport)); throw new ImportAlreadyExistsException(context.getString(R.string.import_prevent_reimport));
} }
//TODO This is a workaround until we have proper UI. //TODO This is a workaround until we have proper UI.
track.setUuid(UUID.randomUUID()); trackData.uuid = UUID.randomUUID();
} }
trackPoints.sort((o1, o2) -> { trackPoints.sort((o1, o2) -> {
@@ -146,7 +146,12 @@ public class TrackImporter {
adjustTrackPoints(); adjustTrackPoints();
TrackStatisticsUpdater updater = new TrackStatisticsUpdater(trackPoints); TrackStatisticsUpdater updater = new TrackStatisticsUpdater(trackPoints);
track.setStatistics(updater.getTrackStatistics()); Track track = new Track(trackData.zoneOffset, updater.getTrackStatistics());
track.setName(trackData.name);
track.setUuid(trackData.uuid);
track.setDescription(trackData.description);
track.setActivityType(trackData.activityType);
track.setActivityTypeLocalized(trackData.activityTypeLocalized);
Track.Id trackId = contentProviderUtils.insertTrack(track); Track.Id trackId = contentProviderUtils.insertTrack(track);
@@ -249,4 +254,14 @@ public class TrackImporter {
contentProviderUtils.deleteTracks(context, trackIds); contentProviderUtils.deleteTracks(context, trackIds);
} }
private class TrackData {
private String name;
private UUID uuid;
private String description;
private String activityTypeLocalized;
private ActivityType activityType;
private ZoneOffset zoneOffset;
}
} }