From 19fe5275b9858b01528d55829a2a1b49a418e792 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Fri, 25 Nov 2022 07:41:04 +0100 Subject: [PATCH] Heartrate zones: adding preference for max heartrate. Fixes #1118. --- .../data/models/HeartRateZones.java | 33 +++++++++++++++++++ .../opentracks/settings/PreferencesUtils.java | 7 ++-- .../GenericStatisticsViewHolder.java | 15 +++++++++ src/main/res/values/colors.xml | 5 +++ 4 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 src/main/java/de/dennisguse/opentracks/data/models/HeartRateZones.java diff --git a/src/main/java/de/dennisguse/opentracks/data/models/HeartRateZones.java b/src/main/java/de/dennisguse/opentracks/data/models/HeartRateZones.java new file mode 100644 index 000000000..3fe04de03 --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/data/models/HeartRateZones.java @@ -0,0 +1,33 @@ +package de.dennisguse.opentracks.data.models; + +import androidx.annotation.NonNull; + +import de.dennisguse.opentracks.R; + +public class HeartRateZones { + + private final HeartRate max; + + public HeartRateZones(@NonNull HeartRate max) { + this.max = max; + } + + public int getColorForZone(HeartRate current) { + if (current != null) { + if (current.getBPM() >= max.getBPM() * 0.9) { + return R.color.heart_rate_zone_textcolor_5; + } + if (current.getBPM() >= max.getBPM() * 0.8) { + return R.color.heart_rate_zone_textcolor_4; + } + if (current.getBPM() >= max.getBPM() * 0.7) { + return R.color.heart_rate_zone_textcolor_3; + } + if (current.getBPM() >= max.getBPM() * 0.6) { + return R.color.heart_rate_zone_textcolor_2; + } + } + + return R.color.heart_rate_zone_textcolor_1; + } +} diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index 31666e758..d6335d252 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -42,6 +42,8 @@ import java.util.stream.Stream; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.DistanceFormatter; +import de.dennisguse.opentracks.data.models.HeartRate; +import de.dennisguse.opentracks.data.models.HeartRateZones; import de.dennisguse.opentracks.data.models.Speed; import de.dennisguse.opentracks.io.file.TrackFileFormat; import de.dennisguse.opentracks.io.file.TrackFilenameGenerator; @@ -279,9 +281,10 @@ public class PreferencesUtils { return getBoolean(R.string.settings_sensor_bluetooth_service_filter_enabled_key, DEFAULT); } - public static int getMaxHeartrate() { + public static HeartRateZones getHeartRateZones() { final int DEFAULT = Integer.parseInt(resources.getString(R.string.settings_sensor_heart_rate_max_default)); - return getInt(R.string.settings_sensor_heart_rate_max_key, DEFAULT); + int value = getInt(R.string.settings_sensor_heart_rate_max_key, DEFAULT); + return new HeartRateZones(HeartRate.of(value)); } public static boolean shouldShowStatsOnLockscreen() { diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java b/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java index 61e0354b9..cbe656234 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java @@ -3,14 +3,18 @@ package de.dennisguse.opentracks.viewmodels; import android.util.Pair; import android.view.LayoutInflater; +import androidx.core.content.ContextCompat; + import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.DistanceFormatter; +import de.dennisguse.opentracks.data.models.HeartRateZones; import de.dennisguse.opentracks.data.models.Speed; import de.dennisguse.opentracks.data.models.SpeedFormatter; import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.databinding.StatsGenericItemBinding; import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet; import de.dennisguse.opentracks.services.RecordingData; +import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.settings.UnitSystem; import de.dennisguse.opentracks.ui.customRecordingLayout.DataField; import de.dennisguse.opentracks.util.StringUtils; @@ -269,10 +273,21 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder#272727 + #FF0000 + #FFBD04 + #6ACC2B + #64D1FD + @color/opentracks_on_primary_color \ No newline at end of file