diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miscale/MiSmartScaleCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miscale/MiSmartScaleCoordinator.java index b5a93a8736..de71343420 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miscale/MiSmartScaleCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miscale/MiSmartScaleCoordinator.java @@ -18,6 +18,7 @@ package nodomain.freeyourgadget.gadgetbridge.devices.miscale; import androidx.annotation.NonNull; +import java.util.EnumSet; import java.util.regex.Pattern; import de.greenrobot.dao.query.QueryBuilder; @@ -32,6 +33,7 @@ import nodomain.freeyourgadget.gadgetbridge.entities.MiScaleWeightSampleDao; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.WeightSample; import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport; +import nodomain.freeyourgadget.gadgetbridge.service.ServiceDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.devices.miscale.MiSmartScaleDeviceSupport; public class MiSmartScaleCoordinator extends AbstractBLEDeviceCoordinator { @@ -128,4 +130,9 @@ public class MiSmartScaleCoordinator extends AbstractBLEDeviceCoordinator { public Class getDeviceSupportClass(final GBDevice device) { return MiSmartScaleDeviceSupport.class; } + + @Override + public EnumSet getInitialFlags() { + return EnumSet.noneOf(ServiceDeviceSupport.Flags.class); + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java index bf31854759..5cd16f0bc4 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java @@ -365,9 +365,9 @@ public class GBDevice implements Parcelable { throw new IllegalArgumentException("busy task must not be null"); } if (mBusyTask != null) { - LOG.warn("Attempt to mark device as busy with: " + task + ", but is already busy with: " + mBusyTask); + LOG.warn("Attempt to mark device as busy with: {}, but is already busy with: {}", task, mBusyTask); } - LOG.info("Mark device as busy: " + task); + LOG.info("Mark device as busy: {}", task); mBusyTask = task; } @@ -379,7 +379,7 @@ public class GBDevice implements Parcelable { LOG.error("Attempt to mark device as not busy anymore, but was not busy before."); return; } - LOG.info("Mark device as NOT busy anymore: " + mBusyTask); + LOG.info("Mark device as NOT busy anymore: {}", mBusyTask); mBusyTask = null; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miscale/MiSmartScaleDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miscale/MiSmartScaleDeviceSupport.java index ed55ae11c5..56715e699f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miscale/MiSmartScaleDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miscale/MiSmartScaleDeviceSupport.java @@ -31,6 +31,7 @@ import java.util.List; import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventVersionInfo; @@ -43,10 +44,12 @@ import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions; import nodomain.freeyourgadget.gadgetbridge.service.btle.GattCharacteristic; import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; +import nodomain.freeyourgadget.gadgetbridge.service.btle.actions.SetDeviceBusyAction; import nodomain.freeyourgadget.gadgetbridge.service.btle.actions.SetDeviceStateAction; import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.deviceinfo.DeviceInfo; import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.deviceinfo.DeviceInfoProfile; import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol; +import nodomain.freeyourgadget.gadgetbridge.util.GB; import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.*; @@ -118,11 +121,8 @@ public class MiSmartScaleDeviceSupport extends AbstractBTLEDeviceSupport { setTime(builder); builder.notify(getCharacteristic(GattCharacteristic.UUID_CHARACTERISTIC_WEIGHT_MEASUREMENT), true); - builder.notify(getCharacteristic(UUID_CHARACTERISTIC_WEIGHT_HISTORY), true); - // Query weight measurements saved by the scale - sendHistoryCommand(builder, CMD_HISTORY_START, true); - sendHistoryCommand(builder, CMD_HISTORY_QUERY, false); + fetchWeightHistory(builder); builder.add(new SetDeviceStateAction(getDevice(), GBDevice.State.INITIALIZED, getContext())); @@ -150,6 +150,9 @@ public class MiSmartScaleDeviceSupport extends AbstractBTLEDeviceSupport { sendHistoryCommand(builder, CMD_HISTORY_END, true); builder.notify(getCharacteristic(UUID_CHARACTERISTIC_WEIGHT_HISTORY), false); builder.queue(getQueue()); + getDevice().unsetBusyTask(); + GB.updateTransferNotification(null, "", false, 100, getContext()); + getDevice().sendDeviceUpdateIntent(getContext()); } else { ByteBuffer buf = ByteBuffer.wrap(characteristic.getValue()); List measurements = new ArrayList<>(); @@ -210,6 +213,31 @@ public class MiSmartScaleDeviceSupport extends AbstractBTLEDeviceSupport { return false; } + @Override + public void onFetchRecordedData(final int dataTypes) { + if (getDevice().isBusy()) { + // already busy + return; + } + + final TransactionBuilder builder = createTransactionBuilder("fetch weight history"); + fetchWeightHistory(builder); + builder.queue(getQueue()); + } + + public void fetchWeightHistory(final TransactionBuilder builder) { + final String fetchMessage = getContext().getString(R.string.busy_task_fetch_weight_data); + + GB.updateTransferNotification(fetchMessage,"", true, 0, getContext()); + + builder.add(new SetDeviceBusyAction(getDevice(), fetchMessage, getContext())); + builder.notify(getCharacteristic(UUID_CHARACTERISTIC_WEIGHT_HISTORY), true); + // Query weight measurements saved by the scale + sendHistoryCommand(builder, CMD_HISTORY_START, true); + sendHistoryCommand(builder, CMD_HISTORY_QUERY, false); + builder.queue(getQueue()); + } + private void setTime(TransactionBuilder builder) { GregorianCalendar now = BLETypeConversions.createCalendar(); byte[] time = BLETypeConversions.calendarToCurrentTime(now, 0); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7976aed008..b909509429 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -724,6 +724,7 @@ Fetching sleep respiratory rate data Fetching temperature data Fetching statistics + Fetching weight data From %1$s to %2$s Wearing left or right? Wearing direction