1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-07-23 23:32:23 +02:00

Huawei: Generalize HR and SpO2 support

This commit is contained in:
Martin.JM 2024-06-03 11:42:04 +02:00 committed by José Rebelo
parent b43d87f6bc
commit a90e1be0ee
31 changed files with 28 additions and 159 deletions

View File

@ -93,7 +93,7 @@ public class ActivityChartsActivity extends AbstractChartsActivity {
if (!coordinator.supportsPai()) {
tabList.remove("pai");
}
if (!coordinator.supportsSpo2()) {
if (!coordinator.supportsSpo2(device)) {
tabList.remove("spo2");
}
if (!coordinator.supportsStepCounter()) {

View File

@ -466,7 +466,7 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
}
@Override
public boolean supportsSpo2() {
public boolean supportsSpo2(final GBDevice device) {
return false;
}

View File

@ -229,7 +229,7 @@ public interface DeviceCoordinator {
* Returns true if SpO2 measurement and fetching is supported by the device
* (with this coordinator).
*/
boolean supportsSpo2();
boolean supportsSpo2(GBDevice device);
/**
* Returns true if heart rate stats (max, resting, manual) measurement and fetching is supported

View File

@ -266,7 +266,7 @@ public class CmfWatchProCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsSpo2() {
public boolean supportsSpo2(GBDevice device) {
return true;
}

View File

@ -172,7 +172,7 @@ public abstract class GarminCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsSpo2() {
public boolean supportsSpo2(GBDevice device) {
return true;
}

View File

@ -88,7 +88,7 @@ public class AmazfitBip3Coordinator extends HuamiCoordinator {
}
@Override
public boolean supportsSpo2() {
public boolean supportsSpo2(GBDevice device) {
return true;
}

View File

@ -93,7 +93,7 @@ public class AmazfitBip3ProCoordinator extends HuamiCoordinator {
}
@Override
public boolean supportsSpo2() {
public boolean supportsSpo2(GBDevice device) {
return true;
}

View File

@ -176,7 +176,7 @@ public abstract class ZeppOsCoordinator extends HuamiCoordinator {
}
@Override
public boolean supportsSpo2() {
public boolean supportsSpo2(GBDevice device) {
return true;
}

View File

@ -220,7 +220,12 @@ public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordin
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;
return huaweiCoordinator.supportsHeartRate(device);
}
@Override
public boolean supportsSpo2(GBDevice device) {
return huaweiCoordinator.supportsSPo2(device);
}
@Override

View File

@ -59,7 +59,6 @@ public class HuaweiCoordinator {
private final HuaweiCoordinatorSupplier parent;
private boolean transactionCrypted=true;
public HuaweiCoordinator(HuaweiCoordinatorSupplier parent) {
@ -340,7 +339,6 @@ public class HuaweiCoordinator {
}
public boolean supportsHeartRate() {
// TODO: this is not correct
return supportsCommandForService(0x07, 0x17);
}

View File

@ -222,7 +222,12 @@ public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator i
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;
return huaweiCoordinator.supportsHeartRate(device);
}
@Override
public boolean supportsSpo2(GBDevice device) {
return huaweiCoordinator.supportsSPo2(device);
}
@Override

View File

@ -50,16 +50,6 @@ public class HonorBand5Coordinator extends HuaweiLECoordinator {
return Pattern.compile(HuaweiConstants.HO_BAND5_NAME + ".*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;
}
@Override
public boolean supportsSpo2() {
return true;
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(GBDevice device, DaoSession session) {
return new HuaweiSpo2SampleProvider(device, session);

View File

@ -45,16 +45,6 @@ public class HonorBand6Coordinator extends HuaweiLECoordinator {
return Pattern.compile(HuaweiConstants.HO_BAND6_NAME + ".*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;
}
@Override
public boolean supportsSpo2() {
return true;
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(GBDevice device, DaoSession session) {
return new HuaweiSpo2SampleProvider(device, session);

View File

@ -45,16 +45,6 @@ public class HonorBand7Coordinator extends HuaweiLECoordinator {
return Pattern.compile(HuaweiConstants.HO_BAND7_NAME + ".*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;
}
@Override
public boolean supportsSpo2() {
return true;
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(GBDevice device, DaoSession session) {
return new HuaweiSpo2SampleProvider(device, session);

View File

@ -54,11 +54,6 @@ public class HonorMagicWatch2Coordinator extends HuaweiBRCoordinator {
return Pattern.compile(HuaweiConstants.HO_MAGICWATCH2_NAME + ".*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean supportsSpo2() {
return true;
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(GBDevice device, DaoSession session) {
return new HuaweiSpo2SampleProvider(device, session);

View File

@ -45,16 +45,6 @@ public class HuaweiBand4ProCoordinator extends HuaweiLECoordinator {
return Pattern.compile("(" + HuaweiConstants.HU_BAND4_NAME + "|" + HuaweiConstants.HU_BAND4PRO_NAME + ").*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;
}
@Override
public boolean supportsSpo2() {
return true;
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(GBDevice device, DaoSession session) {
return new HuaweiSpo2SampleProvider(device, session);

View File

@ -45,16 +45,6 @@ public class HuaweiBand6Coordinator extends HuaweiLECoordinator {
return Pattern.compile(HuaweiConstants.HU_BAND6_NAME + ".*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;
}
@Override
public boolean supportsSpo2() {
return true;
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(GBDevice device, DaoSession session) {
return new HuaweiSpo2SampleProvider(device, session);

View File

@ -45,16 +45,6 @@ public class HuaweiBand7Coordinator extends HuaweiLECoordinator {
return Pattern.compile(HuaweiConstants.HU_BAND7_NAME + ".*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;
}
@Override
public boolean supportsSpo2() {
return true;
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(GBDevice device, DaoSession session) {
return new HuaweiSpo2SampleProvider(device, session);

View File

@ -45,16 +45,6 @@ public class HuaweiBand8Coordinator extends HuaweiLECoordinator {
return Pattern.compile(HuaweiConstants.HU_BAND8_NAME + ".*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;
}
@Override
public boolean supportsSpo2() {
return true;
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(GBDevice device, DaoSession session) {
return new HuaweiSpo2SampleProvider(device, session);

View File

@ -49,16 +49,6 @@ public class HuaweiBand9Coordinator extends HuaweiLECoordinator {
return Pattern.compile(HuaweiConstants.HU_BAND9_NAME + ".*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;
}
@Override
public boolean supportsSpo2() {
return true;
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(GBDevice device, DaoSession session) {
return new HuaweiSpo2SampleProvider(device, session);

View File

@ -44,16 +44,6 @@ public class HuaweiWatchFitCoordinator extends HuaweiLECoordinator {
return Pattern.compile(HuaweiConstants.HU_WATCHFIT_NAME + ".*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;
}
@Override
public boolean supportsSpo2() {
return true;
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(GBDevice device, DaoSession session) {
return new HuaweiSpo2SampleProvider(device, session);

View File

@ -45,16 +45,6 @@ public class HuaweiWatchGTCoordinator extends HuaweiLECoordinator {
return Pattern.compile(HuaweiConstants.HU_WATCHGT_NAME + ".*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;
}
@Override
public boolean supportsSpo2() {
return true;
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(GBDevice device, DaoSession session) {
return new HuaweiSpo2SampleProvider(device, session);

View File

@ -49,11 +49,6 @@ public class HuaweiWatchGT2Coordinator extends HuaweiBRCoordinator {
return Pattern.compile("(" + HuaweiConstants.HU_WATCHGT2_NAME + "|" + HuaweiConstants.HU_WATCHGT2PRO_NAME + ").*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean supportsSpo2() {
return true;
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(GBDevice device, DaoSession session) {
return new HuaweiSpo2SampleProvider(device, session);

View File

@ -49,16 +49,6 @@ public class HuaweiWatchGT2eCoordinator extends HuaweiLECoordinator {
return Pattern.compile(HuaweiConstants.HU_WATCHGT2E_NAME + ".*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;
}
@Override
public boolean supportsSpo2() {
return true;
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(GBDevice device, DaoSession session) {
return new HuaweiSpo2SampleProvider(device, session);

View File

@ -50,16 +50,6 @@ public class HuaweiWatchGT4Coordinator extends HuaweiBRCoordinator {
return Pattern.compile("(" + HuaweiConstants.HU_WATCHGT4_NAME + ").*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;
}
@Override
public boolean supportsSpo2() {
return true;
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(GBDevice device, DaoSession session) {
return new HuaweiSpo2SampleProvider(device, session);

View File

@ -49,16 +49,6 @@ public class HuaweiWatchUltimateCoordinator extends HuaweiBRCoordinator {
return Pattern.compile("(" + HuaweiConstants.HU_WATCHULTIMATE_NAME + ").*", Pattern.CASE_INSENSITIVE);
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;
}
@Override
public boolean supportsSpo2() {
return true;
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(GBDevice device, DaoSession session) {
return new HuaweiSpo2SampleProvider(device, session);

View File

@ -172,7 +172,7 @@ public class SonyWena3Coordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsSpo2() {
public boolean supportsSpo2(GBDevice device) {
return false;
}

View File

@ -126,7 +126,7 @@ public class TestDeviceCoordinator extends AbstractDeviceCoordinator {
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(final GBDevice device, final DaoSession session) {
return supportsSpo2() ? new TestSpo2SampleProvider() : super.getSpo2SampleProvider(device, session);
return supportsSpo2(device) ? new TestSpo2SampleProvider() : super.getSpo2SampleProvider(device, session);
}
@Override
@ -317,7 +317,7 @@ public class TestDeviceCoordinator extends AbstractDeviceCoordinator {
}
@Override
public boolean supportsSpo2() {
public boolean supportsSpo2(GBDevice device) {
return supports(getTestDevice(), TestFeature.SPO2);
}

View File

@ -251,7 +251,7 @@ public abstract class XiaomiCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsSpo2() {
public boolean supportsSpo2(GBDevice device) {
return true;
}
@ -413,7 +413,7 @@ public abstract class XiaomiCoordinator extends AbstractBLEDeviceCoordinator {
//
// Health
//
if (supportsStressMeasurement() && supports(device, FEAT_STRESS) && supportsSpo2() && supports(device, FEAT_SPO2)) {
if (supportsStressMeasurement() && supports(device, FEAT_STRESS) && supportsSpo2(device) && supports(device, FEAT_SPO2)) {
deviceSpecificSettings.addRootScreen(R.xml.devicesettings_heartrate_sleep_alert_activity_stress_spo2);
} else if (supportsStressMeasurement() && supports(device, FEAT_STRESS)) {
deviceSpecificSettings.addRootScreen(R.xml.devicesettings_heartrate_sleep_alert_activity_stress);

View File

@ -27,6 +27,7 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.XiaomiCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.XiaomiInstallHandler;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class MiWatchLiteCoordinator extends XiaomiCoordinator {
@Override
@ -72,7 +73,7 @@ public class MiWatchLiteCoordinator extends XiaomiCoordinator {
}
@Override
public boolean supportsSpo2() {
public boolean supportsSpo2(GBDevice device) {
return false;
}

View File

@ -1674,7 +1674,7 @@ public abstract class HuamiSupport extends AbstractBTLEDeviceSupport implements
this.fetchOperationQueue.add(new FetchPaiOperation(this));
}
if ((dataTypes & RecordedDataTypes.TYPE_SPO2) != 0 && coordinator.supportsSpo2()) {
if ((dataTypes & RecordedDataTypes.TYPE_SPO2) != 0 && coordinator.supportsSpo2(gbDevice)) {
this.fetchOperationQueue.add(new FetchSpo2NormalOperation(this));
}