From 6533e3e170ce01c1d8b835586d1c632fabe49f06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n?= Date: Thu, 3 Sep 2020 22:13:01 +0200 Subject: [PATCH] Recording intervals received a null trackId because trackId is created in a Runnable. Unit changed needs refreshing the intervals. Fixes #406. --- .../opentracks/TrackRecordingActivity.java | 14 +++++++++++++ .../fragments/IntervalsRecordedFragment.java | 12 +++++++++++ .../fragments/IntervalsRecordingFragment.java | 20 ++++++++++++++++++- .../viewmodels/IntervalStatisticsModel.java | 1 + .../opentracks/views/IntervalListView.java | 2 ++ 5 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java index 2c19d75e8..e32af7d93 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java @@ -66,6 +66,9 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc // Preferences private boolean recordingTrackPaused; + // Intervals recording fragment needs Track.Id when the activity creates it. + private OnTrackIdListener intervalsListener; + private final Runnable bindChangedCallback = new Runnable() { @Override public void run() { @@ -82,6 +85,9 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc if (trackId == null) { // trackId isn't initialized -> leads a new recording. trackId = service.startNewTrack(); + if (intervalsListener != null) { + intervalsListener.onTrackId(trackId); + } } else { // trackId is initialized -> resumes the track. service.resumeTrack(trackId); @@ -410,4 +416,12 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc } } } + + public interface OnTrackIdListener { + void onTrackId(Track.Id trackId); + } + + public void setTrackIdListener(OnTrackIdListener listener) { + this.intervalsListener = listener; + } } \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/fragments/IntervalsRecordedFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/IntervalsRecordedFragment.java index 6d020db45..6323415b6 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/IntervalsRecordedFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/IntervalsRecordedFragment.java @@ -90,4 +90,16 @@ public class IntervalsRecordedFragment extends Fragment implements IntervalListV } }); } + + @Override + public void unitChanged() { + if (viewModel != null) { + LiveData liveData = viewModel.getIntervalStats(trackId, null); + liveData.observe(getActivity(), intervalStatistics -> { + if (intervalStatistics != null) { + intervalListView.display(intervalStatistics.getIntervalList()); + } + }); + } + } } \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/fragments/IntervalsRecordingFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/IntervalsRecordingFragment.java index 64a766ecd..bcf1f39d9 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/IntervalsRecordingFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/IntervalsRecordingFragment.java @@ -14,6 +14,7 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.ViewModelProvider; import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.TrackRecordingActivity; import de.dennisguse.opentracks.content.data.Track; import de.dennisguse.opentracks.util.UnitConversions; import de.dennisguse.opentracks.viewmodels.IntervalStatistics; @@ -23,7 +24,7 @@ import de.dennisguse.opentracks.views.IntervalListView; /** * A fragment to display the intervals from recording track. */ -public class IntervalsRecordingFragment extends Fragment implements IntervalListView.IntervalListListener { +public class IntervalsRecordingFragment extends Fragment implements IntervalListView.IntervalListListener, TrackRecordingActivity.OnTrackIdListener { private static final String TAG = IntervalsRecordingFragment.class.getSimpleName(); @@ -68,6 +69,7 @@ public class IntervalsRecordingFragment extends Fragment implements IntervalList super.onViewCreated(view, savedInstanceState); trackId = getArguments().getParcelable(TRACK_ID_KEY); + ((TrackRecordingActivity) getActivity()).setTrackIdListener(this); intervalHandler = new Handler(); @@ -124,4 +126,20 @@ public class IntervalsRecordingFragment extends Fragment implements IntervalList intervalChanged(null); } + @Override + public void unitChanged() { + if (viewModel != null) { + LiveData liveData = viewModel.getIntervalStats(trackId, null); + liveData.observe(getActivity(), intervalStatistics -> { + if (intervalStatistics != null) { + intervalListView.display(intervalStatistics.getIntervalList()); + } + }); + } + } + + @Override + public void onTrackId(Track.Id trackId) { + this.trackId = trackId; + } } \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java b/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java index 212f64746..ef698986a 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java @@ -24,6 +24,7 @@ import de.dennisguse.opentracks.util.UnitConversions; public class IntervalStatisticsModel extends AndroidViewModel { private MutableLiveData intervalStats = new MutableLiveData<>(); + private IntervalOption interval = IntervalOption.OPTION_1; public IntervalStatisticsModel(@NonNull Application application) { super(application); diff --git a/src/main/java/de/dennisguse/opentracks/views/IntervalListView.java b/src/main/java/de/dennisguse/opentracks/views/IntervalListView.java index dbff2c7bf..b02d4ede6 100644 --- a/src/main/java/de/dennisguse/opentracks/views/IntervalListView.java +++ b/src/main/java/de/dennisguse/opentracks/views/IntervalListView.java @@ -35,6 +35,7 @@ public class IntervalListView extends LinearLayout { 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)); + listener.unitChanged(); } } }; @@ -92,6 +93,7 @@ public class IntervalListView extends LinearLayout { public interface IntervalListListener { void intervalChanged(IntervalStatisticsModel.IntervalOption interval); + void unitChanged(); } /**