From d3cf2957cc351f677db13d56ca6f0ed2d7afd484 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Tue, 15 Nov 2022 22:56:54 +0100 Subject: [PATCH] StatisticsCustomLayoutEditAdapter: use StatisticsViewHolder (with demo data). Part of #1118. --- .../SettingsCustomLayoutEditAdapter.java | 56 ++++++++++-- .../opentracks/util/StatisticsUtils.java | 2 + .../viewmodels/ClockViewHolder.java | 5 -- .../GenericStatisticsViewHolder.java | 85 ------------------- .../viewmodels/StatisticViewHolder.java | 3 - src/main/res/layout/custom_stats_item.xml | 3 +- 6 files changed, 50 insertions(+), 104 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/SettingsCustomLayoutEditAdapter.java b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/SettingsCustomLayoutEditAdapter.java index 2cc459d77..b4618e906 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/SettingsCustomLayoutEditAdapter.java +++ b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/SettingsCustomLayoutEditAdapter.java @@ -1,6 +1,7 @@ package de.dennisguse.opentracks.ui.customRecordingLayout; import android.content.Context; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -9,18 +10,54 @@ import androidx.annotation.NonNull; import androidx.appcompat.content.res.AppCompatResources; import androidx.recyclerview.widget.RecyclerView; +import java.time.Duration; +import java.time.Instant; +import java.time.ZoneOffset; import java.util.Map; import java.util.Optional; import java.util.concurrent.Callable; import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.data.models.Altitude; +import de.dennisguse.opentracks.data.models.Distance; +import de.dennisguse.opentracks.data.models.Speed; +import de.dennisguse.opentracks.data.models.Track; +import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.databinding.CustomStatsItemBinding; -import de.dennisguse.opentracks.util.StatisticsUtils; +import de.dennisguse.opentracks.services.RecordingData; +import de.dennisguse.opentracks.settings.UnitSystem; +import de.dennisguse.opentracks.stats.TrackStatistics; import de.dennisguse.opentracks.viewmodels.Mapping; import de.dennisguse.opentracks.viewmodels.StatisticViewHolder; public class SettingsCustomLayoutEditAdapter extends RecyclerView.Adapter { + private static final String TAG = SettingsCustomLayoutEditAdapter.class.getSimpleName(); + + private static final RecordingData demoData; + + static { + TrackStatistics trackStatistics = new TrackStatistics(); + trackStatistics.setStartTime(Instant.ofEpochMilli(0)); + trackStatistics.setMovingTime(Duration.ofMinutes(0)); + trackStatistics.setTotalTime(Duration.ofMinutes(0)); + + trackStatistics.setTotalDistance(Distance.of(0)); + + trackStatistics.setTotalAltitudeGain(0f); + trackStatistics.setTotalAltitudeLoss(0f); + Track track = new Track(ZoneOffset.UTC); + track.setTrackStatistics(trackStatistics); + + TrackPoint lastTrackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0)); + lastTrackPoint.setLatitude(0); + lastTrackPoint.setLongitude(0); + lastTrackPoint.setAltitude(Altitude.EGM2008.of(0)); + lastTrackPoint.setSpeed(Speed.of(0)); + + demoData = new RecordingData(track, lastTrackPoint, null); + } + private Layout layout; private final Context context; private final SettingsCustomLayoutItemClickListener itemClickListener; @@ -39,7 +76,6 @@ public class SettingsCustomLayoutEditAdapter extends RecyclerView.Adapter m = mapping.get(field.getKey()).call(); + m.initialize(context, LayoutInflater.from(context)); + m.configureUI(field); + m.onChanged(UnitSystem.METRIC, demoData); + + viewHolder.viewBinding.statsLayout.removeAllViews(); //TODO this is not really performant + viewHolder.viewBinding.statsLayout.addView(m.getView()); } catch (Exception e) { - //Ignored. + Log.e(TAG, "Couldn't to instantiate UI for DataField with key " + field.getKey() + " " + e.getMessage()); + throw new RuntimeException(e); } - - viewHolder.viewBinding.statsLayout.statsValue.setText(StatisticsUtils.emptyValue(context, field.getKey())); - - viewHolder.viewBinding.statsLayout.statsDescriptionMain.setTextAppearance(context, field.isVisible() ? (field.isPrimary() ? R.style.TextAppearance_OpenTracks_PrimaryHeader : R.style.TextAppearance_OpenTracks_SecondaryHeader) : R.style.TextAppearance_OpenTracks_HiddenHeader); - viewHolder.viewBinding.statsLayout.statsValue.setTextAppearance(context, field.isVisible() ? (field.isPrimary() ? R.style.TextAppearance_OpenTracks_PrimaryValue : R.style.TextAppearance_OpenTracks_SecondaryValue) : R.style.TextAppearance_OpenTracks_HiddenValue); viewHolder.viewBinding.statsIconShowStatus.setVisibility(field.isVisible() ? View.GONE : View.VISIBLE); viewHolder.viewBinding.statsIconShowStatus.setImageDrawable(AppCompatResources.getDrawable(context, R.drawable.ic_baseline_visibility_off_24)); viewHolder.viewBinding.statsIvDragIndicator.setVisibility(field.isVisible() ? View.VISIBLE : View.GONE); diff --git a/src/main/java/de/dennisguse/opentracks/util/StatisticsUtils.java b/src/main/java/de/dennisguse/opentracks/util/StatisticsUtils.java index 5f841db6e..0e1538cff 100644 --- a/src/main/java/de/dennisguse/opentracks/util/StatisticsUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/StatisticsUtils.java @@ -12,6 +12,7 @@ import de.dennisguse.opentracks.ui.customRecordingLayout.Layout; public class StatisticsUtils { + @Deprecated public static String emptyValue(@NonNull Context context, @NonNull String statTitle) { if (PreferencesUtils.isKey(R.string.stats_custom_layout_total_time_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_moving_time_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_pace_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_average_moving_pace_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_average_pace_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_fastest_pace_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_clock_key, statTitle)) { return context.getString(R.string.stats_empty_value_time); @@ -24,6 +25,7 @@ public class StatisticsUtils { } } + @Deprecated //Add to Layout? public static Layout filterVisible(Layout layout, boolean visible) { Layout result = new Layout(layout.getName()); result.addFields(layout.getFields().stream().filter(f -> f.isVisible() == visible).collect(Collectors.toList())); diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/ClockViewHolder.java b/src/main/java/de/dennisguse/opentracks/viewmodels/ClockViewHolder.java index a01876e43..053b4abaa 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/ClockViewHolder.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/ClockViewHolder.java @@ -21,11 +21,6 @@ public class ClockViewHolder extends StatisticViewHolder getBinding().statsClock.setTextAppearance(getContext(), dataField.isPrimary() ? R.style.TextAppearance_OpenTracks_PrimaryValue : R.style.TextAppearance_OpenTracks_SecondaryValue); } - @Override - public int getTitleId() { - return R.string.stats_clock; - } - @Override public void onChanged(UnitSystem unitSystem, RecordingData data) { } diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java b/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java index 1495054a3..61e0354b9 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java @@ -30,11 +30,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit = DistanceFormatter.Builder() @@ -49,11 +44,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit = new Pair<>(StringUtils.formatElapsedTime(data.getTrackStatistics().getTotalTime()), null); @@ -66,11 +56,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder { public abstract void configureUI(DataField dataField); - @Deprecated - public abstract int getTitleId(); - public abstract void onChanged(UnitSystem unitSystem, RecordingData data); public View getView() { diff --git a/src/main/res/layout/custom_stats_item.xml b/src/main/res/layout/custom_stats_item.xml index feaee18c9..3c56f007a 100644 --- a/src/main/res/layout/custom_stats_item.xml +++ b/src/main/res/layout/custom_stats_item.xml @@ -22,11 +22,10 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> -