From 9a0f9271820d37dfe86d0c42cd1fd55773099ef0 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Tue, 26 Dec 2023 11:54:38 +0100 Subject: [PATCH] Cleanup: TrackRecordingServiceConnection has now an execute method (avoid instantiation). --- .../opentracks/TrackListActivity.java | 12 ++---- .../opentracks/TrackRecordedActivity.java | 5 +-- .../opentracks/TrackRecordingActivity.java | 2 +- .../opentracks/TrackStoppedActivity.java | 5 +-- .../publicapi/AbstractAPIActivity.java | 3 +- .../TrackRecordingServiceConnection.java | 39 ++++++------------- 6 files changed, 21 insertions(+), 45 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index 2a9e2d8c9..dda4cb355 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -159,11 +159,7 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co if (gpsStatusValue.isGpsStarted()) { recordingStatusConnection.stopService(this); } else { - new TrackRecordingServiceConnection((service, connection) -> { - service.tryStartSensors(); - - connection.unbind(this); - }).startAndBindWithCallback(this); + TrackRecordingServiceConnection.execute(this, (service, connection) -> service.tryStartSensors()); } } }); @@ -182,15 +178,13 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co // Not Recording -> Recording Log.i(TAG, "Starting recording"); updateGpsMenuItem(false, true); - new TrackRecordingServiceConnection((service, connection) -> { + TrackRecordingServiceConnection.execute(this, (service, connection) -> { Track.Id trackId = service.startNewTrack(); Intent newIntent = IntentUtils.newIntent(TrackListActivity.this, TrackRecordingActivity.class); newIntent.putExtra(TrackRecordingActivity.EXTRA_TRACK_ID, trackId); startActivity(newIntent); - - connection.unbind(this); - }).startAndBind(this); + }); }); viewBinding.trackListFabAction.setOnLongClickListener((view) -> { if (!recordingStatus.isRecording()) { diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java index 257c4dbab..856a04a53 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java @@ -201,7 +201,7 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement } if (item.getItemId() == R.id.track_detail_resume_track) { - new TrackRecordingServiceConnection((service, connection) -> { + TrackRecordingServiceConnection.execute(this, (service, connection) -> { service.resumeTrack(trackId); Intent newIntent = IntentUtils.newIntent(TrackRecordedActivity.this, TrackRecordingActivity.class) @@ -209,9 +209,8 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement startActivity(newIntent); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); - connection.unbind(this); finish(); - }).startAndBind(this); + }); return true; } diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java index 432b086c3..3390484d1 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java @@ -224,7 +224,7 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc trackDataHub.setRecordingStatus(recordingStatus); } - trackRecordingServiceConnection.startAndBindWithCallback(this); + trackRecordingServiceConnection.bind(this); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java index 6cfce7898..ddb916775 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java @@ -136,7 +136,7 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements } private void resumeTrackAndFinish() { - new TrackRecordingServiceConnection((service, connection) -> { + TrackRecordingServiceConnection.execute(this, (service, connection) -> { service.resumeTrack(trackId); Intent newIntent = IntentUtils.newIntent(TrackStoppedActivity.this, TrackRecordingActivity.class) @@ -144,9 +144,8 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements startActivity(newIntent); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); - connection.unbind(this); finish(); - }).startAndBind(this); + }); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/publicapi/AbstractAPIActivity.java b/src/main/java/de/dennisguse/opentracks/publicapi/AbstractAPIActivity.java index 98b6b83ec..3cc4352be 100644 --- a/src/main/java/de/dennisguse/opentracks/publicapi/AbstractAPIActivity.java +++ b/src/main/java/de/dennisguse/opentracks/publicapi/AbstractAPIActivity.java @@ -37,8 +37,7 @@ public abstract class AbstractAPIActivity extends AppCompatActivity { if (PreferencesUtils.isPublicAPIenabled()) { Log.i(TAG, "Received and trying to execute requested action."); - new TrackRecordingServiceConnection(serviceConnectedCallback) - .startAndBind(this); + TrackRecordingServiceConnection.execute(this, serviceConnectedCallback); } else { Toast.makeText(this, getString(R.string.settings_public_api_disabled_toast), Toast.LENGTH_LONG).show(); Log.w(TAG, "Public API is disabled; ignoring request."); diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceConnection.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceConnection.java index d34fe1b77..97c3bc725 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceConnection.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceConnection.java @@ -80,7 +80,7 @@ public class TrackRecordingServiceConnection { public void bind(@NonNull Context context) { if (trackRecordingService != null) { - // Service is already started and bound. + callback.onConnected(trackRecordingService, this); return; } @@ -89,32 +89,6 @@ public class TrackRecordingServiceConnection { context.bindService(new Intent(context, TrackRecordingService.class), serviceConnection, flags); } - public void startAndBind(Context context) { - if (trackRecordingService != null) { - // Service is already started and bound. - return; - } - - ContextCompat.startForegroundService(context, new Intent(context, TrackRecordingService.class)); - - bind(context); - } - - //TODO There should be a better way to implement this. - - /** - * Triggers the onConnected() callback even if already connected. - */ - //TODO Check if this is actually needed as it is used to re-connect from Activities in onResume by using a LiveData; might be obsolete. If not, there should be a better way to implement this. - @Deprecated - public void startAndBindWithCallback(Context context) { - if (trackRecordingService == null) { - startAndBind(context); - return; - } - callback.onConnected(trackRecordingService, this); - } - /** * Unbinds the service (but leave it running). */ @@ -178,4 +152,15 @@ public class TrackRecordingServiceConnection { public interface Callback { void onConnected(TrackRecordingService service, TrackRecordingServiceConnection self); } + + public static void execute(Context context, Callback callback) { + Callback withUnbind = (service, connection) -> { + callback.onConnected(service, connection); + connection.unbind(context); + }; + new TrackRecordingServiceConnection(withUnbind) + .bind(context); + + ContextCompat.startForegroundService(context, new Intent(context, TrackRecordingService.class)); + } }