diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java index 5ac60bb7d..5a1d58374 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java @@ -63,6 +63,9 @@ public class StatisticsRecordedFragment extends Fragment implements IntervalList private 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 (viewModel != null) { + viewModel.invalidate(); + } if (isResumed()) { getActivity().runOnUiThread(() -> { if (isResumed()) { @@ -187,16 +190,12 @@ public class StatisticsRecordedFragment extends Fragment implements IntervalList loadStatistics(); } - @Override - public void onPause() { - super.onPause(); - PreferencesUtils.unregister(getContext(), sharedPreferenceChangeListener); - } - @Override public void onDestroyView() { super.onDestroyView(); + PreferencesUtils.unregister(getContext(), sharedPreferenceChangeListener); + totalTimeValueView = null; distanceValue = null; @@ -218,6 +217,10 @@ public class StatisticsRecordedFragment extends Fragment implements IntervalList speedMovingLabel = null; speedMovingValue = null; speedMovingUnit = null; + + intervalListView.destroy(); + intervalListView = null; + viewModel = null; } public void loadStatistics() { diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatistics.java b/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatistics.java index c6eb233de..57cfb56d5 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatistics.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatistics.java @@ -1,7 +1,5 @@ package de.dennisguse.opentracks.viewmodels; -import android.util.Log; - import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java b/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java index 80a2421ff..ee37ac7d5 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java @@ -38,6 +38,10 @@ public class IntervalStatisticsModel extends AndroidViewModel { return getIntervalStats(trackId, interval); } + public void invalidate() { + intervalStats = null; + } + private void loadIntervalStats(long trackId) { new Thread(() -> { Context context = getApplication().getApplicationContext(); diff --git a/src/main/java/de/dennisguse/opentracks/views/IntervalListView.java b/src/main/java/de/dennisguse/opentracks/views/IntervalListView.java index 4d0aed501..980e37fc3 100644 --- a/src/main/java/de/dennisguse/opentracks/views/IntervalListView.java +++ b/src/main/java/de/dennisguse/opentracks/views/IntervalListView.java @@ -1,6 +1,7 @@ package de.dennisguse.opentracks.views; import android.content.Context; +import android.content.SharedPreferences; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; @@ -26,10 +27,19 @@ public class IntervalListView extends LinearLayout { private Context context; private IntervalListListener listener; + private 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(context) ? context.getString(R.string.unit_kilometer) : context.getString(R.string.unit_mile)); + } + } + }; + public IntervalListView(Context context, IntervalListListener listener) { super(context); this.context = context; this.listener = listener; + PreferencesUtils.register(getContext(), sharedPreferenceChangeListener); init(); } @@ -55,6 +65,16 @@ public class IntervalListView extends LinearLayout { }); } + public void destroy() { + PreferencesUtils.unregister(getContext(), sharedPreferenceChangeListener); + adapter = null; + linearLayoutIntervals = null; + spinnerIntervals = null; + spinnerIntervalsUnit = null; + context = null; + listener = null; + } + public void display(List intervalList) { if (intervalList != null) { adapter = new IntervalStatisticsAdapter(getContext(), intervalList);