diff --git a/vector/src/main/java/im/vector/riotx/core/extensions/LiveData.kt b/vector/src/main/java/im/vector/riotx/core/extensions/LiveData.kt index a6ab57fe..a278eab0 100644 --- a/vector/src/main/java/im/vector/riotx/core/extensions/LiveData.kt +++ b/vector/src/main/java/im/vector/riotx/core/extensions/LiveData.kt @@ -19,7 +19,7 @@ package im.vector.riotx.core.extensions import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LiveData import androidx.lifecycle.Observer -import im.vector.riotx.core.utils.Debouncer +import im.vector.riotx.core.utils.FirstThrottler import im.vector.riotx.core.utils.EventObserver import im.vector.riotx.core.utils.LiveEvent @@ -35,11 +35,11 @@ inline fun LiveData>.observeEvent(owner: LifecycleOwner, crossi this.observe(owner, EventObserver { it.run(observer) }) } -inline fun LiveData>.observeEventDebounced(owner: LifecycleOwner, minimumInterval: Long, crossinline observer: (T) -> Unit) { - val debouncer = Debouncer(minimumInterval) +inline fun LiveData>.observeEventFirstThrottle(owner: LifecycleOwner, minimumInterval: Long, crossinline observer: (T) -> Unit) { + val firstThrottler = FirstThrottler(minimumInterval) this.observe(owner, EventObserver { - if (debouncer.canHandle()) { + if (firstThrottler.canHandle()) { it.run(observer) } }) diff --git a/vector/src/main/java/im/vector/riotx/core/utils/Debouncer.kt b/vector/src/main/java/im/vector/riotx/core/utils/FirstThrottler.kt similarity index 82% rename from vector/src/main/java/im/vector/riotx/core/utils/Debouncer.kt rename to vector/src/main/java/im/vector/riotx/core/utils/FirstThrottler.kt index 60e51ad2..eba0d0d6 100644 --- a/vector/src/main/java/im/vector/riotx/core/utils/Debouncer.kt +++ b/vector/src/main/java/im/vector/riotx/core/utils/FirstThrottler.kt @@ -17,9 +17,10 @@ package im.vector.riotx.core.utils /** - * Simple Debouncer + * Simple ThrottleFirst + * See https://raw.githubusercontent.com/wiki/ReactiveX/RxJava/images/rx-operators/throttleFirst.png */ -class Debouncer(private val minimumInterval: Long = 800) { +class FirstThrottler(private val minimumInterval: Long = 800) { private var lastDate = 0L fun canHandle(): Boolean { diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomListFragment.kt b/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomListFragment.kt index 07304ae3..b6e2e24a 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomListFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomListFragment.kt @@ -33,7 +33,7 @@ import im.vector.riotx.core.di.ScreenComponent import im.vector.riotx.core.epoxy.LayoutManagerStateRestorer import im.vector.riotx.core.error.ErrorFormatter import im.vector.riotx.core.extensions.observeEvent -import im.vector.riotx.core.extensions.observeEventDebounced +import im.vector.riotx.core.extensions.observeEventFirstThrottle import im.vector.riotx.core.platform.OnBackPressed import im.vector.riotx.core.platform.StateView import im.vector.riotx.core.platform.VectorBaseFragment @@ -81,7 +81,7 @@ class RoomListFragment : VectorBaseFragment(), RoomSummaryController.Listener, O setupCreateRoomButton() setupRecyclerView() roomListViewModel.subscribe { renderState(it) } - roomListViewModel.openRoomLiveData.observeEventDebounced(this, 800L) { + roomListViewModel.openRoomLiveData.observeEventFirstThrottle(this, 800L) { navigator.openRoom(requireActivity(), it) }