Stop location tracking only when callbacks list is empty to avoid non wanting stop
This commit is contained in:
parent
1b88cc39a9
commit
a1aa337edb
@ -205,7 +205,6 @@ class LocationSharingService : VectorService(), LocationTracker.Callback {
|
|||||||
|
|
||||||
private fun destroyMe() {
|
private fun destroyMe() {
|
||||||
locationTracker.removeCallback(this)
|
locationTracker.removeCallback(this)
|
||||||
locationTracker.stop()
|
|
||||||
timers.forEach { it.cancel() }
|
timers.forEach { it.cancel() }
|
||||||
timers.clear()
|
timers.clear()
|
||||||
stopSelf()
|
stopSelf()
|
||||||
|
@ -114,7 +114,6 @@ class LocationSharingViewModel @AssistedInject constructor(
|
|||||||
override fun onCleared() {
|
override fun onCleared() {
|
||||||
super.onCleared()
|
super.onCleared()
|
||||||
locationTracker.removeCallback(this)
|
locationTracker.removeCallback(this)
|
||||||
locationTracker.stop()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handle(action: LocationSharingAction) {
|
override fun handle(action: LocationSharingAction) {
|
||||||
|
@ -144,6 +144,9 @@ class LocationTracker @Inject constructor(
|
|||||||
|
|
||||||
fun removeCallback(callback: Callback) {
|
fun removeCallback(callback: Callback) {
|
||||||
callbacks.remove(callback)
|
callbacks.remove(callback)
|
||||||
|
if (callbacks.size == 0) {
|
||||||
|
stop()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onLocationChanged(location: Location) {
|
override fun onLocationChanged(location: Location) {
|
||||||
|
@ -123,16 +123,24 @@ class LocationTrackerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `when adding or removing a callback then it is added into or removed from the list of callbacks`() {
|
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.size shouldBeEqualTo 1
|
||||||
locationTracker.callbacks.first() shouldBeEqualTo callback
|
|
||||||
|
|
||||||
locationTracker.removeCallback(callback)
|
locationTracker.removeCallback(callback2)
|
||||||
|
|
||||||
locationTracker.callbacks.size shouldBeEqualTo 0
|
locationTracker.callbacks.size shouldBeEqualTo 0
|
||||||
|
verify { locationTracker.stop() }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
Loading…
Reference in New Issue
Block a user