diff --git a/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java b/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java
index 14159ceae..24ecfd327 100644
--- a/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java
+++ b/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java
@@ -54,7 +54,7 @@ public class GBDaoGenerator {
public static void main(String[] args) throws Exception {
- final Schema schema = new Schema(94, MAIN_PACKAGE + ".entities");
+ final Schema schema = new Schema(95, MAIN_PACKAGE + ".entities");
Entity userAttributes = addUserAttributes(schema);
Entity user = addUserInfo(schema, userAttributes);
@@ -160,6 +160,7 @@ public class GBDaoGenerator {
addHuaweiWorkoutDataSample(schema, huaweiWorkoutSummary);
addHuaweiWorkoutPaceSample(schema, huaweiWorkoutSummary);
addHuaweiWorkoutSwimSegmentsSample(schema, huaweiWorkoutSummary);
+ addHuaweiWorkoutSpO2Sample(schema, huaweiWorkoutSummary);
Entity huaweiDictData = addHuaweiDictData(schema, user, device);
addHuaweiDictDataValues(schema, huaweiDictData);
@@ -1544,6 +1545,20 @@ public class GBDaoGenerator {
return workoutSwimSegmentsSample;
}
+ private static Entity addHuaweiWorkoutSpO2Sample(Schema schema, Entity summaryEntity) {
+ Entity workoutSwimSegmentsSample = addEntity(schema, "HuaweiWorkoutSpO2Sample");
+
+ workoutSwimSegmentsSample.setJavaDoc("Contains Huawei Workout SpO2 data samples");
+
+ Property id = workoutSwimSegmentsSample.addLongProperty("workoutId").primaryKey().notNull().getProperty();
+ workoutSwimSegmentsSample.addToOne(summaryEntity, id);
+
+ workoutSwimSegmentsSample.addIntProperty("interval").notNull().primaryKey();
+ workoutSwimSegmentsSample.addIntProperty("value").notNull();
+
+ return workoutSwimSegmentsSample;
+ }
+
private static Entity addHuaweiDictData(Schema schema, Entity user, Entity device) {
Entity dictData = addEntity(schema, "HuaweiDictData");
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiCoordinator.java
index 9f80f8fad..d7834456e 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiCoordinator.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiCoordinator.java
@@ -51,6 +51,7 @@ import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiDictDataDao;
import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiDictDataValuesDao;
import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiWorkoutDataSampleDao;
import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiWorkoutPaceSampleDao;
+import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiWorkoutSpO2SampleDao;
import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiWorkoutSummarySample;
import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiWorkoutSummarySampleDao;
import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiWorkoutSwimSegmentsSampleDao;
@@ -135,6 +136,10 @@ public class HuaweiCoordinator {
session.getHuaweiWorkoutSwimSegmentsSampleDao().queryBuilder().where(
HuaweiWorkoutSwimSegmentsSampleDao.Properties.WorkoutId.eq(sample.getWorkoutId())
).buildDelete().executeDeleteWithoutDetachingEntities();
+
+ session.getHuaweiWorkoutSpO2SampleDao().queryBuilder().where(
+ HuaweiWorkoutSpO2SampleDao.Properties.WorkoutId.eq(sample.getWorkoutId())
+ ).buildDelete().executeDeleteWithoutDetachingEntities();
}
session.getHuaweiWorkoutSummarySampleDao().queryBuilder().where(HuaweiWorkoutSummarySampleDao.Properties.DeviceId.eq(deviceId)).buildDelete().executeDeleteWithoutDetachingEntities();
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiPacket.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiPacket.java
index 383a2c719..b3d3b52a6 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiPacket.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiPacket.java
@@ -580,6 +580,8 @@ public class HuaweiPacket {
return new Workout.WorkoutPace.Response(paramsProvider).fromPacket(this);
case Workout.WorkoutSwimSegments.id:
return new Workout.WorkoutSwimSegments.Response(paramsProvider).fromPacket(this);
+ case Workout.WorkoutSpO2.id:
+ return new Workout.WorkoutSpO2.Response(paramsProvider).fromPacket(this);
default:
this.isEncrypted = this.attemptDecrypt(); // Helps with debugging
return this;
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/Workout.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/Workout.java
index 19c604fc0..0d364327c 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/Workout.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/Workout.java
@@ -16,6 +16,8 @@
along with this program. If not, see . */
package nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets;
+import androidx.annotation.NonNull;
+
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
@@ -60,6 +62,7 @@ public class Workout {
public short dataCount;
public short paceCount;
public short segmentsCount = 0;
+ public short spO2Count = 0;
}
@@ -90,6 +93,9 @@ public class Workout {
if(subContainerTlv.contains(0x09)) {
workoutNumber.segmentsCount = subContainerTlv.getShort(0x09);
}
+ if(subContainerTlv.contains(0x0c)) {
+ workoutNumber.spO2Count = subContainerTlv.getShort(0x0c);
+ }
this.workoutNumbers.add(workoutNumber);
}
@@ -720,6 +726,77 @@ public class Workout {
}
}
+ public static class WorkoutSpO2 {
+ public static final int id = 0x14;
+
+ public static class Request extends HuaweiPacket {
+
+ public Request(
+ ParamsProvider paramsProvider,
+ short workoutNumber,
+ short spO2Number
+ ) {
+ super(paramsProvider);
+
+ this.serviceId = Workout.id;
+ this.commandId = id;
+
+ this.tlv = new HuaweiTLV()
+ .put(0x01, workoutNumber)
+ .put(0x02, spO2Number)
+ .put(0x03);
+
+ this.complete = true;
+ }
+ }
+
+ public static class Response extends HuaweiPacket {
+ public static class Block {
+ public int interval = -1;
+ public int value = -1;
+
+ @NonNull
+ @Override
+ public String toString() {
+ final StringBuffer sb = new StringBuffer("Block{");
+ sb.append("interval=").append(interval);
+ sb.append(", value=").append(value);
+ sb.append('}');
+ return sb.toString();
+ }
+ }
+
+ public short spO2Number1; //TODO: meaning of this field
+ public short spO2Number2; //TODO: meaning of this field
+ public List blocks;
+
+ public Response(ParamsProvider paramsProvider) {
+ super(paramsProvider);
+ }
+
+ @Override
+ public void parseTlv() throws ParseException {
+
+
+ this.spO2Number1 = this.tlv.getShort(0x01);
+ this.spO2Number2 = this.tlv.getShort(0x02);
+
+ HuaweiTLV container = this.tlv.getObject(0x83);
+
+ this.blocks = new ArrayList<>();
+ for (HuaweiTLV blockTlv : container.getObjects(0x84)) {
+ Block block = new Block();
+
+ if (blockTlv.contains(0x05))
+ block.interval = blockTlv.getAsInteger(0x05);
+ if (blockTlv.contains(0x06))
+ block.value = blockTlv.getAsInteger(0x06);
+ blocks.add(block);
+ }
+ }
+ }
+ }
+
public static class NotifyHeartRate {
public static final int id = 0x17;
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java
index 119d0d500..c8ccf7be5 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java
@@ -80,6 +80,8 @@ import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiWorkoutDataSample;
import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiWorkoutDataSampleDao;
import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiWorkoutPaceSample;
import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiWorkoutPaceSampleDao;
+import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiWorkoutSpO2Sample;
+import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiWorkoutSpO2SampleDao;
import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiWorkoutSummarySample;
import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiWorkoutSummarySampleDao;
import nodomain.freeyourgadget.gadgetbridge.entities.HuaweiWorkoutSwimSegmentsSample;
@@ -1899,6 +1901,33 @@ public class HuaweiSupportProvider {
}
}
+ public void addWorkoutSpO2Data(Long workoutId, List spO2List, short number) {
+ if (workoutId == null)
+ return;
+
+ try (DBHandler db = GBApplication.acquireDB()) {
+ HuaweiWorkoutSpO2SampleDao dao = db.getDaoSession().getHuaweiWorkoutSpO2SampleDao();
+
+ if (number == 0) {
+ final DeleteQuery tableDeleteQuery = dao.queryBuilder()
+ .where(HuaweiWorkoutSpO2SampleDao.Properties.WorkoutId.eq(workoutId))
+ .buildDelete();
+ tableDeleteQuery.executeDeleteWithoutDetachingEntities();
+ }
+
+ for (Workout.WorkoutSpO2.Response.Block block : spO2List) {
+ HuaweiWorkoutSpO2Sample spO2Sample = new HuaweiWorkoutSpO2Sample(
+ workoutId,
+ block.interval,
+ block.value
+ );
+ dao.insertOrReplace(spO2Sample);
+ }
+ } catch (Exception e) {
+ LOG.error("Failed to add workout SpO2 data to database", e);
+ }
+ }
+
public void addDictData(List dictData) {
try (DBHandler db = GBApplication.acquireDB()) {
Long userId = DBHelper.getUser(db.getDaoSession()).getId();
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutDataRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutDataRequest.java
index 98756abdc..338a921ee 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutDataRequest.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutDataRequest.java
@@ -38,10 +38,11 @@ public class GetWorkoutDataRequest extends Request {
/**
* Request to get workout totals
- * @param support The support
+ *
+ * @param support The support
* @param workoutNumbers The numbers of the current workout
- * @param remainder The numbers of the remainder if the workouts to get
- * @param number The number of this data request
+ * @param remainder The numbers of the remainder if the workouts to get
+ * @param number The number of this data request
*/
public GetWorkoutDataRequest(HuaweiSupportProvider support, Workout.WorkoutCount.Response.WorkoutNumbers workoutNumbers, List remainder, short number, Long databaseId) {
super(support);
@@ -79,13 +80,13 @@ public class GetWorkoutDataRequest extends Request {
throw new WorkoutParseException("Incorrect data number!");
LOG.info("Workout {} data {}:", this.workoutNumbers.workoutNumber, this.number);
- LOG.info("Workout : " + packet.workoutNumber);
- LOG.info("Data num: " + packet.dataNumber);
- LOG.info("Header : " + Arrays.toString(packet.rawHeader));
- LOG.info("Header : " + packet.header);
- LOG.info("Data : " + Arrays.toString(packet.rawData));
- LOG.info("Data : " + Arrays.toString(packet.dataList.toArray()));
- LOG.info("Bitmap : " + packet.innerBitmap);
+ LOG.info("Workout : {}", packet.workoutNumber);
+ LOG.info("Data num: {}", packet.dataNumber);
+ LOG.info("Header : {}", Arrays.toString(packet.rawHeader));
+ LOG.info("Header : {}", packet.header);
+ LOG.info("Data : {}", Arrays.toString(packet.rawData));
+ LOG.info("Data : {}", Arrays.toString(packet.dataList.toArray()));
+ LOG.info("Bitmap : {}", packet.innerBitmap);
this.supportProvider.addWorkoutSampleData(
this.databaseId,
@@ -122,6 +123,16 @@ public class GetWorkoutDataRequest extends Request {
);
nextRequest.setFinalizeReq(this.finalizeReq);
this.nextRequest(nextRequest);
+ } else if (this.workoutNumbers.spO2Count > 0) {
+ GetWorkoutSpO2Request nextRequest = new GetWorkoutSpO2Request(
+ this.supportProvider,
+ this.workoutNumbers,
+ this.remainder,
+ (short) 0,
+ this.databaseId
+ );
+ nextRequest.setFinalizeReq(this.finalizeReq);
+ this.nextRequest(nextRequest);
} else {
new HuaweiWorkoutGbParser(getDevice(), getContext()).parseWorkout(this.databaseId);
supportProvider.downloadWorkoutGpsFiles(this.workoutNumbers.workoutNumber, this.databaseId, new Runnable() {
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutPaceRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutPaceRequest.java
index b4261b3bd..96842fe40 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutPaceRequest.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutPaceRequest.java
@@ -52,7 +52,7 @@ public class GetWorkoutPaceRequest extends Request {
@Override
protected List createRequest() throws RequestCreationException {
try {
- return new Workout.WorkoutPace.Request(paramsProvider,this.workoutNumbers.workoutNumber, this.number).serialize();
+ return new Workout.WorkoutPace.Request(paramsProvider, this.workoutNumbers.workoutNumber, this.number).serialize();
} catch (HuaweiPacket.CryptoException e) {
throw new RequestCreationException(e);
}
@@ -72,10 +72,10 @@ public class GetWorkoutPaceRequest extends Request {
throw new WorkoutParseException("Incorrect pace number!");
LOG.info("Workout {} pace {}:", this.workoutNumbers.workoutNumber, this.number);
- LOG.info("Workout : " + packet.workoutNumber);
- LOG.info("Pace : " + packet.paceNumber);
- LOG.info("Block num: " + packet.blocks.size());
- LOG.info("Blocks : " + Arrays.toString(packet.blocks.toArray()));
+ LOG.info("Workout : {}", packet.workoutNumber);
+ LOG.info("Pace : {}", packet.paceNumber);
+ LOG.info("Block num: {}", packet.blocks.size());
+ LOG.info("Blocks : {}", Arrays.toString(packet.blocks.toArray()));
supportProvider.addWorkoutPaceData(this.databaseId, packet.blocks, packet.paceNumber);
@@ -99,7 +99,17 @@ public class GetWorkoutPaceRequest extends Request {
);
nextRequest.setFinalizeReq(this.finalizeReq);
this.nextRequest(nextRequest);
- } else {
+ } else if (this.workoutNumbers.spO2Count > 0) {
+ GetWorkoutSpO2Request nextRequest = new GetWorkoutSpO2Request(
+ this.supportProvider,
+ this.workoutNumbers,
+ this.remainder,
+ (short) 0,
+ this.databaseId
+ );
+ nextRequest.setFinalizeReq(this.finalizeReq);
+ this.nextRequest(nextRequest);
+ } else {
new HuaweiWorkoutGbParser(getDevice(), getContext()).parseWorkout(this.databaseId);
supportProvider.downloadWorkoutGpsFiles(this.workoutNumbers.workoutNumber, this.databaseId, new Runnable() {
@Override
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutSpO2Request.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutSpO2Request.java
new file mode 100644
index 000000000..cc936bd95
--- /dev/null
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutSpO2Request.java
@@ -0,0 +1,97 @@
+package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+
+import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket;
+import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.Workout;
+import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider;
+import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiWorkoutGbParser;
+
+public class GetWorkoutSpO2Request extends Request {
+ private static final Logger LOG = LoggerFactory.getLogger(GetWorkoutSpO2Request.class);
+
+ Workout.WorkoutCount.Response.WorkoutNumbers workoutNumbers;
+ List remainder;
+ short number;
+ Long databaseId;
+
+ public GetWorkoutSpO2Request(HuaweiSupportProvider support, Workout.WorkoutCount.Response.WorkoutNumbers workoutNumbers, List remainder, short number, Long databaseId) {
+ super(support);
+
+ this.serviceId = Workout.id;
+ this.commandId = Workout.WorkoutSpO2.id;
+
+ this.workoutNumbers = workoutNumbers;
+ this.remainder = remainder;
+ this.number = number;
+
+ this.databaseId = databaseId;
+ }
+
+ @Override
+ protected List createRequest() throws RequestCreationException {
+ try {
+ return new Workout.WorkoutSpO2.Request(paramsProvider, this.workoutNumbers.workoutNumber, this.number).serialize();
+ } catch (HuaweiPacket.CryptoException e) {
+ throw new RequestCreationException(e);
+ }
+ }
+
+ @Override
+ protected void processResponse() throws ResponseParseException {
+ if (!(receivedPacket instanceof Workout.WorkoutSpO2.Response))
+ throw new ResponseTypeMismatchException(receivedPacket, Workout.WorkoutSwimSegments.Response.class);
+
+ Workout.WorkoutSpO2.Response packet = (Workout.WorkoutSpO2.Response) receivedPacket;
+
+
+ LOG.info("Workout {} current {}:", this.workoutNumbers.workoutNumber, this.number);
+ LOG.info("spO2Number1: {}", packet.spO2Number1);
+ LOG.info("spO2Number2: {}", packet.spO2Number2);
+ LOG.info("Block num : {}", packet.blocks.size());
+ LOG.info("Blocks : {}", Arrays.toString(packet.blocks.toArray()));
+
+ supportProvider.addWorkoutSpO2Data(this.databaseId, packet.blocks, this.number);
+
+ if (this.workoutNumbers.spO2Count > this.number + 1) {
+ GetWorkoutSpO2Request nextRequest = new GetWorkoutSpO2Request(
+ this.supportProvider,
+ this.workoutNumbers,
+ this.remainder,
+ (short) (this.number + 1),
+ this.databaseId
+ );
+ nextRequest.setFinalizeReq(this.finalizeReq);
+ this.nextRequest(nextRequest);
+ } else {
+ new HuaweiWorkoutGbParser(getDevice(), getContext()).parseWorkout(this.databaseId);
+ supportProvider.downloadWorkoutGpsFiles(this.workoutNumbers.workoutNumber, this.databaseId, new Runnable() {
+ @Override
+ public void run() {
+ if (!remainder.isEmpty()) {
+ GetWorkoutTotalsRequest nextRequest = new GetWorkoutTotalsRequest(
+ GetWorkoutSpO2Request.this.supportProvider,
+ remainder.remove(0),
+ remainder
+ );
+ nextRequest.setFinalizeReq(GetWorkoutSpO2Request.this.finalizeReq);
+ // Cannot do this with nextRequest because it's in a callback
+ try {
+ nextRequest.doPerform();
+ } catch (IOException e) {
+ finalizeReq.handleException(new ResponseParseException("Cannot send next request", e));
+ }
+ } else {
+ supportProvider.endOfWorkoutSync();
+ }
+ }
+ });
+ }
+
+ }
+}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutSwimSegmentsRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutSwimSegmentsRequest.java
index d636870d9..2a6d81ca1 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutSwimSegmentsRequest.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutSwimSegmentsRequest.java
@@ -36,7 +36,7 @@ public class GetWorkoutSwimSegmentsRequest extends Request {
@Override
protected List createRequest() throws RequestCreationException {
try {
- return new Workout.WorkoutSwimSegments.Request(paramsProvider,this.workoutNumbers.workoutNumber, this.number).serialize();
+ return new Workout.WorkoutSwimSegments.Request(paramsProvider, this.workoutNumbers.workoutNumber, this.number).serialize();
} catch (HuaweiPacket.CryptoException e) {
throw new RequestCreationException(e);
}
@@ -56,10 +56,10 @@ public class GetWorkoutSwimSegmentsRequest extends Request {
throw new WorkoutParseException("Incorrect pace number!");
LOG.info("Workout {} segment {}:", this.workoutNumbers.workoutNumber, this.number);
- LOG.info("Workout : " + packet.workoutNumber);
- LOG.info("Segments : " + packet.segmentNumber);
- LOG.info("Block num: " + packet.blocks.size());
- LOG.info("Blocks : " + Arrays.toString(packet.blocks.toArray()));
+ LOG.info("Workout : {}", packet.workoutNumber);
+ LOG.info("Segments : {}", packet.segmentNumber);
+ LOG.info("Block num: {}", packet.blocks.size());
+ LOG.info("Blocks : {}", Arrays.toString(packet.blocks.toArray()));
supportProvider.addWorkoutSwimSegmentsData(this.databaseId, packet.blocks, packet.segmentNumber);
@@ -73,6 +73,16 @@ public class GetWorkoutSwimSegmentsRequest extends Request {
);
nextRequest.setFinalizeReq(this.finalizeReq);
this.nextRequest(nextRequest);
+ } else if (this.workoutNumbers.spO2Count > 0) {
+ GetWorkoutSpO2Request nextRequest = new GetWorkoutSpO2Request(
+ this.supportProvider,
+ this.workoutNumbers,
+ this.remainder,
+ (short) 0,
+ this.databaseId
+ );
+ nextRequest.setFinalizeReq(this.finalizeReq);
+ this.nextRequest(nextRequest);
} else {
new HuaweiWorkoutGbParser(getDevice(), getContext()).parseWorkout(this.databaseId);
supportProvider.downloadWorkoutGpsFiles(this.workoutNumbers.workoutNumber, this.databaseId, new Runnable() {
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutTotalsRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutTotalsRequest.java
index ff520972d..98ee344c1 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutTotalsRequest.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/GetWorkoutTotalsRequest.java
@@ -35,9 +35,10 @@ public class GetWorkoutTotalsRequest extends Request {
/**
* Request to get workout totals
- * @param support The support
+ *
+ * @param support The support
* @param workoutNumbers The numbers of the current workout
- * @param remainder The numbers of the remainder of the workouts to get
+ * @param remainder The numbers of the remainder of the workouts to get
*/
public GetWorkoutTotalsRequest(HuaweiSupportProvider support, Workout.WorkoutCount.Response.WorkoutNumbers workoutNumbers, List remainder) {
super(support);
@@ -69,16 +70,16 @@ public class GetWorkoutTotalsRequest extends Request {
throw new WorkoutParseException("Incorrect workout number!");
LOG.info("Workout {} totals:", this.workoutNumbers.workoutNumber);
- LOG.info("Number : " + packet.number);
- LOG.info("Status : " + packet.status);
- LOG.info("Start : " + packet.startTime);
- LOG.info("End : " + packet.endTime);
- LOG.info("Calories: " + packet.calories);
- LOG.info("Distance: " + packet.distance);
- LOG.info("Steps : " + packet.stepCount);
- LOG.info("Time : " + packet.totalTime);
- LOG.info("Duration: " + packet.duration);
- LOG.info("Type : " + packet.type);
+ LOG.info("Number : {}", packet.number);
+ LOG.info("Status : {}", packet.status);
+ LOG.info("Start : {}", packet.startTime);
+ LOG.info("End : {}", packet.endTime);
+ LOG.info("Calories: {}", packet.calories);
+ LOG.info("Distance: {}", packet.distance);
+ LOG.info("Steps : {}", packet.stepCount);
+ LOG.info("Time : {}", packet.totalTime);
+ LOG.info("Duration: {}", packet.duration);
+ LOG.info("Type : {}", packet.type);
Long databaseId = this.supportProvider.addWorkoutTotalsData(packet);
@@ -113,7 +114,17 @@ public class GetWorkoutTotalsRequest extends Request {
);
nextRequest.setFinalizeReq(this.finalizeReq);
this.nextRequest(nextRequest);
- } else {
+ } else if (this.workoutNumbers.spO2Count > 0) {
+ GetWorkoutSpO2Request nextRequest = new GetWorkoutSpO2Request(
+ this.supportProvider,
+ this.workoutNumbers,
+ this.remainder,
+ (short) 0,
+ databaseId
+ );
+ nextRequest.setFinalizeReq(this.finalizeReq);
+ this.nextRequest(nextRequest);
+ } else {
new HuaweiWorkoutGbParser(getDevice(), getContext()).parseWorkout(databaseId);
supportProvider.downloadWorkoutGpsFiles(this.workoutNumbers.workoutNumber, databaseId, new Runnable() {
@Override