mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Mi Smart Scale: Mark device as busy while fetching weight history
This commit is contained in:
+7
@@ -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<? extends DeviceSupport> getDeviceSupportClass(final GBDevice device) {
|
||||
return MiSmartScaleDeviceSupport.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumSet<ServiceDeviceSupport.Flags> getInitialFlags() {
|
||||
return EnumSet.noneOf(ServiceDeviceSupport.Flags.class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+32
-4
@@ -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<WeightMeasurement> 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);
|
||||
|
||||
@@ -724,6 +724,7 @@
|
||||
<string name="busy_task_fetch_sleep_respiratory_rate_data">Fetching sleep respiratory rate data</string>
|
||||
<string name="busy_task_fetch_temperature">Fetching temperature data</string>
|
||||
<string name="busy_task_fetch_statistics">Fetching statistics</string>
|
||||
<string name="busy_task_fetch_weight_data">Fetching weight data</string>
|
||||
<string name="sleep_activity_date_range">From %1$s to %2$s</string>
|
||||
<string name="prefs_wearside">Wearing left or right?</string>
|
||||
<string name="prefs_weardirection">Wearing direction</string>
|
||||
|
||||
Reference in New Issue
Block a user