diff --git a/vector/src/main/java/im/vector/app/features/location/LocationSharingService.kt b/vector/src/main/java/im/vector/app/features/location/LocationSharingService.kt index 73a86fd04e..62aba9318c 100644 --- a/vector/src/main/java/im/vector/app/features/location/LocationSharingService.kt +++ b/vector/src/main/java/im/vector/app/features/location/LocationSharingService.kt @@ -205,7 +205,6 @@ class LocationSharingService : VectorService(), LocationTracker.Callback { private fun destroyMe() { locationTracker.removeCallback(this) - locationTracker.stop() timers.forEach { it.cancel() } timers.clear() stopSelf() diff --git a/vector/src/main/java/im/vector/app/features/location/LocationSharingViewModel.kt b/vector/src/main/java/im/vector/app/features/location/LocationSharingViewModel.kt index f049a9400a..71f59c6fdf 100644 --- a/vector/src/main/java/im/vector/app/features/location/LocationSharingViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/location/LocationSharingViewModel.kt @@ -114,7 +114,6 @@ class LocationSharingViewModel @AssistedInject constructor( override fun onCleared() { super.onCleared() locationTracker.removeCallback(this) - locationTracker.stop() } override fun handle(action: LocationSharingAction) { diff --git a/vector/src/main/java/im/vector/app/features/location/LocationTracker.kt b/vector/src/main/java/im/vector/app/features/location/LocationTracker.kt index c900fc7db5..63508f30d7 100644 --- a/vector/src/main/java/im/vector/app/features/location/LocationTracker.kt +++ b/vector/src/main/java/im/vector/app/features/location/LocationTracker.kt @@ -144,6 +144,9 @@ class LocationTracker @Inject constructor( fun removeCallback(callback: Callback) { callbacks.remove(callback) + if (callbacks.size == 0) { + stop() + } } override fun onLocationChanged(location: Location) { diff --git a/vector/src/test/java/im/vector/app/features/location/LocationTrackerTest.kt b/vector/src/test/java/im/vector/app/features/location/LocationTrackerTest.kt index 409647a813..0a04644856 100644 --- a/vector/src/test/java/im/vector/app/features/location/LocationTrackerTest.kt +++ b/vector/src/test/java/im/vector/app/features/location/LocationTrackerTest.kt @@ -123,16 +123,24 @@ class LocationTrackerTest { @Test fun `when adding or removing a callback then it is added into or removed from the list of callbacks`() { - val callback = mockCallback() + val callback1 = mockCallback() + val callback2 = mockCallback() - locationTracker.addCallback(callback) + locationTracker.addCallback(callback1) + locationTracker.addCallback(callback2) + + locationTracker.callbacks.size shouldBeEqualTo 2 + locationTracker.callbacks.first() shouldBeEqualTo callback1 + locationTracker.callbacks[1] shouldBeEqualTo callback2 + + locationTracker.removeCallback(callback1) locationTracker.callbacks.size shouldBeEqualTo 1 - locationTracker.callbacks.first() shouldBeEqualTo callback - locationTracker.removeCallback(callback) + locationTracker.removeCallback(callback2) locationTracker.callbacks.size shouldBeEqualTo 0 + verify { locationTracker.stop() } } @Test