diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java b/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java index 6df6a44fe..ddc9e589f 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java @@ -2,18 +2,15 @@ package de.dennisguse.opentracks.viewmodels; import android.util.Pair; import android.view.LayoutInflater; -import android.view.View; 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; @@ -256,84 +253,4 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit; - if (sensorDataSet != null && sensorDataSet.getHeartRate() != null) { - valueAndUnit = StringUtils.getHeartRateParts(getContext(), sensorDataSet.getHeartRate().first); - sensorName = sensorDataSet.getHeartRate().second; - textColor = zones.getTextColorForZone(getContext(), sensorDataSet.getHeartRate().first); - } else { - valueAndUnit = StringUtils.getHeartRateParts(getContext(), null); - textColor = zones.getTextColorForZone(getContext(), null); - } - - getBinding().statsValue.setText(valueAndUnit.first); - getBinding().statsUnit.setText(valueAndUnit.second); - getBinding().statsDescriptionMain.setText(R.string.stats_sensors_heart_rate); - - getBinding().statsDescriptionSecondary.setVisibility(View.VISIBLE); - getBinding().statsDescriptionSecondary.setText(sensorName); - - getBinding().statsValue.setTextColor(textColor); - } - } - - public static class SensorCadence extends GenericStatisticsViewHolder { - - @Override - public void onChanged(UnitSystem unitSystem, RecordingData data) { - SensorDataSet sensorDataSet = data.getSensorDataSet(); - String sensorName = getContext().getString(R.string.value_unknown); - - Pair valueAndUnit; - if (sensorDataSet != null && sensorDataSet.getCadence() != null) { - valueAndUnit = StringUtils.getCadenceParts(getContext(), sensorDataSet.getCadence().first); - sensorName = sensorDataSet.getCadence().second; - } else { - valueAndUnit = StringUtils.getCadenceParts(getContext(), null); - } - - getBinding().statsValue.setText(valueAndUnit.first); - getBinding().statsUnit.setText(valueAndUnit.second); - getBinding().statsDescriptionMain.setText(R.string.stats_sensors_cadence); - - getBinding().statsDescriptionSecondary.setVisibility(View.VISIBLE); - getBinding().statsDescriptionSecondary.setText(sensorName); - } - } - - public static class SensorPower extends GenericStatisticsViewHolder { - - @Override - public void onChanged(UnitSystem unitSystem, RecordingData data) { - SensorDataSet sensorDataSet = data.getSensorDataSet(); - String sensorName = getContext().getString(R.string.value_unknown); - - Pair valueAndUnit; - if (sensorDataSet != null && sensorDataSet.getCyclingPower() != null) { - valueAndUnit = StringUtils.getPowerParts(getContext(), sensorDataSet.getCyclingPower().getValue()); - sensorName = sensorDataSet.getCyclingPower().getSensorNameOrAddress(); - } else { - valueAndUnit = StringUtils.getCadenceParts(getContext(), null); - } - - getBinding().statsValue.setText(valueAndUnit.first); - getBinding().statsUnit.setText(valueAndUnit.second); - getBinding().statsDescriptionMain.setText(R.string.stats_sensors_power); - - getBinding().statsDescriptionSecondary.setVisibility(View.VISIBLE); - getBinding().statsDescriptionSecondary.setText(sensorName); - } - } } diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/Mapping.java b/src/main/java/de/dennisguse/opentracks/viewmodels/Mapping.java index ddd07682a..a5c5ca0fe 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/Mapping.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/Mapping.java @@ -31,9 +31,9 @@ public class Mapping { m.put(context.getString(R.string.stats_custom_layout_loss_key), GenericStatisticsViewHolder.Loss::new); m.put(context.getString(R.string.stats_custom_layout_coordinates_key), GenericStatisticsViewHolder.Coordinates::new); - m.put(context.getString(R.string.stats_custom_layout_heart_rate_key), GenericStatisticsViewHolder.SensorHeartRate::new); - m.put(context.getString(R.string.stats_custom_layout_cadence_key), GenericStatisticsViewHolder.SensorCadence::new); - m.put(context.getString(R.string.stats_custom_layout_power_key), GenericStatisticsViewHolder.SensorPower::new); + m.put(context.getString(R.string.stats_custom_layout_heart_rate_key), SensorStatisticsViewHolder.SensorHeartRate::new); + m.put(context.getString(R.string.stats_custom_layout_cadence_key), SensorStatisticsViewHolder.SensorCadence::new); + m.put(context.getString(R.string.stats_custom_layout_power_key), SensorStatisticsViewHolder.SensorPower::new); m.put(context.getString(R.string.stats_custom_layout_clock_key), ClockViewHolder::new); return m; diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/SensorStatisticsViewHolder.java b/src/main/java/de/dennisguse/opentracks/viewmodels/SensorStatisticsViewHolder.java new file mode 100644 index 000000000..ed8cdd61f --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/SensorStatisticsViewHolder.java @@ -0,0 +1,109 @@ +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.HeartRateZones; +import de.dennisguse.opentracks.databinding.StatsSensorItemBinding; +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; + +public abstract class SensorStatisticsViewHolder extends StatisticViewHolder { + + @Override + protected StatsSensorItemBinding createViewBinding(LayoutInflater inflater) { + return null; + } + + @Override + public void configureUI(DataField dataField) { + + } + + public static class SensorHeartRate extends SensorStatisticsViewHolder { + + @Override + public void onChanged(UnitSystem unitSystem, RecordingData data) { + SensorDataSet sensorDataSet = data.getSensorDataSet(); + String sensorName = getContext().getString(R.string.value_unknown); + + Pair valueAndUnit; + if (sensorDataSet != null && sensorDataSet.getHeartRate() != null) { + valueAndUnit = StringUtils.getHeartRateParts(getContext(), sensorDataSet.getHeartRate().first); + sensorName = sensorDataSet.getHeartRate().second; + } else { + valueAndUnit = StringUtils.getHeartRateParts(getContext(), null); + } + + //TODO Loads preference every time + HeartRateZones zones = PreferencesUtils.getHeartRateZones(); + int textColor; + if (sensorDataSet != null) { + textColor = zones.getTextColorForZone(getContext(), sensorDataSet.getHeartRate().first); + } else { + textColor = zones.getTextColorForZone(getContext(), 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)); + } + } + + public static class SensorCadence extends SensorStatisticsViewHolder { + + @Override + public void onChanged(UnitSystem unitSystem, RecordingData data) { + SensorDataSet sensorDataSet = data.getSensorDataSet(); + String sensorName = getContext().getString(R.string.value_unknown); + + Pair valueAndUnit; + if (sensorDataSet != null && sensorDataSet.getCadence() != null) { + valueAndUnit = StringUtils.getCadenceParts(getContext(), sensorDataSet.getCadence().first); + sensorName = sensorDataSet.getCadence().second; + } else { + valueAndUnit = StringUtils.getCadenceParts(getContext(), null); + } + + getBinding().statsValue.setText(valueAndUnit.first); + getBinding().statsUnit.setText(valueAndUnit.second); + getBinding().statsDescriptionMain.setText(R.string.stats_sensors_cadence); + + getBinding().statsDescriptionSecondary.setText(sensorName); + } + } + + public static class SensorPower extends SensorStatisticsViewHolder { + + @Override + public void onChanged(UnitSystem unitSystem, RecordingData data) { + SensorDataSet sensorDataSet = data.getSensorDataSet(); + String sensorName = getContext().getString(R.string.value_unknown); + + Pair valueAndUnit; + if (sensorDataSet != null && sensorDataSet.getCyclingPower() != null) { + valueAndUnit = StringUtils.getPowerParts(getContext(), sensorDataSet.getCyclingPower().getValue()); + sensorName = sensorDataSet.getCyclingPower().getSensorNameOrAddress(); + } else { + valueAndUnit = StringUtils.getCadenceParts(getContext(), null); + } + + getBinding().statsValue.setText(valueAndUnit.first); + getBinding().statsUnit.setText(valueAndUnit.second); + getBinding().statsDescriptionMain.setText(R.string.stats_sensors_power); + + getBinding().statsDescriptionSecondary.setText(sensorName); + } + } +} diff --git a/src/main/res/layout/stats_sensor_item.xml b/src/main/res/layout/stats_sensor_item.xml new file mode 100644 index 000000000..8b3bed3fc --- /dev/null +++ b/src/main/res/layout/stats_sensor_item.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + \ No newline at end of file