Cleanup: TrackRecordingServiceConnection has now an execute method (avoid instantiation).

This commit is contained in:
Dennis Guse
2023-12-26 11:54:38 +01:00
parent 59aeec4fbc
commit 9a0f927182
6 changed files with 21 additions and 45 deletions
@@ -159,11 +159,7 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co
if (gpsStatusValue.isGpsStarted()) { if (gpsStatusValue.isGpsStarted()) {
recordingStatusConnection.stopService(this); recordingStatusConnection.stopService(this);
} else { } else {
new TrackRecordingServiceConnection((service, connection) -> { TrackRecordingServiceConnection.execute(this, (service, connection) -> service.tryStartSensors());
service.tryStartSensors();
connection.unbind(this);
}).startAndBindWithCallback(this);
} }
} }
}); });
@@ -182,15 +178,13 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co
// Not Recording -> Recording // Not Recording -> Recording
Log.i(TAG, "Starting recording"); Log.i(TAG, "Starting recording");
updateGpsMenuItem(false, true); updateGpsMenuItem(false, true);
new TrackRecordingServiceConnection((service, connection) -> { TrackRecordingServiceConnection.execute(this, (service, connection) -> {
Track.Id trackId = service.startNewTrack(); Track.Id trackId = service.startNewTrack();
Intent newIntent = IntentUtils.newIntent(TrackListActivity.this, TrackRecordingActivity.class); Intent newIntent = IntentUtils.newIntent(TrackListActivity.this, TrackRecordingActivity.class);
newIntent.putExtra(TrackRecordingActivity.EXTRA_TRACK_ID, trackId); newIntent.putExtra(TrackRecordingActivity.EXTRA_TRACK_ID, trackId);
startActivity(newIntent); startActivity(newIntent);
});
connection.unbind(this);
}).startAndBind(this);
}); });
viewBinding.trackListFabAction.setOnLongClickListener((view) -> { viewBinding.trackListFabAction.setOnLongClickListener((view) -> {
if (!recordingStatus.isRecording()) { if (!recordingStatus.isRecording()) {
@@ -201,7 +201,7 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement
} }
if (item.getItemId() == R.id.track_detail_resume_track) { if (item.getItemId() == R.id.track_detail_resume_track) {
new TrackRecordingServiceConnection((service, connection) -> { TrackRecordingServiceConnection.execute(this, (service, connection) -> {
service.resumeTrack(trackId); service.resumeTrack(trackId);
Intent newIntent = IntentUtils.newIntent(TrackRecordedActivity.this, TrackRecordingActivity.class) Intent newIntent = IntentUtils.newIntent(TrackRecordedActivity.this, TrackRecordingActivity.class)
@@ -209,9 +209,8 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement
startActivity(newIntent); startActivity(newIntent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
connection.unbind(this);
finish(); finish();
}).startAndBind(this); });
return true; return true;
} }
@@ -224,7 +224,7 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc
trackDataHub.setRecordingStatus(recordingStatus); trackDataHub.setRecordingStatus(recordingStatus);
} }
trackRecordingServiceConnection.startAndBindWithCallback(this); trackRecordingServiceConnection.bind(this);
} }
@Override @Override
@@ -136,7 +136,7 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements
} }
private void resumeTrackAndFinish() { private void resumeTrackAndFinish() {
new TrackRecordingServiceConnection((service, connection) -> { TrackRecordingServiceConnection.execute(this, (service, connection) -> {
service.resumeTrack(trackId); service.resumeTrack(trackId);
Intent newIntent = IntentUtils.newIntent(TrackStoppedActivity.this, TrackRecordingActivity.class) Intent newIntent = IntentUtils.newIntent(TrackStoppedActivity.this, TrackRecordingActivity.class)
@@ -144,9 +144,8 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements
startActivity(newIntent); startActivity(newIntent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
connection.unbind(this);
finish(); finish();
}).startAndBind(this); });
} }
@Override @Override
@@ -37,8 +37,7 @@ public abstract class AbstractAPIActivity extends AppCompatActivity {
if (PreferencesUtils.isPublicAPIenabled()) { if (PreferencesUtils.isPublicAPIenabled()) {
Log.i(TAG, "Received and trying to execute requested action."); Log.i(TAG, "Received and trying to execute requested action.");
new TrackRecordingServiceConnection(serviceConnectedCallback) TrackRecordingServiceConnection.execute(this, serviceConnectedCallback);
.startAndBind(this);
} else { } else {
Toast.makeText(this, getString(R.string.settings_public_api_disabled_toast), Toast.LENGTH_LONG).show(); Toast.makeText(this, getString(R.string.settings_public_api_disabled_toast), Toast.LENGTH_LONG).show();
Log.w(TAG, "Public API is disabled; ignoring request."); Log.w(TAG, "Public API is disabled; ignoring request.");
@@ -80,7 +80,7 @@ public class TrackRecordingServiceConnection {
public void bind(@NonNull Context context) { public void bind(@NonNull Context context) {
if (trackRecordingService != null) { if (trackRecordingService != null) {
// Service is already started and bound. callback.onConnected(trackRecordingService, this);
return; return;
} }
@@ -89,32 +89,6 @@ public class TrackRecordingServiceConnection {
context.bindService(new Intent(context, TrackRecordingService.class), serviceConnection, flags); 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). * Unbinds the service (but leave it running).
*/ */
@@ -178,4 +152,15 @@ public class TrackRecordingServiceConnection {
public interface Callback { public interface Callback {
void onConnected(TrackRecordingService service, TrackRecordingServiceConnection self); 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));
}
} }