From 13f2a09652919b1c4c564cb0c42a2a4c75333c07 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sun, 18 Apr 2021 20:13:01 +0200 Subject: [PATCH] Bugfix: AnnouncementPeriodicTask does not need to register as TrackRecordingService.Listener. --- .../services/TrackRecordingService.java | 10 +++++++++ .../services/TrackRecordingServiceStatus.java | 6 ++++- .../tasks/AnnouncementPeriodicTask.java | 22 +++++++------------ .../stats/TrackStatisticsUpdater.java | 2 +- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index a716cfa42..cbb2c0a5d 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -192,6 +192,10 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand return serviceStatus.getRecordingTrackPaused(); } + public Track.Id getRecordingTrackId() { + return serviceStatus.getRecordingTrackId(); + } + public TrackStatistics getTrackStatistics() { if (trackStatisticsUpdater == null) { return null; @@ -569,6 +573,12 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand serviceStatus.addListener(listener); } + //TODO Check that this is used everywhere, where addListener is called! + //Otherwise, we keep objects in referenced and waste memory until this service instance is terminated. + public void removeListener(@NonNull TrackRecordingServiceStatus.Listener listener) { + serviceStatus.removeListener(listener); + } + /** * Inserts a trackPoint if this trackPoint is different than lastValidTrackPoint. * diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceStatus.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceStatus.java index c38cb6f80..3a7b1ca73 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceStatus.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceStatus.java @@ -19,7 +19,7 @@ public class TrackRecordingServiceStatus { private final List listeners = new ArrayList<>(); - public void addListener(@NonNull Listener listener) { + void addListener(@NonNull Listener listener) { if (this.listeners.contains(listener)) { return; } @@ -28,6 +28,10 @@ public class TrackRecordingServiceStatus { listener.onTrackRecordingPaused(recordingTrackPaused); } + void removeListener(@NonNull Listener listener) { + this.listeners.remove(listener); + } + public boolean getRecordingTrackPaused() { return this.recordingTrackPaused; } diff --git a/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java b/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java index 75bee9cdd..1fdceb588 100644 --- a/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java +++ b/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java @@ -24,6 +24,7 @@ import android.speech.tts.UtteranceProgressListener; import android.util.Log; import java.util.ArrayList; +import java.util.Arrays; import java.util.Locale; import de.dennisguse.opentracks.content.data.Distance; @@ -32,7 +33,6 @@ import de.dennisguse.opentracks.content.data.TrackPoint; import de.dennisguse.opentracks.content.provider.ContentProviderUtils; import de.dennisguse.opentracks.content.provider.TrackPointIterator; import de.dennisguse.opentracks.services.TrackRecordingService; -import de.dennisguse.opentracks.services.TrackRecordingServiceStatus; import de.dennisguse.opentracks.stats.TrackStatistics; import de.dennisguse.opentracks.util.AnnouncementUtils; import de.dennisguse.opentracks.util.PreferencesUtils; @@ -58,8 +58,6 @@ public class AnnouncementPeriodicTask implements PeriodicTask { private final ContentProviderUtils contentProviderUtils; - private Track.Id recordingTrackId; - private final AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() { @Override public void onAudioFocusChange(int focusChange) { @@ -142,13 +140,8 @@ public class AnnouncementPeriodicTask implements PeriodicTask { Log.e(TAG, "TrackRecordingService is null."); return; } - trackRecordingService.addListener(new TrackRecordingServiceStatus.Listener() { - @Override - public void onTrackRecordingId(Track.Id trackId) { - recordingTrackId = trackId; - announce(trackRecordingService.getTrackStatistics()); - } - }); + + announce(trackRecordingService.getRecordingTrackId(), trackRecordingService.getTrackStatistics()); } /** @@ -156,7 +149,7 @@ public class AnnouncementPeriodicTask implements PeriodicTask { * * @param trackStatistics the track statistics */ - private void announce(TrackStatistics trackStatistics) { + private void announce(Track.Id trackId, TrackStatistics trackStatistics) { if (trackStatistics == null) { Log.e(TAG, "TrackStatistics is null."); return; @@ -175,14 +168,15 @@ public class AnnouncementPeriodicTask implements PeriodicTask { } } - if (audioManager.getMode() == AudioManager.MODE_IN_CALL || audioManager.getMode() == AudioManager.MODE_IN_COMMUNICATION) { + if (Arrays.asList(AudioManager.MODE_IN_CALL, AudioManager.MODE_IN_COMMUNICATION) + .contains(audioManager.getMode())) { Log.i(TAG, "Speech is not allowed at this time."); return; } - Track track = contentProviderUtils.getTrack(recordingTrackId); + Track track = contentProviderUtils.getTrack(trackId); if (track == null) { - Log.i(TAG, "It doesn't exists a track with trackid = " + recordingTrackId); + Log.i(TAG, "It doesn't exists a track with trackid = " + track); return; } String category = track.getCategory(); diff --git a/src/main/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdater.java b/src/main/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdater.java index b99a88cbf..ca24bf032 100644 --- a/src/main/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdater.java +++ b/src/main/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdater.java @@ -106,7 +106,7 @@ public class TrackStatisticsUpdater { */ public void addTrackPoint(TrackPoint trackPoint, Distance minGPSDistance) { internalAddTrackPoint(trackPoint, minGPSDistance); - Log.d(TAG, this.toString()); + Log.v(TAG, this.toString()); } private void internalAddTrackPoint(TrackPoint trackPoint, Distance minGPSDistance) {