Skip to content

Commit 189fbe9

Browse files
committed
Use produceState
1 parent 84fd25c commit 189fbe9

File tree

1 file changed

+8
-17
lines changed

1 file changed

+8
-17
lines changed

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/IdentityChangeStatePresenter.kt

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@
88
package io.element.android.features.messages.impl.crypto.identity
99

1010
import 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
1514
import androidx.compose.runtime.rememberCoroutineScope
1615
import io.element.android.libraries.architecture.Presenter
1716
import io.element.android.libraries.matrix.api.core.UserId
@@ -26,7 +25,6 @@ import kotlinx.collections.immutable.toPersistentList
2625
import kotlinx.coroutines.CoroutineScope
2726
import kotlinx.coroutines.flow.combine
2827
import kotlinx.coroutines.flow.distinctUntilChanged
29-
import kotlinx.coroutines.flow.launchIn
3028
import kotlinx.coroutines.flow.onEach
3129
import kotlinx.coroutines.launch
3230
import 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

Comments
 (0)