From d1957331b890d8f998269acd3c7badcac93c87ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n?= Date: Sun, 13 Sep 2020 18:50:46 +0200 Subject: [PATCH] Intervals refactoring: added stack mode to the intervals adapter with two possibilities: stack from top and stack from bottom. Stack from top for recorded intervals (the first lap in the top). Stack from bottom for recording intervals (the last lap in the top). --- .../adapters/IntervalStatisticsAdapter.java | 23 +++++++++++++++---- .../fragments/IntervalsFragment.java | 9 +++++--- src/main/res/layout/interval_list_view.xml | 2 +- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/adapters/IntervalStatisticsAdapter.java b/src/main/java/de/dennisguse/opentracks/adapters/IntervalStatisticsAdapter.java index 8ca29b1a1..6b5c1290b 100644 --- a/src/main/java/de/dennisguse/opentracks/adapters/IntervalStatisticsAdapter.java +++ b/src/main/java/de/dennisguse/opentracks/adapters/IntervalStatisticsAdapter.java @@ -20,18 +20,21 @@ import de.dennisguse.opentracks.viewmodels.IntervalStatistics; public class IntervalStatisticsAdapter extends ArrayAdapter { + private StackMode stackMode; private boolean metricUnits; - private float sumDistance_m = 0f; + private float sumDistance_m; - public IntervalStatisticsAdapter(Context context, List intervalList) { + public IntervalStatisticsAdapter(Context context, List intervalList, StackMode stackMode) { super(context, R.layout.interval_stats_list_item, intervalList); metricUnits = PreferencesUtils.isMetricUnits(context); + this.stackMode = stackMode; } @NonNull @Override public View getView(int position, @Nullable View intervalView, @NonNull ViewGroup parent) { - IntervalStatistics.Interval interval = getItem(position); + int actualPosition = stackMode == StackMode.STACK_FROM_TOP ? position : getCount() - 1 - position; + IntervalStatistics.Interval interval = getItem(actualPosition); ViewHolder viewHolder; if (intervalView == null) { @@ -48,7 +51,11 @@ public class IntervalStatisticsAdapter extends ArrayAdapter 0 ? (position * getItem(position - 1).getDistance_m()) + interval.getDistance_m() : (position + 1) * interval.getDistance_m(); + if (actualPosition + 1 == getCount() && actualPosition > 0) { + sumDistance_m = actualPosition * getItem(actualPosition - 1).getDistance_m() + interval.getDistance_m(); + } else { + sumDistance_m = (actualPosition + 1) * interval.getDistance_m(); + } viewHolder.distance.setText(StringUtils.formatDistance(getContext(), sumDistance_m, metricUnits)); Pair speedParts = StringUtils.getSpeedParts(getContext(), interval.getSpeed_ms(), metricUnits, true); @@ -60,6 +67,14 @@ public class IntervalStatisticsAdapter extends ArrayAdapter liveData = viewModel.getIntervalStats(trackId, selectedInterval); liveData.observe(getActivity(), intervalStatistics -> { if (intervalStatistics != null) { - adapter = new IntervalStatisticsAdapter(getContext(), intervalStatistics.getIntervalList()); + adapter = new IntervalStatisticsAdapter(getContext(), intervalStatistics.getIntervalList(), stackModeListView); intervalListView.setAdapter(adapter); } }); @@ -179,10 +182,10 @@ public class IntervalsFragment extends Fragment { @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); ((TrackRecordingActivity) getActivity()).setTrackIdListener(this); intervalHandler = new Handler(); - - super.onViewCreated(view, savedInstanceState); + stackModeListView = IntervalStatisticsAdapter.StackMode.STACK_FROM_BOTTOM; } @Override diff --git a/src/main/res/layout/interval_list_view.xml b/src/main/res/layout/interval_list_view.xml index df0b45af0..84e0bbdf1 100644 --- a/src/main/res/layout/interval_list_view.xml +++ b/src/main/res/layout/interval_list_view.xml @@ -89,7 +89,7 @@