diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index f269a763a..2a9e2d8c9 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -157,8 +157,7 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); } else { if (gpsStatusValue.isGpsStarted()) { - recordingStatusConnection.unbindAndStop(this); - recordingStatusConnection.startConnection(this); //TODO We need to stay listening! + recordingStatusConnection.stopService(this); } else { new TrackRecordingServiceConnection((service, connection) -> { service.tryStartSensors(); @@ -220,7 +219,7 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co super.onStart(); PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - recordingStatusConnection.startConnection(this); + recordingStatusConnection.bind(this); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java index 5127f6e47..257c4dbab 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java @@ -126,7 +126,7 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement trackDataHub.loadTrack(trackId); } - trackRecordingServiceConnection.startConnection(this); + trackRecordingServiceConnection.bind(this); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java index 6c307ec6a..432b086c3 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java @@ -207,7 +207,7 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - trackRecordingServiceConnection.startConnection(this); + trackRecordingServiceConnection.bind(this); trackDataHub.start(); } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java index a0d015790..5f9c6ede3 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java @@ -88,7 +88,7 @@ public class StatisticsRecordingFragment extends Fragment { PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - trackRecordingServiceConnection.startConnection(getContext()); + trackRecordingServiceConnection.bind(getContext()); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceConnection.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceConnection.java index d2a631de8..d34fe1b77 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceConnection.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceConnection.java @@ -74,14 +74,21 @@ public class TrackRecordingServiceConnection { setTrackRecordingService(null); }; - public TrackRecordingServiceConnection() { - callback = null; - } - public TrackRecordingServiceConnection(@NonNull Callback callback) { this.callback = callback; } + public void bind(@NonNull Context context) { + if (trackRecordingService != null) { + // Service is already started and bound. + return; + } + + Log.i(TAG, "Binding the service."); + int flags = BuildConfig.DEBUG ? Context.BIND_DEBUG_UNBIND : 0; + context.bindService(new Intent(context, TrackRecordingService.class), serviceConnection, flags); + } + public void startAndBind(Context context) { if (trackRecordingService != null) { // Service is already started and bound. @@ -90,7 +97,7 @@ public class TrackRecordingServiceConnection { ContextCompat.startForegroundService(context, new Intent(context, TrackRecordingService.class)); - startConnection(context); + bind(context); } //TODO There should be a better way to implement this. @@ -105,20 +112,7 @@ public class TrackRecordingServiceConnection { startAndBind(context); return; } - if (callback != null) { - callback.onConnected(trackRecordingService, this); - } - } - - public void startConnection(@NonNull Context context) { - if (trackRecordingService != null) { - // Service is already started and bound. - return; - } - - Log.i(TAG, "Binding the service."); - int flags = BuildConfig.DEBUG ? Context.BIND_DEBUG_UNBIND : 0; - context.bindService(new Intent(context, TrackRecordingService.class), serviceConnection, flags); + callback.onConnected(trackRecordingService, this); } /** @@ -134,15 +128,19 @@ public class TrackRecordingServiceConnection { setTrackRecordingService(null); } + public void stopService(Context context) { + context.stopService(new Intent(context, TrackRecordingService.class)); + } + public void unbindAndStop(Context context) { unbind(context); - context.stopService(new Intent(context, TrackRecordingService.class)); + stopService(context); } private void setTrackRecordingService(TrackRecordingService value) { trackRecordingService = value; - if (callback != null && value != null) { - callback.onConnected(value, this); + if (value != null) { + callback.onConnected(value, this); } } diff --git a/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerEditViewModel.java b/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerEditViewModel.java index ee58ccfcb..40f83c784 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerEditViewModel.java +++ b/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerEditViewModel.java @@ -32,7 +32,7 @@ public class MarkerEditViewModel extends AndroidViewModel { private MutableLiveData markerData; private boolean isNewMarker; private Uri photoOriginalUri; - private final TrackRecordingServiceConnection trackRecordingServiceConnection = new TrackRecordingServiceConnection(); + private final TrackRecordingServiceConnection trackRecordingServiceConnection = new TrackRecordingServiceConnection((service, connection) -> {}); public MarkerEditViewModel(@NonNull Application application) { super(application); @@ -41,7 +41,7 @@ public class MarkerEditViewModel extends AndroidViewModel { public LiveData getMarkerData(@NonNull Track.Id trackId, @Nullable Marker.Id markerId) { if (markerData == null) { markerData = new MutableLiveData<>(); - trackRecordingServiceConnection.startConnection(getApplication()); + trackRecordingServiceConnection.bind(getApplication()); loadData(trackId, markerId); } return markerData; diff --git a/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerListActivity.java b/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerListActivity.java index 6ad125a44..48e4c064f 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerListActivity.java @@ -119,13 +119,13 @@ public class MarkerListActivity extends AbstractActivity { @Override protected void onStart() { super.onStart(); - trackRecordingServiceConnection.startConnection(this); + trackRecordingServiceConnection.bind(this); } @Override protected void onResume() { super.onResume(); - trackRecordingServiceConnection.startConnection(this); + trackRecordingServiceConnection.bind(this); this.invalidateOptionsMenu(); loadData(); }