88package io.element.android.features.messages.impl.crypto.identity
99
1010import androidx.compose.runtime.Composable
11- import androidx.compose.runtime.LaunchedEffect
12- import androidx.compose.runtime.MutableState
13- import androidx.compose.runtime.mutableStateOf
14- import androidx.compose.runtime.remember
11+ import androidx.compose.runtime.ProduceStateScope
12+ import androidx.compose.runtime.getValue
13+ import androidx.compose.runtime.produceState
1514import androidx.compose.runtime.rememberCoroutineScope
1615import io.element.android.libraries.architecture.Presenter
1716import io.element.android.libraries.matrix.api.core.UserId
@@ -26,7 +25,6 @@ import kotlinx.collections.immutable.toPersistentList
2625import kotlinx.coroutines.CoroutineScope
2726import kotlinx.coroutines.flow.combine
2827import kotlinx.coroutines.flow.distinctUntilChanged
29- import kotlinx.coroutines.flow.launchIn
3028import kotlinx.coroutines.flow.onEach
3129import kotlinx.coroutines.launch
3230import timber.log.Timber
@@ -39,12 +37,8 @@ class IdentityChangeStatePresenter @Inject constructor(
3937 @Composable
4038 override fun present (): IdentityChangeState {
4139 val coroutineScope = rememberCoroutineScope()
42- val roomMemberIdentityStateChange = remember {
43- mutableStateOf(persistentListOf<RoomMemberIdentityStateChange >())
44- }
45-
46- LaunchedEffect (Unit ) {
47- observeRoomMemberIdentityStateChange(roomMemberIdentityStateChange)
40+ val roomMemberIdentityStateChange by produceState(persistentListOf()) {
41+ observeRoomMemberIdentityStateChange()
4842 }
4943
5044 fun handleEvent (event : IdentityChangeEvent ) {
@@ -54,14 +48,12 @@ class IdentityChangeStatePresenter @Inject constructor(
5448 }
5549
5650 return IdentityChangeState (
57- roomMemberIdentityStateChanges = roomMemberIdentityStateChange.value ,
51+ roomMemberIdentityStateChanges = roomMemberIdentityStateChange,
5852 eventSink = ::handleEvent,
5953 )
6054 }
6155
62- private fun CoroutineScope.observeRoomMemberIdentityStateChange (
63- roomMemberIdentityStateChange : MutableState <PersistentList <RoomMemberIdentityStateChange >>
64- ) {
56+ private fun ProduceStateScope<PersistentList<RoomMemberIdentityStateChange>>.observeRoomMemberIdentityStateChange () {
6557 combine(room.identityStateChangesFlow, room.membersStateFlow) { identityStateChanges, membersState ->
6658 identityStateChanges.map { identityStateChange ->
6759 val member = membersState.roomMembers()
@@ -75,9 +67,8 @@ class IdentityChangeStatePresenter @Inject constructor(
7567 }
7668 .distinctUntilChanged()
7769 .onEach { roomMemberIdentityStateChanges ->
78- roomMemberIdentityStateChange. value = roomMemberIdentityStateChanges.toPersistentList()
70+ value = roomMemberIdentityStateChanges.toPersistentList()
7971 }
80- .launchIn(this )
8172 }
8273
8374 private fun CoroutineScope.pinUserIdentity (userId : UserId ) = launch {
0 commit comments