From da3dd29b8e44624a8222caea9067955f252ef5f8 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Wed, 7 Feb 2024 23:03:30 +0100 Subject: [PATCH] Bugfix: PublicAPI stop should not start TrackRecordingService in foreground. Actually, TrackRecordingService will start in foreground if needed. Fixes #1850. --- .../opentracks/publicapi/PublicApiTest.java | 56 +++++++++++++++++++ .../TrackRecordingServiceConnection.java | 6 +- 2 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 src/androidTest/java/de/dennisguse/opentracks/publicapi/PublicApiTest.java diff --git a/src/androidTest/java/de/dennisguse/opentracks/publicapi/PublicApiTest.java b/src/androidTest/java/de/dennisguse/opentracks/publicapi/PublicApiTest.java new file mode 100644 index 000000000..92960d1a4 --- /dev/null +++ b/src/androidTest/java/de/dennisguse/opentracks/publicapi/PublicApiTest.java @@ -0,0 +1,56 @@ +package de.dennisguse.opentracks.publicapi; + +import android.content.Context; + +import androidx.test.core.app.ApplicationProvider; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.filters.LargeTest; +import androidx.test.rule.GrantPermissionRule; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.TestUtil; +import de.dennisguse.opentracks.settings.PreferencesUtils; +import de.dennisguse.opentracks.util.IntentUtils; + +@LargeTest +@RunWith(AndroidJUnit4.class) +public class PublicApiTest { + + @Rule + public GrantPermissionRule mGrantPermissionRule = TestUtil.createGrantPermissionRule(); + + private final Context context = ApplicationProvider.getApplicationContext(); + + @Test + public void StartTest() { + PreferencesUtils.setBoolean(R.string.publicapi_enabled_key, true); + + context.startActivity(IntentUtils.newIntent(context, StartRecording.class)); + } + + @Test + public void StartStopTest() throws InterruptedException { + PreferencesUtils.setBoolean(R.string.publicapi_enabled_key, true); + + context.startActivity(IntentUtils.newIntent(context, StartRecording.class)); + + Thread.sleep(5000); + + context.startActivity(IntentUtils.newIntent(context, StopRecording.class)); + } + + @Test + public void StopAndWait() throws InterruptedException { + PreferencesUtils.setBoolean(R.string.publicapi_enabled_key, true); + + context.startActivity(IntentUtils.newIntent(context, StopRecording.class)); + + Thread.sleep(10000); + + //No ForegroundServiceDidNotStartInTimeException should be happening. + } +} \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceConnection.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceConnection.java index 8738ac7cd..ebf55b109 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceConnection.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceConnection.java @@ -26,7 +26,6 @@ import android.os.RemoteException; import android.util.Log; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import de.dennisguse.opentracks.BuildConfig; @@ -81,7 +80,8 @@ public class TrackRecordingServiceConnection { } Log.i(TAG, "Binding the service."); - int flags = BuildConfig.DEBUG ? Context.BIND_DEBUG_UNBIND : 0; + + int flags = Context.BIND_AUTO_CREATE + (BuildConfig.DEBUG ? Context.BIND_DEBUG_UNBIND : 0); context.bindService(new Intent(context, TrackRecordingService.class), serviceConnection, flags); } @@ -142,6 +142,6 @@ public class TrackRecordingServiceConnection { new TrackRecordingServiceConnection(withUnbind) .bind(context); - ContextCompat.startForegroundService(context, new Intent(context, TrackRecordingService.class)); + // ContextCompat.startForegroundService(context, new Intent(context, TrackRecordingService.class)); } }