From 926ed9ae231aa2491966511a9714c6d154cb829f Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Fri, 4 Feb 2022 20:15:42 +0200 Subject: [PATCH] In order to avoid observer missing events, post them at least 50ms apart --- .../com/tutpro/baresip/BaresipService.kt | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt index 572d3d82..d8594c2f 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt @@ -69,6 +69,8 @@ class BaresipService: Service() { private var hotSpotIsEnabled = false private var hotSpotAddresses = mapOf() private var mediaPlayer: MediaPlayer? = null + private val serviceEvents = mutableListOf>() + private var previousEvent: Long = 0 @SuppressLint("WakelockTimeout") override fun onCreate() { @@ -880,8 +882,23 @@ class BaresipService: Service() { } } } - serviceEvent.postValue(Event(ServiceEvent(newEvent ?: event, arrayListOf(uap, callp), - System.currentTimeMillis()))) + + // In order to avoid observer missing events, post them at least 50ms apart + val currentTime = System.currentTimeMillis() + val e = Event(ServiceEvent(newEvent ?: event, arrayListOf(uap, callp), currentTime)) + if (previousEvent + 50 > currentTime) { + val delay = previousEvent + 50 - currentTime + previousEvent = currentTime + delay + serviceEvents.add(e) + Timer().schedule(delay) { + if (serviceEvents.isNotEmpty()) + serviceEvent.postValue(serviceEvents.removeFirst()) + } + } else { + previousEvent = currentTime + serviceEvent.postValue(e) + } + } @SuppressLint("UnspecifiedImmutableFlag") @@ -1456,8 +1473,8 @@ class BaresipService: Service() { val chatTexts: MutableMap = mutableMapOf() val activities = mutableListOf() var dnsServers = listOf() - var serviceEvent = MutableLiveData>() + } init {