diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractChartFragment.java index f44f141b..ea651108 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractChartFragment.java @@ -84,7 +84,6 @@ public abstract class AbstractChartFragment extends AbstractGBFragment { } }; private boolean mChartDirty = true; - private boolean supportsHeartrateChart = true; private AsyncTask refreshTask; public boolean isChartDirty() { @@ -93,8 +92,9 @@ public abstract class AbstractChartFragment extends AbstractGBFragment { public abstract String getTitle(); - public boolean supportsHeartrate() { - return supportsHeartrateChart; + public boolean supportsHeartrate(GBDevice device) { + DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device); + return coordinator != null && coordinator.supportsHeartRateMeasurement(device); } protected static final class ActivityConfig { @@ -420,7 +420,7 @@ public abstract class AbstractChartFragment extends AbstractGBFragment { int numEntries = samples.size(); List xLabels = new ArrayList<>(numEntries); List activityEntries = new ArrayList<>(numEntries); - boolean hr = supportsHeartrate(); + boolean hr = supportsHeartrate(gbDevice); List heartrateEntries = hr ? new ArrayList(numEntries) : null; List colors = new ArrayList<>(numEntries); // this is kinda inefficient... int lastHrSampleIndex = -1; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivitySleepChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivitySleepChartFragment.java index 3825c153..73aa10e7 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivitySleepChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivitySleepChartFragment.java @@ -80,7 +80,7 @@ public class ActivitySleepChartFragment extends AbstractChartFragment { YAxis yAxisRight = mChart.getAxisRight(); yAxisRight.setDrawGridLines(false); - yAxisRight.setEnabled(supportsHeartrate()); + yAxisRight.setEnabled(supportsHeartrate(getChartsHost().getDevice())); yAxisRight.setDrawLabels(true); yAxisRight.setDrawTopYLabelEntry(true); yAxisRight.setTextColor(CHART_TEXT_COLOR); @@ -134,7 +134,7 @@ public class ActivitySleepChartFragment extends AbstractChartFragment { legendLabels.add(akDeepSleep.label); legendColors.add(akNotWorn.color); legendLabels.add(akNotWorn.label); - if (supportsHeartrate()) { + if (supportsHeartrate(getChartsHost().getDevice())) { legendColors.add(HEARTRATE_COLOR); legendLabels.add(HEARTRATE_LABEL); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepChartFragment.java index bf073121..ae079d54 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepChartFragment.java @@ -171,7 +171,7 @@ public class SleepChartFragment extends AbstractChartFragment { YAxis yAxisRight = mActivityChart.getAxisRight(); yAxisRight.setDrawGridLines(false); - yAxisRight.setEnabled(supportsHeartrate()); + yAxisRight.setEnabled(supportsHeartrate(getChartsHost().getDevice())); yAxisRight.setDrawLabels(true); yAxisRight.setDrawTopYLabelEntry(true); yAxisRight.setTextColor(CHART_TEXT_COLOR); @@ -186,7 +186,7 @@ public class SleepChartFragment extends AbstractChartFragment { legendLabels.add(akLightSleep.label); legendColors.add(akDeepSleep.color); legendLabels.add(akDeepSleep.label); - if (supportsHeartrate()) { + if (supportsHeartrate(getChartsHost().getDevice())) { legendColors.add(HEARTRATE_COLOR); legendLabels.add(HEARTRATE_LABEL); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java index 32d07e87..a9cda31d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java @@ -112,6 +112,12 @@ public interface DeviceCoordinator { */ boolean supportsAlarmConfiguration(); + /** + * Returns true if the given device supports heart rate measurements. + * @return + */ + boolean supportsHeartRateMeasurement(GBDevice device); + int getTapString(); /** diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java index fce07d99..0c5c1b9f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java @@ -135,6 +135,11 @@ public class UnknownDeviceCoordinator extends AbstractDeviceCoordinator { return false; } + @Override + public boolean supportsHeartRateMeasurement(GBDevice device) { + return false; + } + @Override public int getTapString() { return 0; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java index c08d6d1b..d50609c9 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java @@ -166,4 +166,18 @@ public class MiBandCoordinator extends AbstractDeviceCoordinator { Prefs prefs = GBApplication.getPrefs(); return prefs.getInt(MiBandConst.PREF_MIBAND_RESERVE_ALARM_FOR_CALENDAR, 0); } + + @Override + public boolean supportsHeartRateMeasurement(GBDevice device) { + String hwVersion = device.getHardwareVersion(); + return isMi1S(hwVersion) || isMiPro(hwVersion); + } + + private boolean isMi1S(String hardwareVersion) { + return MiBandConst.MI_1S.equals(hardwareVersion); + } + + private boolean isMiPro(String hardwareVersion) { + return MiBandConst.MI_PRO.equals(hardwareVersion); + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java index 99b5e155..f1310a79 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java @@ -84,6 +84,11 @@ public class PebbleCoordinator extends AbstractDeviceCoordinator { return false; } + @Override + public boolean supportsHeartRateMeasurement(GBDevice device) { + return false; + } + @Override public int getTapString() { return R.string.tap_connected_device_for_app_mananger;