Huawei/Honor: Enable VO2 Max for supported devices

This commit is contained in:
José Rebelo
2026-02-13 22:45:01 +00:00
parent 1f1c598968
commit 79cef62cd3
10 changed files with 39 additions and 19 deletions
@@ -330,7 +330,7 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
@Override
@Nullable
public Vo2MaxSampleProvider<? extends Vo2MaxSample> getVo2MaxSampleProvider(GBDevice device, DaoSession session) {
return null;
return new WorkoutVo2MaxSampleProvider(device, session);
}
@Override
@@ -1,9 +1,9 @@
package nodomain.freeyourgadget.gadgetbridge.devices.garmin;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.Uri;
import android.app.Activity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -28,12 +28,10 @@ import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpec
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.GenericTrainingLoadAcuteSampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.GenericTrainingLoadChronicSampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.WorkoutLoadSampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.WorkoutVo2MaxSampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.TimeSampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.Vo2MaxSampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.WorkoutLoadSampleProvider;
import nodomain.freeyourgadget.gadgetbridge.entities.BaseActivitySummaryDao;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.GarminActivitySampleDao;
@@ -70,7 +68,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.RestingMetabolicRateSample;
import nodomain.freeyourgadget.gadgetbridge.model.SleepScoreSample;
import nodomain.freeyourgadget.gadgetbridge.model.Spo2Sample;
import nodomain.freeyourgadget.gadgetbridge.model.StressSample;
import nodomain.freeyourgadget.gadgetbridge.model.Vo2MaxSample;
import nodomain.freeyourgadget.gadgetbridge.model.WorkoutLoadSample;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.GarminSupport;
@@ -191,11 +188,6 @@ public abstract class GarminCoordinator extends AbstractBLEDeviceCoordinator {
return new GenericTrainingLoadChronicSampleProvider(device, session);
}
@Override
public Vo2MaxSampleProvider<? extends Vo2MaxSample> getVo2MaxSampleProvider(final GBDevice device, final DaoSession session) {
return new WorkoutVo2MaxSampleProvider(device, session);
}
@Override
public TimeSampleProvider<? extends Spo2Sample> getSpo2SampleProvider(final GBDevice device, final DaoSession session) {
return new GarminSpo2SampleProvider(device, session);
@@ -51,8 +51,6 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.SleepAsAndroidFeature;
import nodomain.freeyourgadget.gadgetbridge.devices.Vo2MaxSampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.WorkoutVo2MaxSampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiExtendedSampleProvider;
@@ -60,7 +58,6 @@ import nodomain.freeyourgadget.gadgetbridge.entities.AbstractActivitySample;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryParser;
import nodomain.freeyourgadget.gadgetbridge.model.Vo2MaxSample;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiLanguageType;
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiVibrationPatternNotificationType;
@@ -314,11 +311,6 @@ public abstract class ZeppOsCoordinator extends HuamiCoordinator {
return new HuamiExtendedSampleProvider(device, session);
}
@Override
public Vo2MaxSampleProvider<? extends Vo2MaxSample> getVo2MaxSampleProvider(final GBDevice device, final DaoSession session) {
return new WorkoutVo2MaxSampleProvider(device, session);
}
@Override
public ActivitySummaryParser getActivitySummaryParser(final GBDevice device, final Context context) {
return new ZeppOsActivitySummaryParser(context);
@@ -311,6 +311,12 @@ public abstract class HuaweiCoordinator extends AbstractDeviceCoordinator {
return true;
}
@Override
public boolean supportsVO2Max(@NonNull final GBDevice device) {
// #5770 - most Huawei and Honor devices seem to support it
return true;
}
@Override
public boolean supportsHeartRateMeasurement(@NonNull final GBDevice device) {
return HuaweiDeviceStateManager.get(device).supportsHeartRate(device);
@@ -51,4 +51,9 @@ public class HonorBand3Coordinator extends HuaweiLECoordinator {
public DeviceCoordinator.DeviceKind getDeviceKind(@NonNull GBDevice device) {
return DeviceCoordinator.DeviceKind.FITNESS_BAND;
}
@Override
public boolean supportsVO2Max(@NonNull final GBDevice device) {
return false;
}
}
@@ -46,4 +46,9 @@ public class HonorBand4Coordinator extends HuaweiLECoordinator {
public DeviceCoordinator.DeviceKind getDeviceKind(@NonNull GBDevice device) {
return DeviceCoordinator.DeviceKind.FITNESS_BAND;
}
@Override
public boolean supportsVO2Max(@NonNull final GBDevice device) {
return false;
}
}
@@ -46,4 +46,9 @@ public class HonorBand5Coordinator extends HuaweiLECoordinator {
public DeviceCoordinator.DeviceKind getDeviceKind(@NonNull GBDevice device) {
return DeviceCoordinator.DeviceKind.FITNESS_BAND;
}
@Override
public boolean supportsVO2Max(@NonNull final GBDevice device) {
return false;
}
}
@@ -46,4 +46,9 @@ public class HonorBand7Coordinator extends HuaweiLECoordinator {
public DeviceCoordinator.DeviceKind getDeviceKind(@NonNull GBDevice device) {
return DeviceCoordinator.DeviceKind.FITNESS_BAND;
}
@Override
public boolean supportsVO2Max(@NonNull final GBDevice device) {
return false;
}
}
@@ -46,4 +46,9 @@ public class HuaweiBandAw70Coordinator extends HuaweiLECoordinator {
public DeviceCoordinator.DeviceKind getDeviceKind(@NonNull GBDevice device) {
return DeviceCoordinator.DeviceKind.FITNESS_BAND;
}
@Override
public boolean supportsVO2Max(@NonNull final GBDevice device) {
return false;
}
}
@@ -46,4 +46,9 @@ public class HuaweiTalkBandB6Coordinator extends HuaweiBRCoordinator {
public DeviceCoordinator.DeviceKind getDeviceKind(@NonNull GBDevice device) {
return DeviceCoordinator.DeviceKind.FITNESS_BAND;
}
@Override
public boolean supportsVO2Max(@NonNull final GBDevice device) {
return false;
}
}