mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2025-01-10 17:11:56 +01:00
GpxParser: Parse heart rate
This commit is contained in:
parent
43262b3f29
commit
060d39d5b0
@ -32,7 +32,6 @@ import java.io.InputStream;
|
|||||||
import java.text.ParsePosition;
|
import java.text.ParsePosition;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.GPSCoordinate;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.ArrayUtils;
|
import nodomain.freeyourgadget.gadgetbridge.util.ArrayUtils;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.gpx.model.GpxFile;
|
import nodomain.freeyourgadget.gadgetbridge.util.gpx.model.GpxFile;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.gpx.model.GpxTrack;
|
import nodomain.freeyourgadget.gadgetbridge.util.gpx.model.GpxTrack;
|
||||||
@ -211,6 +210,9 @@ public class GpxParser {
|
|||||||
case "time":
|
case "time":
|
||||||
trackPointBuilder.withTime(parseTime());
|
trackPointBuilder.withTime(parseTime());
|
||||||
continue;
|
continue;
|
||||||
|
case "extensions":
|
||||||
|
parseExtensions(trackPointBuilder);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -220,6 +222,34 @@ public class GpxParser {
|
|||||||
return trackPointBuilder.build();
|
return trackPointBuilder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void parseExtensions(final GpxTrackPoint.Builder trackPointBuilder) throws Exception {
|
||||||
|
while (eventType != XmlPullParser.END_TAG || !parser.getName().equals("extensions")) {
|
||||||
|
if (parser.getEventType() == XmlPullParser.START_TAG) {
|
||||||
|
switch (parser.getName()) {
|
||||||
|
case "gpxtpx:TrackPointExtension":
|
||||||
|
parseTrackPointExtensions(trackPointBuilder);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
eventType = parser.next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void parseTrackPointExtensions(final GpxTrackPoint.Builder trackPointBuilder) throws Exception {
|
||||||
|
while (eventType != XmlPullParser.END_TAG || !parser.getName().equals("gpxtpx:TrackPointExtension")) {
|
||||||
|
if (parser.getEventType() == XmlPullParser.START_TAG) {
|
||||||
|
switch (parser.getName()) {
|
||||||
|
case "gpxtpx:hr":
|
||||||
|
trackPointBuilder.withHeartRate(Integer.parseInt(parseStringContent("gpxtpx:hr")));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
eventType = parser.next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private GpxWaypoint parseWaypoint() throws Exception {
|
private GpxWaypoint parseWaypoint() throws Exception {
|
||||||
final GpxWaypoint.Builder waypointBuilder = new GpxWaypoint.Builder();
|
final GpxWaypoint.Builder waypointBuilder = new GpxWaypoint.Builder();
|
||||||
|
|
||||||
|
@ -18,6 +18,9 @@ package nodomain.freeyourgadget.gadgetbridge.util.gpx.model;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivityPoint;
|
||||||
|
|
||||||
public class GpxFile {
|
public class GpxFile {
|
||||||
private final String name;
|
private final String name;
|
||||||
@ -61,6 +64,14 @@ public class GpxFile {
|
|||||||
return allPoints;
|
return allPoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<ActivityPoint> getActivityPoints() {
|
||||||
|
return tracks.stream()
|
||||||
|
.flatMap(t -> t.getTrackSegments().stream())
|
||||||
|
.flatMap(s -> s.getTrackPoints().stream())
|
||||||
|
.map(GpxTrackPoint::toActivityPoint)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
public static class Builder {
|
public static class Builder {
|
||||||
private String name;
|
private String name;
|
||||||
private String author;
|
private String author;
|
||||||
|
@ -19,32 +19,53 @@ package nodomain.freeyourgadget.gadgetbridge.util.gpx.model;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivityPoint;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.GPSCoordinate;
|
import nodomain.freeyourgadget.gadgetbridge.model.GPSCoordinate;
|
||||||
|
|
||||||
public class GpxTrackPoint extends GPSCoordinate {
|
public class GpxTrackPoint extends GPSCoordinate {
|
||||||
private final Date time;
|
private final Date time;
|
||||||
|
private final int heartRate;
|
||||||
|
|
||||||
public GpxTrackPoint(final double longitude, final double latitude, final double altitude, final Date time) {
|
public GpxTrackPoint(final double longitude, final double latitude, final double altitude, final Date time) {
|
||||||
|
this(longitude, latitude, altitude, time, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GpxTrackPoint(final double longitude, final double latitude, final double altitude, final Date time, final int heartRate) {
|
||||||
super(longitude, latitude, altitude);
|
super(longitude, latitude, altitude);
|
||||||
this.time = time;
|
this.time = time;
|
||||||
|
this.heartRate = heartRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Date getTime() {
|
public Date getTime() {
|
||||||
return time;
|
return time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getHeartRate() {
|
||||||
|
return heartRate;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (!(o instanceof GpxTrackPoint)) return false;
|
if (!(o instanceof GpxTrackPoint)) return false;
|
||||||
if (!super.equals(o)) return false;
|
if (!super.equals(o)) return false;
|
||||||
final GpxTrackPoint that = (GpxTrackPoint) o;
|
final GpxTrackPoint that = (GpxTrackPoint) o;
|
||||||
return Objects.equals(time, that.time);
|
return Objects.equals(time, that.time) &&
|
||||||
|
Objects.equals(heartRate, that.heartRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(super.hashCode(), time);
|
return Objects.hash(super.hashCode(), time, heartRate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ActivityPoint toActivityPoint() {
|
||||||
|
final ActivityPoint activityPoint = new ActivityPoint();
|
||||||
|
activityPoint.setTime(time);
|
||||||
|
activityPoint.setLocation(this);
|
||||||
|
activityPoint.setHeartRate(heartRate);
|
||||||
|
|
||||||
|
return activityPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Builder {
|
public static class Builder {
|
||||||
@ -52,6 +73,7 @@ public class GpxTrackPoint extends GPSCoordinate {
|
|||||||
private double latitude;
|
private double latitude;
|
||||||
private double altitude;
|
private double altitude;
|
||||||
private Date time;
|
private Date time;
|
||||||
|
private int heartRate;
|
||||||
|
|
||||||
public Builder withLongitude(final double longitude) {
|
public Builder withLongitude(final double longitude) {
|
||||||
this.longitude = longitude;
|
this.longitude = longitude;
|
||||||
@ -73,8 +95,13 @@ public class GpxTrackPoint extends GPSCoordinate {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Builder withHeartRate(final int heartRate) {
|
||||||
|
this.heartRate = heartRate;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public GpxTrackPoint build() {
|
public GpxTrackPoint build() {
|
||||||
return new GpxTrackPoint(longitude, latitude, altitude, time);
|
return new GpxTrackPoint(longitude, latitude, altitude, time, heartRate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user