forked from upstream-mirrors/OpenTracks
Cleanup: in TrackImporter create Track object when all data got loaded.
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user