TrackRecordingService does not save the context.

This commit is contained in:
Dennis Guse
2019-12-16 22:48:21 +01:00
parent d7890cbc81
commit d6835ba766
7 changed files with 20 additions and 24 deletions
@@ -95,7 +95,7 @@ public class MarkerEditActivity extends AbstractActivity {
@Override @Override
protected void onStop() { protected void onStop() {
super.onStop(); super.onStop();
trackRecordingServiceConnection.unbind(); trackRecordingServiceConnection.unbind(this);
} }
@Override @Override
@@ -245,7 +245,7 @@ public class SearchListActivity extends AbstractListActivity implements DeleteMa
protected void onStop() { protected void onStop() {
super.onStop(); super.onStop();
sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
trackRecordingServiceConnection.unbind(); trackRecordingServiceConnection.unbind(this);
} }
@Override @Override
@@ -291,7 +291,7 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA
protected void onStop() { protected void onStop() {
super.onStop(); super.onStop();
sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
trackRecordingServiceConnection.unbind(); trackRecordingServiceConnection.unbind(this);
trackDataHub.stop(); trackDataHub.stop();
} }
@@ -175,7 +175,7 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit
@Override @Override
protected void onStop() { protected void onStop() {
super.onStop(); super.onStop();
trackRecordingServiceConnection.unbind(); trackRecordingServiceConnection.unbind(this);
} }
@Override @Override
@@ -141,7 +141,7 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe
if (PreferencesUtils.isKey(TrackListActivity.this, R.string.recording_track_id_key, key)) { if (PreferencesUtils.isKey(TrackListActivity.this, R.string.recording_track_id_key, key)) {
recordingTrackId = PreferencesUtils.getRecordingTrackId(TrackListActivity.this); recordingTrackId = PreferencesUtils.getRecordingTrackId(TrackListActivity.this);
if (key != null && PreferencesUtils.isRecording(recordingTrackId)) { if (key != null && PreferencesUtils.isRecording(recordingTrackId)) {
trackRecordingServiceConnection.startAndBind(); trackRecordingServiceConnection.startAndBind(TrackListActivity.this);
} }
} }
if (PreferencesUtils.isKey(TrackListActivity.this, R.string.recording_track_paused_key, key)) { if (PreferencesUtils.isKey(TrackListActivity.this, R.string.recording_track_paused_key, key)) {
@@ -344,7 +344,7 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe
super.onStop(); super.onStop();
sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
trackRecordingServiceConnection.unbind(); trackRecordingServiceConnection.unbind(this);
} }
@Override @Override
@@ -406,14 +406,14 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe
// Invoke trackRecordingService // Invoke trackRecordingService
if (startGps) { if (startGps) {
trackRecordingServiceConnection.startAndBind(); trackRecordingServiceConnection.startAndBind(this);
bindChangedCallback.run(); bindChangedCallback.run();
} else { } else {
ITrackRecordingService trackRecordingService = trackRecordingServiceConnection.getServiceIfBound(); ITrackRecordingService trackRecordingService = trackRecordingServiceConnection.getServiceIfBound();
if (trackRecordingService != null) { if (trackRecordingService != null) {
trackRecordingService.stopGps(); trackRecordingService.stopGps();
} }
trackRecordingServiceConnection.unbindAndStop(); trackRecordingServiceConnection.unbindAndStop(this);
} }
// Update menu after starting or stopping gps // Update menu after starting or stopping gps
@@ -498,7 +498,7 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe
*/ */
private void startRecording() { private void startRecording() {
startNewRecording = true; startNewRecording = true;
trackRecordingServiceConnection.startAndBind(); trackRecordingServiceConnection.startAndBind(this);
/* /*
* If the binding has happened, then invoke the callback to start a new recording. * If the binding has happened, then invoke the callback to start a new recording.
@@ -239,7 +239,7 @@ public class StatsFragment extends Fragment implements TrackDataListener {
public void onStop() { public void onStop() {
super.onStop(); super.onStop();
if (trackRecordingServiceConnection != null) { if (trackRecordingServiceConnection != null) {
trackRecordingServiceConnection.unbind(); trackRecordingServiceConnection.unbind(getContext());
} }
trackRecordingServiceConnection = null; trackRecordingServiceConnection = null;
} }
@@ -48,9 +48,6 @@ public class TrackRecordingServiceConnection implements ServiceConnection, Death
private static final String TAG = TrackRecordingServiceConnection.class.getSimpleName(); private static final String TAG = TrackRecordingServiceConnection.class.getSimpleName();
@Deprecated
//TODO Always the context of the owner of a service connection (i.e., let it be passed to every call).
private final Context context;
private final Runnable callback; private final Runnable callback;
private ITrackRecordingService trackRecordingService; private ITrackRecordingService trackRecordingService;
@@ -62,29 +59,28 @@ public class TrackRecordingServiceConnection implements ServiceConnection, Death
* @param callback the callback to invoke when the service binding changes * @param callback the callback to invoke when the service binding changes
*/ */
public TrackRecordingServiceConnection(Context context, Runnable callback) { public TrackRecordingServiceConnection(Context context, Runnable callback) {
this.context = context;
this.callback = callback; this.callback = callback;
} }
/** /**
* Starts and binds the service. * Starts and binds the service.
*/ */
public void startAndBind() { public void startAndBind(Context context) {
bindService(true); bindService(context, true);
} }
/** /**
* Binds the service if it is started. * Binds the service if it is started.
*/ */
public void bindIfStarted() { public void bindIfStarted(Context context) {
bindService(false); bindService(context, false);
} }
/** /**
* Unbinds and stops the service. * Unbinds and stops the service.
*/ */
public void unbindAndStop() { public void unbindAndStop(Context context) {
unbind(); unbind(context);
context.stopService(new Intent(context, TrackRecordingService.class)); context.stopService(new Intent(context, TrackRecordingService.class));
} }
@@ -111,7 +107,7 @@ public class TrackRecordingServiceConnection implements ServiceConnection, Death
/** /**
* Unbinds the service (but leave it running). * Unbinds the service (but leave it running).
*/ */
public void unbind() { public void unbind(Context context) {
try { try {
context.unbindService(this); context.unbindService(this);
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
@@ -148,7 +144,7 @@ public class TrackRecordingServiceConnection implements ServiceConnection, Death
* *
* @param startIfNeeded start the service if needed * @param startIfNeeded start the service if needed
*/ */
private void bindService(boolean startIfNeeded) { private void bindService(Context context, boolean startIfNeeded) {
if (trackRecordingService != null) { if (trackRecordingService != null) {
// Service is already started and bound. // Service is already started and bound.
return; return;
@@ -175,7 +171,7 @@ public class TrackRecordingServiceConnection implements ServiceConnection, Death
* @param context the context * @param context the context
*/ */
public void startConnection(@NonNull Context context) { public void startConnection(@NonNull Context context) {
bindIfStarted(); bindIfStarted(context);
if (!ServiceUtils.isTrackRecordingServiceRunning(context)) { if (!ServiceUtils.isTrackRecordingServiceRunning(context)) {
resetRecordingState(context); resetRecordingState(context);
} }
@@ -266,6 +262,6 @@ public class TrackRecordingServiceConnection implements ServiceConnection, Death
Log.e(TAG, "Unable to stop recording.", e); Log.e(TAG, "Unable to stop recording.", e);
} }
} }
unbindAndStop(); unbindAndStop(context);
} }
} }