otbeta/com.iamthefij.otbeta/src/main/java/com/iamthefij/otbeta/api/Workout.java

235 lines
6.0 KiB
Java

package com.iamthefij.otbeta.api;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
/**
* A single workout with all metrics and details
*/
public class Workout {
private HeartRateZones mHrm;
private final Integer mCalories;
private final Integer mDuration;
private final Integer mId;
private final Integer mPoints;
private final Integer mStartTimeUtc;
private Metric mDistance;
private Metric mHeartRate;
private Metric mResistance;
private Metric mSpeed;
private Metric mVertical;
private final String mDeviceType;
private final String mNotes;
private final String mPointsLabel;
private final String mSource;
private final String mSourceLogo;
private final String mStartTimeLocal;
private final String mTimezone;
public HeartRateZones getHrm() {
return mHrm;
}
public Integer getCalories() {
return mCalories;
}
public Integer getDuration() {
return mDuration;
}
public Integer getId() {
return mId;
}
public Integer getPoints() {
return mPoints;
}
public Integer getStartTimeUtc() {
return mStartTimeUtc;
}
public Metric getDistance() {
return mDistance;
}
public Metric getHeartRate() {
return mHeartRate;
}
public Metric getResistance() {
return mResistance;
}
public Metric getSpeed() {
return mSpeed;
}
public Metric getVertical() {
return mVertical;
}
public String getDeviceType() {
return mDeviceType;
}
public String getNotes() {
return mNotes;
}
public String getPointsLabel() {
return mPointsLabel;
}
public String getSource() {
return mSource;
}
public String getSourceLogo() {
return mSourceLogo;
}
public String getStartTimeLocal() {
return mStartTimeLocal;
}
public String getTimezone() {
return mTimezone;
}
public Workout(JSONObject workout) {
mCalories = workout.optInt("calories");
mDuration = workout.optInt("duration");
mId = workout.optInt("id");
mPoints = workout.optInt("points");
mStartTimeUtc = workout.optInt("startTimeUtc");
mDeviceType = workout.optString("deviceType");
mNotes = workout.optString("notes");
mPointsLabel = workout.optString("pointsLabel");
mSource = workout.optString("source");
mSourceLogo = workout.optString("sourceLogo");
mStartTimeLocal = workout.optString("startTimeLocal");
mTimezone = workout.optString("timezone");
JSONObject distance = workout.optJSONObject("distance");
if (distance != null) {
mDistance = new Metric(distance);
}
JSONObject heartRate = workout.optJSONObject("heartRate");
if (heartRate != null) {
mHeartRate = new Metric(heartRate);
}
JSONObject resistance = workout.optJSONObject("resistance");
if (resistance != null) {
mResistance = new Metric(resistance);
}
JSONObject speed = workout.optJSONObject("speed");
if (speed != null) {
mSpeed = new Metric(speed);
}
JSONObject vertical = workout.optJSONObject("vertical");
if (vertical != null) {
mVertical = new Metric(vertical);
}
JSONObject hrm = workout.optJSONObject("hrm");
if (hrm != null) {
mHrm = new HeartRateZones(hrm);
}
}
public class Metric {
private final Double mAverage;
private final Integer mInterval;
private final String mUnits;
private List<Double> mValues;
private final Double mValue;
public Double getAverage() {
return mAverage;
}
public Integer getInterval() {
return mInterval;
}
public String getUnits() {
return mUnits;
}
public List<Double> getValues() {
return mValues;
}
public Double getValue() {
return mValue;
}
public Metric(JSONObject metric) {
mAverage = metric.optDouble("average");
mInterval = metric.optInt("interval");
mUnits = metric.optString("units");
mValue = metric.optDouble("value");
JSONArray values = metric.optJSONArray("values");
if (values != null) {
mValues = new ArrayList<>(values.length());
for (int i = 0; i < values.length(); i++) {
mValues.add(values.optDouble(i));
}
}
}
}
public class HeartRateZones {
private final Integer mBlueZoneSeconds;
private final Integer mGreenZoneSeconds;
private final Integer mGreyZoneSeconds;
private final Integer mOrangeZoneSeconds;
private final Integer mRedZoneSeconds;
private final Integer mTargetHeartRate;
public Integer getBlueZoneSeconds() {
return mBlueZoneSeconds;
}
public Integer getGreenZoneSeconds() {
return mGreenZoneSeconds;
}
public Integer getGreyZoneSeconds() {
return mGreyZoneSeconds;
}
public Integer getOrangeZoneSeconds() {
return mOrangeZoneSeconds;
}
public Integer getRedZoneSeconds() {
return mRedZoneSeconds;
}
public Integer getTargetHeartRate() {
return mTargetHeartRate;
}
public HeartRateZones(JSONObject zones) {
mBlueZoneSeconds = zones.optInt("blueZoneSeconds");
mGreenZoneSeconds = zones.optInt("greenZoneSeconds");
mGreyZoneSeconds = zones.optInt("greyZoneSeconds");
mOrangeZoneSeconds = zones.optInt("orangeZoneSeconds");
mRedZoneSeconds = zones.optInt("redZoneSeconds");
mTargetHeartRate = zones.optInt("targetHeartRate");
}
}
}