diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListNode.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListNode.kt index 64ed13bf96..72983da1a8 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListNode.kt +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListNode.kt @@ -31,7 +31,7 @@ class RoomListNode @AssistedInject constructor( fun onRoomClicked(roomId: RoomId) } - private val connector = presenterConnector(presenter) + private val connector by presenterConnector(presenter) private fun updateFilter(filter: String) { connector.emitEvent(RoomListEvents.UpdateFilter(filter)) diff --git a/libraries/architecture/src/main/java/io/element/android/x/architecture/NodePresenterConnector.kt b/libraries/architecture/src/main/java/io/element/android/x/architecture/LifecyclePresenterConnector.kt similarity index 56% rename from libraries/architecture/src/main/java/io/element/android/x/architecture/NodePresenterConnector.kt rename to libraries/architecture/src/main/java/io/element/android/x/architecture/LifecyclePresenterConnector.kt index e451d7c2e4..dcca215f07 100644 --- a/libraries/architecture/src/main/java/io/element/android/x/architecture/NodePresenterConnector.kt +++ b/libraries/architecture/src/main/java/io/element/android/x/architecture/LifecyclePresenterConnector.kt @@ -1,21 +1,21 @@ package io.element.android.x.architecture +import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import app.cash.molecule.AndroidUiDispatcher import app.cash.molecule.RecompositionClock import app.cash.molecule.launchMolecule -import com.bumble.appyx.core.node.Node import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.StateFlow -inline fun Node.presenterConnector(presenter: Presenter): NodePresenterConnector { - return NodePresenterConnector(node = this, presenter = presenter) +inline fun LifecycleOwner.presenterConnector(presenter: Presenter): Lazy> = lazy { + LifecyclePresenterConnector(lifecycleOwner = this, presenter = presenter) } -class NodePresenterConnector(private val node: Node, presenter: Presenter) { +class LifecyclePresenterConnector(lifecycleOwner: LifecycleOwner, presenter: Presenter) { - private val moleculeScope = CoroutineScope(node.lifecycleScope.coroutineContext + AndroidUiDispatcher.Main) + private val moleculeScope = CoroutineScope(lifecycleOwner.lifecycleScope.coroutineContext + AndroidUiDispatcher.Main) private val eventFlow: MutableSharedFlow = MutableSharedFlow(extraBufferCapacity = 64) val stateFlow: StateFlow = moleculeScope.launchMolecule(RecompositionClock.ContextClock) {