diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/zetime/ZeTimeSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/zetime/ZeTimeSampleProvider.java index 00b94ddc3..c923cc11d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/zetime/ZeTimeSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/zetime/ZeTimeSampleProvider.java @@ -35,7 +35,7 @@ public class ZeTimeSampleProvider extends AbstractSampleProvider 0){ getStepData(); } else if(availableHeartRateData > 0) @@ -463,8 +467,7 @@ public class ZeTimeDeviceSupport extends AbstractBTLEDeviceSupport { builder.write(writeCharacteristic, new byte[]{ZeTimeConstants.CMD_PREAMBLE, ZeTimeConstants.CMD_GET_HEARTRATE_EXDATA, ZeTimeConstants.CMD_REQUEST, - 0x02, - 0x00, + 0x01, 0x00, 0x00, ZeTimeConstants.CMD_END}); @@ -498,10 +501,10 @@ public class ZeTimeDeviceSupport extends AbstractBTLEDeviceSupport { private void handleStepsData(byte[] msg) { ZeTimeActivitySample sample = new ZeTimeActivitySample(); - Calendar timestamp = GregorianCalendar.getInstance(); - timestamp.setTimeInMillis((long) (msg[10] * 16777216 + msg[9] * 65536 + msg[8] * 256 + msg[7])); + //Calendar timestamp = GregorianCalendar.getInstance(); + //timestamp.setTimeInMillis((long) (msg[10] * 16777216 + msg[9] * 65536 + msg[8] * 256 + msg[7])); sample.setSteps((int) (msg[14] * 16777216 + msg[13] * 65536 + msg[12] * 256 + msg[11])); - sample.setTimestamp((int) (timestamp.getTimeInMillis() / 1000L)); + sample.setTimestamp(msg[10] * 16777216 + msg[9] * 65536 + msg[8] * 256 + msg[7]); sample.setRawKind(ActivityKind.TYPE_ACTIVITY); sample.setRawIntensity(sample.getSteps()); @@ -516,11 +519,91 @@ public class ZeTimeDeviceSupport extends AbstractBTLEDeviceSupport { } progressSteps = msg[5] + msg[6] * 256; - GB.updateTransferNotification(getContext().getString(R.string.busy_task_fetch_activity_data), true, (int) (progressSteps / availableStepsData), getContext()); + GB.updateTransferNotification(getContext().getString(R.string.busy_task_fetch_activity_data), true, (int) (progressSteps *100 / availableStepsData), getContext()); if (progressSteps == availableStepsData) { progressSteps = 0; availableStepsData = 0; - getHeartRateData(); + GB.updateTransferNotification("", false, 100, getContext()); + if (getDevice().isBusy()) { + getDevice().unsetBusyTask(); + getDevice().sendDeviceUpdateIntent(getContext()); + } + if(availableHeartRateData > 0) { + getHeartRateData(); + } else if(availableSleepData > 0) + { + getSleepData(); + } + } + } + + private void handleSleepData(byte[] msg) + { + ZeTimeActivitySample sample = new ZeTimeActivitySample(); + sample.setTimestamp(msg[10] * 16777216 + msg[9] * 65536 + msg[8] * 256 + msg[7]); + if(msg[11] == 0) { + sample.setRawKind(ActivityKind.TYPE_DEEP_SLEEP); + } else if(msg[11] == 1) + { + sample.setRawKind(ActivityKind.TYPE_LIGHT_SLEEP); + } else + { + sample.setRawKind(ActivityKind.TYPE_UNKNOWN); + } + + try (DBHandler dbHandler = GBApplication.acquireDB()) { + sample.setUserId(DBHelper.getUser(dbHandler.getDaoSession()).getId()); + sample.setDeviceId(DBHelper.getDevice(getDevice(), dbHandler.getDaoSession()).getId()); + ZeTimeSampleProvider provider = new ZeTimeSampleProvider(getDevice(), dbHandler.getDaoSession()); + provider.addGBActivitySample(sample); + } catch (Exception ex) { + GB.toast(getContext(), "Error saving steps data: " + ex.getLocalizedMessage(), Toast.LENGTH_LONG, GB.ERROR); + GB.updateTransferNotification("Data transfer failed", false, 0, getContext()); + } + + progressSteps = msg[5] + msg[6] * 256; + GB.updateTransferNotification(getContext().getString(R.string.busy_task_fetch_activity_data), true, (int) (progressSteps *100 / availableSleepData), getContext()); + if (progressSteps == availableStepsData) { + progressSteps = 0; + availableSleepData = 0; + GB.updateTransferNotification("", false, 100, getContext()); + if (getDevice().isBusy()) { + getDevice().unsetBusyTask(); + getDevice().sendDeviceUpdateIntent(getContext()); + } + } + } + + private void handleHeatRateData(byte[] msg) + { + ZeTimeActivitySample sample = new ZeTimeActivitySample(); + sample.setHeartRate(msg[11]); + sample.setTimestamp(msg[10] * 16777216 + msg[9] * 65536 + msg[8] * 256 + msg[7]); + + try (DBHandler dbHandler = GBApplication.acquireDB()) { + sample.setUserId(DBHelper.getUser(dbHandler.getDaoSession()).getId()); + sample.setDeviceId(DBHelper.getDevice(getDevice(), dbHandler.getDaoSession()).getId()); + ZeTimeSampleProvider provider = new ZeTimeSampleProvider(getDevice(), dbHandler.getDaoSession()); + provider.addGBActivitySample(sample); + } catch (Exception ex) { + GB.toast(getContext(), "Error saving steps data: " + ex.getLocalizedMessage(), Toast.LENGTH_LONG, GB.ERROR); + GB.updateTransferNotification("Data transfer failed", false, 0, getContext()); + } + + progressSteps = msg[5] + msg[6] * 256; + GB.updateTransferNotification(getContext().getString(R.string.busy_task_fetch_activity_data), true, (int) (progressSteps *100 / availableHeartRateData), getContext()); + if (progressSteps == availableStepsData) { + progressSteps = 0; + availableHeartRateData = 0; + GB.updateTransferNotification("", false, 100, getContext()); + if (getDevice().isBusy()) { + getDevice().unsetBusyTask(); + getDevice().sendDeviceUpdateIntent(getContext()); + } + if(availableSleepData > 0) + { + getSleepData(); + } } } }