mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-12-25 10:05:49 +01:00
Add weight measurement support for MiScale
This commit is contained in:
parent
9ef8bc0d67
commit
3be6ec0007
@ -40,6 +40,7 @@ public class GBDaoGenerator {
|
|||||||
private static final String SAMPLE_HEART_RATE = "heartRate";
|
private static final String SAMPLE_HEART_RATE = "heartRate";
|
||||||
private static final String SAMPLE_TEMPERATURE = "temperature";
|
private static final String SAMPLE_TEMPERATURE = "temperature";
|
||||||
private static final String SAMPLE_TEMPERATURE_TYPE = "temperatureType";
|
private static final String SAMPLE_TEMPERATURE_TYPE = "temperatureType";
|
||||||
|
private static final String SAMPLE_WEIGHT_KG = "weightKg";
|
||||||
private static final String TIMESTAMP_FROM = "timestampFrom";
|
private static final String TIMESTAMP_FROM = "timestampFrom";
|
||||||
private static final String TIMESTAMP_TO = "timestampTo";
|
private static final String TIMESTAMP_TO = "timestampTo";
|
||||||
|
|
||||||
@ -125,6 +126,7 @@ public class GBDaoGenerator {
|
|||||||
addWena3Vo2Sample(schema, user, device);
|
addWena3Vo2Sample(schema, user, device);
|
||||||
addWena3StressSample(schema, user, device);
|
addWena3StressSample(schema, user, device);
|
||||||
addFemometerVinca2TemperatureSample(schema, user, device);
|
addFemometerVinca2TemperatureSample(schema, user, device);
|
||||||
|
addMiScaleWeightSample(schema, user, device);
|
||||||
|
|
||||||
addHuaweiActivitySample(schema, user, device);
|
addHuaweiActivitySample(schema, user, device);
|
||||||
|
|
||||||
@ -1315,4 +1317,11 @@ public class GBDaoGenerator {
|
|||||||
addTemperatureProperties(sample);
|
addTemperatureProperties(sample);
|
||||||
return sample;
|
return sample;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Entity addMiScaleWeightSample(Schema schema, Entity user, Entity device) {
|
||||||
|
Entity sample = addEntity(schema, "MiScaleWeightSample");
|
||||||
|
addCommonTimeSampleProperties("AbstractWeightSample", sample, user, device);
|
||||||
|
sample.addFloatProperty(SAMPLE_WEIGHT_KG).notNull().codeBeforeGetter(OVERRIDE);
|
||||||
|
return sample;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,6 +81,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.SleepRespiratoryRateSample;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.model.Spo2Sample;
|
import nodomain.freeyourgadget.gadgetbridge.model.Spo2Sample;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.StressSample;
|
import nodomain.freeyourgadget.gadgetbridge.model.StressSample;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureSample;
|
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureSample;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.WeightSample;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.ServiceDeviceSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.ServiceDeviceSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
|
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs;
|
import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs;
|
||||||
@ -275,6 +276,11 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TimeSampleProvider<? extends WeightSample> getWeightSampleProvider(GBDevice device, DaoSession session) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public ActivitySummaryParser getActivitySummaryParser(final GBDevice device) {
|
public ActivitySummaryParser getActivitySummaryParser(final GBDevice device) {
|
||||||
@ -522,6 +528,11 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsWeightMeasurement() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean supportsAlarmSnoozing() {
|
public boolean supportsAlarmSnoozing() {
|
||||||
return false;
|
return false;
|
||||||
|
@ -61,6 +61,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.Spo2Sample;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.model.StressSample;
|
import nodomain.freeyourgadget.gadgetbridge.model.StressSample;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureSample;
|
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureSample;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.TimeSample;
|
import nodomain.freeyourgadget.gadgetbridge.model.TimeSample;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.WeightSample;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.ServiceDeviceSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.ServiceDeviceSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.SleepAsAndroidSender;
|
import nodomain.freeyourgadget.gadgetbridge.service.SleepAsAndroidSender;
|
||||||
@ -268,6 +269,12 @@ public interface DeviceCoordinator {
|
|||||||
*/
|
*/
|
||||||
boolean supportsSleepRespiratoryRate();
|
boolean supportsSleepRespiratoryRate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if measurement and fetching of body weight is supported by the device
|
||||||
|
* (with this coordinator).
|
||||||
|
*/
|
||||||
|
boolean supportsWeightMeasurement();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if activity data fetching is supported AND possible at this
|
* Returns true if activity data fetching is supported AND possible at this
|
||||||
* very moment. This will consider the device state (being connected/disconnected/busy...)
|
* very moment. This will consider the device state (being connected/disconnected/busy...)
|
||||||
@ -350,6 +357,11 @@ public interface DeviceCoordinator {
|
|||||||
*/
|
*/
|
||||||
TimeSampleProvider<? extends SleepRespiratoryRateSample> getSleepRespiratoryRateSampleProvider(GBDevice device, DaoSession session);
|
TimeSampleProvider<? extends SleepRespiratoryRateSample> getSleepRespiratoryRateSampleProvider(GBDevice device, DaoSession session);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the sample provider for weight data, for the device being supported.
|
||||||
|
*/
|
||||||
|
TimeSampleProvider<? extends WeightSample> getWeightSampleProvider(GBDevice device, DaoSession session);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the {@link ActivitySummaryParser} for the device being supported.
|
* Returns the {@link ActivitySummaryParser} for the device being supported.
|
||||||
*
|
*
|
||||||
|
@ -0,0 +1,54 @@
|
|||||||
|
/* Copyright (C) 2024 Severin von Wnuck-Lipinski
|
||||||
|
|
||||||
|
This file is part of Gadgetbridge.
|
||||||
|
|
||||||
|
Gadgetbridge is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as published
|
||||||
|
by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Gadgetbridge is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||||
|
package nodomain.freeyourgadget.gadgetbridge.devices.miscale;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import de.greenrobot.dao.AbstractDao;
|
||||||
|
import de.greenrobot.dao.Property;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractTimeSampleProvider;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.entities.MiScaleWeightSample;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.entities.MiScaleWeightSampleDao;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
|
|
||||||
|
public class MiScaleSampleProvider extends AbstractTimeSampleProvider<MiScaleWeightSample> {
|
||||||
|
public MiScaleSampleProvider(GBDevice device, DaoSession session) {
|
||||||
|
super(device, session);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@NonNull
|
||||||
|
public AbstractDao<MiScaleWeightSample, ?> getSampleDao() {
|
||||||
|
return getSession().getMiScaleWeightSampleDao();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
protected Property getTimestampSampleProperty() {
|
||||||
|
return MiScaleWeightSampleDao.Properties.Timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
protected Property getDeviceIdentifierSampleProperty() {
|
||||||
|
return MiScaleWeightSampleDao.Properties.DeviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MiScaleWeightSample createSample() {
|
||||||
|
return new MiScaleWeightSample();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
/* Copyright (C) 2024 Severin von Wnuck-Lipinski
|
||||||
|
|
||||||
|
This file is part of Gadgetbridge.
|
||||||
|
|
||||||
|
Gadgetbridge is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as published
|
||||||
|
by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Gadgetbridge is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||||
|
package nodomain.freeyourgadget.gadgetbridge.entities;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.WeightSample;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils;
|
||||||
|
|
||||||
|
public abstract class AbstractWeightSample extends AbstractTimeSample implements WeightSample {
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return getClass().getSimpleName() + "{" +
|
||||||
|
"timestamp=" + DateTimeUtils.formatDateTime(DateTimeUtils.parseTimestampMillis(getTimestamp())) +
|
||||||
|
", weightKg=" + getWeightKg() +
|
||||||
|
", userId=" + getUserId() +
|
||||||
|
", deviceId=" + getDeviceId() +
|
||||||
|
"}";
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
/* Copyright (C) 2024 Severin von Wnuck-Lipinski
|
||||||
|
|
||||||
|
This file is part of Gadgetbridge.
|
||||||
|
|
||||||
|
Gadgetbridge is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as published
|
||||||
|
by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Gadgetbridge is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||||
|
package nodomain.freeyourgadget.gadgetbridge.model;
|
||||||
|
|
||||||
|
public interface WeightSample extends TimeSample {
|
||||||
|
/**
|
||||||
|
* Returns the weight value.
|
||||||
|
*/
|
||||||
|
float getWeightKg();
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user