Heartrate zones: adding preference for max heartrate.

Fixes #1118.
This commit is contained in:
Dennis Guse
2022-11-25 07:41:04 +01:00
parent 1aeb9ca332
commit 19fe5275b9
4 changed files with 58 additions and 2 deletions
@@ -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;
}
}
@@ -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() {
@@ -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<St
valueAndUnit = StringUtils.getHeartRateParts(getContext(), null);
}
//TODO Loads preference every time
HeartRateZones zones = PreferencesUtils.getHeartRateZones();
int textColor;
if (sensorDataSet != null) {
textColor = zones.getColorForZone(sensorDataSet.getHeartRate().first);
} else {
textColor = zones.getColorForZone(null);
}
getBinding().statsValue.setText(valueAndUnit.first);
getBinding().statsUnit.setText(valueAndUnit.second);
getBinding().statsDescriptionMain.setText(R.string.stats_sensors_heart_rate);
getBinding().statsDescriptionSecondary.setText(sensorName);
getBinding().statsValue.setTextColor(ContextCompat.getColor(getContext(), textColor));
}
}