diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/TcxTrackWriter.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/TcxTrackWriter.java index 691318334..8222def1b 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/TcxTrackWriter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/TcxTrackWriter.java @@ -44,6 +44,7 @@ import java.util.TimeZone; * Garmin Training Center 3.5.3. * * @author Sandor Dornbush + * @author Dominik Ršttsches */ public class TcxTrackWriter implements TrackFormatWriter { protected static final String TIMESTAMP_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; @@ -174,22 +175,47 @@ public class TcxTrackWriter implements TrackFormatWriter { pw.print(""); pw.println(""); } - // TCX Trackpoint_t contains a sequence, needs to be put before - if (sensorData.hasCadence() - && sensorData.getCadence().getState() == Sensor.SensorState.SENDING - && sensorData.getCadence().hasValue()) { + + boolean cadenceAsCyclingCadence = categoryToTcxSport(track.getCategory()).equals(TCX_SPORT_BIKING); + + boolean cadenceValueAvailable = sensorData.hasCadence() + && sensorData.getCadence().getState() == Sensor.SensorState.SENDING + && sensorData.getCadence().hasValue(); + + // TCX Trackpoint_t contains a sequence, + // legacy XML element needs to be put before + // Only for the case that activity was marked as biking. + // Otherwise cadence we interpret it as running cadence data + // and put it into . + if (cadenceAsCyclingCadence && cadenceValueAvailable) { pw.print(" "); pw.print(Math.min(254, sensorData.getCadence().getValue())); pw.println(""); } - if (sensorData.hasPower() - && sensorData.getPower().getState() == Sensor.SensorState.SENDING - && sensorData.getPower().hasValue()) { + + boolean powerValueAvailable = sensorData.hasPower() + && sensorData.getPower().getState() == Sensor.SensorState.SENDING + && sensorData.getPower().hasValue(); + + if(powerValueAvailable + || (!cadenceAsCyclingCadence && cadenceValueAvailable)) { pw.print(" "); pw.print(""); - pw.print(""); - pw.print(sensorData.getPower().getValue()); - pw.print(""); + + // RunCadence needs to be put before power in order to be understood + // by Garmin Training Center. + if (!cadenceAsCyclingCadence && cadenceValueAvailable) { + pw.print(""); + pw.print(sensorData.getCadence().getValue()); + pw.print(""); + } + + if (powerValueAvailable) { + pw.print(""); + pw.print(sensorData.getPower().getValue()); + pw.print(""); + } + pw.println(""); } }