mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2025-06-05 21:49:48 +02:00
Xiaomi: Update stress ranges to match watch
This commit is contained in:
@@ -59,7 +59,6 @@ import nodomain.freeyourgadget.gadgetbridge.devices.TimeSampleProvider;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.StressSample;
|
import nodomain.freeyourgadget.gadgetbridge.model.StressSample;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils;
|
import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
||||||
|
|
||||||
public class StressChartFragment extends AbstractChartFragment<StressChartFragment.StressChartsData> {
|
public class StressChartFragment extends AbstractChartFragment<StressChartFragment.StressChartsData> {
|
||||||
@@ -97,7 +96,7 @@ public class StressChartFragment extends AbstractChartFragment<StressChartFragme
|
|||||||
|
|
||||||
ensureStartAndEndSamples((List<StressSample>) samples);
|
ensureStartAndEndSamples((List<StressSample>) samples);
|
||||||
|
|
||||||
return new StressChartsDataBuilder(samples).build();
|
return new StressChartsDataBuilder(samples, device.getDeviceCoordinator().getStressRanges()).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected LineDataSet createDataSet(final StressType stressType, final List<Entry> values) {
|
protected LineDataSet createDataSet(final StressType stressType, final List<Entry> values) {
|
||||||
@@ -281,6 +280,7 @@ public class StressChartFragment extends AbstractChartFragment<StressChartFragme
|
|||||||
private static final int UNKNOWN_VAL = 2;
|
private static final int UNKNOWN_VAL = 2;
|
||||||
|
|
||||||
private final List<? extends StressSample> samples;
|
private final List<? extends StressSample> samples;
|
||||||
|
private final int[] stressRanges;
|
||||||
|
|
||||||
private final TimestampTranslation tsTranslation = new TimestampTranslation();
|
private final TimestampTranslation tsTranslation = new TimestampTranslation();
|
||||||
|
|
||||||
@@ -293,8 +293,9 @@ public class StressChartFragment extends AbstractChartFragment<StressChartFragme
|
|||||||
long averageSum;
|
long averageSum;
|
||||||
long averageNumSamples;
|
long averageNumSamples;
|
||||||
|
|
||||||
public StressChartsDataBuilder(final List<? extends StressSample> samples) {
|
public StressChartsDataBuilder(final List<? extends StressSample> samples, final int[] stressRanges) {
|
||||||
this.samples = samples;
|
this.samples = samples;
|
||||||
|
this.stressRanges = stressRanges;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reset() {
|
private void reset() {
|
||||||
@@ -326,7 +327,7 @@ public class StressChartFragment extends AbstractChartFragment<StressChartFragme
|
|||||||
private void processSample(final StressSample sample) {
|
private void processSample(final StressSample sample) {
|
||||||
//LOG.debug("Processing sample {} {}", sdf.format(new Date(sample.getTimestamp())), sample.getStress());
|
//LOG.debug("Processing sample {} {}", sdf.format(new Date(sample.getTimestamp())), sample.getStress());
|
||||||
|
|
||||||
final StressType stressType = StressType.fromStress(sample.getStress());
|
final StressType stressType = StressType.fromStress(sample.getStress(), stressRanges);
|
||||||
final int ts = tsTranslation.shorten((int) (sample.getTimestamp() / 1000L));
|
final int ts = tsTranslation.shorten((int) (sample.getTimestamp() / 1000L));
|
||||||
|
|
||||||
if (ts == 0) {
|
if (ts == 0) {
|
||||||
@@ -460,14 +461,14 @@ public class StressChartFragment extends AbstractChartFragment<StressChartFragme
|
|||||||
return ContextCompat.getColor(context, colorId);
|
return ContextCompat.getColor(context, colorId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static StressType fromStress(final int stress) {
|
public static StressType fromStress(final int stress, final int[] stressRanges) {
|
||||||
if (stress < 0) {
|
if (stress < stressRanges[0]) {
|
||||||
return StressType.UNKNOWN;
|
return StressType.UNKNOWN;
|
||||||
} else if (stress < 40) {
|
} else if (stress < stressRanges[1]) {
|
||||||
return StressType.RELAXED;
|
return StressType.RELAXED;
|
||||||
} else if (stress < 60) {
|
} else if (stress < stressRanges[2]) {
|
||||||
return StressType.MILD;
|
return StressType.MILD;
|
||||||
} else if (stress < 80) {
|
} else if (stress < stressRanges[3]) {
|
||||||
return StressType.MODERATE;
|
return StressType.MODERATE;
|
||||||
} else {
|
} else {
|
||||||
return StressType.HIGH;
|
return StressType.HIGH;
|
||||||
|
@@ -80,6 +80,7 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
|
|||||||
private static final Logger LOG = LoggerFactory.getLogger(AbstractDeviceCoordinator.class);
|
private static final Logger LOG = LoggerFactory.getLogger(AbstractDeviceCoordinator.class);
|
||||||
|
|
||||||
private Pattern supportedDeviceName = null;
|
private Pattern supportedDeviceName = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method should return a ReGexp pattern that will matched against a found device
|
* This method should return a ReGexp pattern that will matched against a found device
|
||||||
* to check whether this coordinator supports that device.
|
* to check whether this coordinator supports that device.
|
||||||
@@ -87,17 +88,17 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
|
|||||||
* should be overridden.
|
* should be overridden.
|
||||||
*
|
*
|
||||||
* @return Pattern
|
* @return Pattern
|
||||||
* */
|
*/
|
||||||
protected Pattern getSupportedDeviceName(){
|
protected Pattern getSupportedDeviceName() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean supports(GBDeviceCandidate candidate) {
|
public boolean supports(GBDeviceCandidate candidate) {
|
||||||
if(supportedDeviceName == null){
|
if (supportedDeviceName == null) {
|
||||||
supportedDeviceName = getSupportedDeviceName();
|
supportedDeviceName = getSupportedDeviceName();
|
||||||
}
|
}
|
||||||
if(supportedDeviceName == null){
|
if (supportedDeviceName == null) {
|
||||||
throw new RuntimeException(getClass() + " should either override getSupportedDeviceName or supports(GBDeviceCandidate)");
|
throw new RuntimeException(getClass() + " should either override getSupportedDeviceName or supports(GBDeviceCandidate)");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,6 +193,15 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int[] getStressRanges() {
|
||||||
|
// 0-39 = relaxed
|
||||||
|
// 40-59 = mild
|
||||||
|
// 60-79 = moderate
|
||||||
|
// 80-100 = high
|
||||||
|
return new int[]{0, 40, 60, 80};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TimeSampleProvider<? extends TemperatureSample> getTemperatureSampleProvider(GBDevice device, DaoSession session) {
|
public TimeSampleProvider<? extends TemperatureSample> getTemperatureSampleProvider(GBDevice device, DaoSession session) {
|
||||||
return null;
|
return null;
|
||||||
@@ -282,7 +292,9 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean supportsFlashing() { return false; }
|
public boolean supportsFlashing() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
@@ -519,15 +531,16 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
|
|||||||
int[] settings = new int[0];
|
int[] settings = new int[0];
|
||||||
ConnectionType connectionType = getConnectionType();
|
ConnectionType connectionType = getConnectionType();
|
||||||
|
|
||||||
if(connectionType.usesBluetoothLE()){
|
if (connectionType.usesBluetoothLE()) {
|
||||||
settings = ArrayUtils.insert(0, settings, R.xml.devicesettings_reconnect_ble);
|
settings = ArrayUtils.insert(0, settings, R.xml.devicesettings_reconnect_ble);
|
||||||
}
|
}
|
||||||
if(connectionType.usesBluetoothClassic()){
|
if (connectionType.usesBluetoothClassic()) {
|
||||||
settings = ArrayUtils.insert(0, settings, R.xml.devicesettings_reconnect_bl_classic);
|
settings = ArrayUtils.insert(0, settings, R.xml.devicesettings_reconnect_bl_classic);
|
||||||
}
|
}
|
||||||
|
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] getSupportedDeviceSpecificApplicationSettings() {
|
public int[] getSupportedDeviceSpecificApplicationSettings() {
|
||||||
return new int[0];
|
return new int[0];
|
||||||
@@ -613,7 +626,7 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getOrderPriority(){
|
public int getOrderPriority() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -249,6 +249,11 @@ public interface DeviceCoordinator {
|
|||||||
*/
|
*/
|
||||||
TimeSampleProvider<? extends StressSample> getStressSampleProvider(GBDevice device, DaoSession session);
|
TimeSampleProvider<? extends StressSample> getStressSampleProvider(GBDevice device, DaoSession session);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the stress ranges (relaxed, mild, moderate, high), so that stress can be categorized.
|
||||||
|
*/
|
||||||
|
int[] getStressRanges();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the sample provider for temperature data, for the device being supported.
|
* Returns the sample provider for temperature data, for the device being supported.
|
||||||
*/
|
*/
|
||||||
|
@@ -115,6 +115,15 @@ public abstract class XiaomiCoordinator extends AbstractBLEDeviceCoordinator {
|
|||||||
return new XiaomiStressSampleProvider(device, session);
|
return new XiaomiStressSampleProvider(device, session);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int[] getStressRanges() {
|
||||||
|
// 1-25 = relaxed
|
||||||
|
// 26-50 = mild
|
||||||
|
// 51-80 = moderate
|
||||||
|
// 81-100 = high
|
||||||
|
return new int[]{1, 26, 51, 81};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(final GBDevice device, final DaoSession session) {
|
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(final GBDevice device, final DaoSession session) {
|
||||||
return new XiaomiSpo2SampleProvider(device, session);
|
return new XiaomiSpo2SampleProvider(device, session);
|
||||||
|
@@ -50,11 +50,7 @@ public interface StressSample extends TimeSample {
|
|||||||
Type getType();
|
Type getType();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the normalized stress value between 0 and 100:
|
* Returns the stress value between 0 and 100.
|
||||||
* - 0-39 = relaxed
|
|
||||||
* - 40-59 = mild
|
|
||||||
* - 60-79 = moderate
|
|
||||||
* - 80-100 = high
|
|
||||||
*/
|
*/
|
||||||
int getStress();
|
int getStress();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user