From cc1e080ce146dec33d9c67020f8e05e497eecfb9 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sun, 20 Sep 2020 19:05:32 +0200 Subject: [PATCH] Interval statistics: show unit in dropdown. --- .../fragments/IntervalsFragment.java | 32 ++++++++++++------- .../viewmodels/IntervalStatisticsModel.java | 5 +++ src/main/res/layout/interval_list_view.xml | 8 ----- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/fragments/IntervalsFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/IntervalsFragment.java index 8e3802e92..4719dfcb1 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/IntervalsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/IntervalsFragment.java @@ -18,8 +18,6 @@ import androidx.fragment.app.Fragment; import androidx.lifecycle.LiveData; import androidx.lifecycle.ViewModelProvider; -import java.util.Arrays; - import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.TrackRecordingActivity; import de.dennisguse.opentracks.adapters.IntervalStatisticsAdapter; @@ -42,17 +40,18 @@ public class IntervalsFragment extends Fragment { private ListView intervalListView; protected IntervalStatisticsAdapter.StackMode stackModeListView; private IntervalStatisticsModel.IntervalOption selectedInterval; - private IntervalStatisticsAdapter adapter; + private String intervalUnit; + private IntervalStatisticsAdapter adapter; protected Spinner spinnerIntervals; - protected TextView spinnerIntervalsUnit; private Track.Id trackId; protected final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (preferences, key) -> { if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key) || PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) { - if (spinnerIntervalsUnit != null) { - spinnerIntervalsUnit.setText(PreferencesUtils.isMetricUnits(getContext()) ? getContext().getString(R.string.unit_kilometer) : getContext().getString(R.string.unit_mile)); + intervalUnit = PreferencesUtils.isMetricUnits(getContext()) ? getContext().getString(R.string.unit_kilometer) : getContext().getString(R.string.unit_mile); + if (adapter != null) { + adapter.notifyDataSetChanged(); intervalChanged(); } } @@ -77,6 +76,7 @@ public class IntervalsFragment extends Fragment { super.onViewCreated(view, savedInstanceState); PreferencesUtils.register(getContext(), sharedPreferenceChangeListener); + intervalUnit = PreferencesUtils.isMetricUnits(getContext()) ? getContext().getString(R.string.unit_kilometer) : getContext().getString(R.string.unit_mile); if (savedInstanceState != null) { trackId = savedInstanceState.getParcelable(TRACK_ID_KEY); @@ -93,11 +93,22 @@ public class IntervalsFragment extends Fragment { spinnerIntervals = view.findViewById(R.id.spinner_intervals); - int[] intValues = Arrays.stream(IntervalStatisticsModel.IntervalOption.values()).mapToInt(i -> i.getValue()).toArray(); + spinnerIntervals.setAdapter(new ArrayAdapter(getContext(), android.R.layout.simple_spinner_dropdown_item, IntervalStatisticsModel.IntervalOption.values()) { + @NonNull + @Override + public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { + TextView v = (TextView) super.getView(position, convertView, parent); + v.setText(v.getText() + " " + intervalUnit); + return v; + } - spinnerIntervals.setAdapter(new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_dropdown_item, Arrays.stream(intValues).mapToObj(String::valueOf).toArray(String[]::new))); - spinnerIntervalsUnit = view.findViewById(R.id.spinner_intervals_unit); - spinnerIntervalsUnit.setText(PreferencesUtils.isMetricUnits(getContext()) ? getContext().getString(R.string.unit_kilometer) : getContext().getString(R.string.unit_mile)); + @Override + public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { + TextView v = (TextView) super.getDropDownView(position, convertView, parent); + v.setText(v.getText() + " " + intervalUnit); + return v; + } + }); spinnerIntervals.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override @@ -124,7 +135,6 @@ public class IntervalsFragment extends Fragment { intervalListView = null; adapter = null; spinnerIntervals = null; - spinnerIntervalsUnit = null; viewModel = null; } diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java b/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java index 212f64746..a734973b0 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java @@ -75,5 +75,10 @@ public class IntervalStatisticsModel extends AndroidViewModel { public int getValue() { return value; } + + @Override + public String toString() { + return "" + value; + } } } diff --git a/src/main/res/layout/interval_list_view.xml b/src/main/res/layout/interval_list_view.xml index 84e0bbdf1..c17dabed1 100644 --- a/src/main/res/layout/interval_list_view.xml +++ b/src/main/res/layout/interval_list_view.xml @@ -2,7 +2,6 @@ - -