mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-04 01:19:33 +00:00
Use produceState
This commit is contained in:
+8
-17
@@ -8,10 +8,9 @@
|
|||||||
package io.element.android.features.messages.impl.crypto.identity
|
package io.element.android.features.messages.impl.crypto.identity
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.ProduceStateScope
|
||||||
import androidx.compose.runtime.MutableState
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.produceState
|
||||||
import androidx.compose.runtime.remember
|
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
@@ -26,7 +25,6 @@ import kotlinx.collections.immutable.toPersistentList
|
|||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
import kotlinx.coroutines.flow.launchIn
|
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
@@ -39,12 +37,8 @@ class IdentityChangeStatePresenter @Inject constructor(
|
|||||||
@Composable
|
@Composable
|
||||||
override fun present(): IdentityChangeState {
|
override fun present(): IdentityChangeState {
|
||||||
val coroutineScope = rememberCoroutineScope()
|
val coroutineScope = rememberCoroutineScope()
|
||||||
val roomMemberIdentityStateChange = remember {
|
val roomMemberIdentityStateChange by produceState(persistentListOf()) {
|
||||||
mutableStateOf(persistentListOf<RoomMemberIdentityStateChange>())
|
observeRoomMemberIdentityStateChange()
|
||||||
}
|
|
||||||
|
|
||||||
LaunchedEffect(Unit) {
|
|
||||||
observeRoomMemberIdentityStateChange(roomMemberIdentityStateChange)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleEvent(event: IdentityChangeEvent) {
|
fun handleEvent(event: IdentityChangeEvent) {
|
||||||
@@ -54,14 +48,12 @@ class IdentityChangeStatePresenter @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return IdentityChangeState(
|
return IdentityChangeState(
|
||||||
roomMemberIdentityStateChanges = roomMemberIdentityStateChange.value,
|
roomMemberIdentityStateChanges = roomMemberIdentityStateChange,
|
||||||
eventSink = ::handleEvent,
|
eventSink = ::handleEvent,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun CoroutineScope.observeRoomMemberIdentityStateChange(
|
private fun ProduceStateScope<PersistentList<RoomMemberIdentityStateChange>>.observeRoomMemberIdentityStateChange() {
|
||||||
roomMemberIdentityStateChange: MutableState<PersistentList<RoomMemberIdentityStateChange>>
|
|
||||||
) {
|
|
||||||
combine(room.identityStateChangesFlow, room.membersStateFlow) { identityStateChanges, membersState ->
|
combine(room.identityStateChangesFlow, room.membersStateFlow) { identityStateChanges, membersState ->
|
||||||
identityStateChanges.map { identityStateChange ->
|
identityStateChanges.map { identityStateChange ->
|
||||||
val member = membersState.roomMembers()
|
val member = membersState.roomMembers()
|
||||||
@@ -75,9 +67,8 @@ class IdentityChangeStatePresenter @Inject constructor(
|
|||||||
}
|
}
|
||||||
.distinctUntilChanged()
|
.distinctUntilChanged()
|
||||||
.onEach { roomMemberIdentityStateChanges ->
|
.onEach { roomMemberIdentityStateChanges ->
|
||||||
roomMemberIdentityStateChange.value = roomMemberIdentityStateChanges.toPersistentList()
|
value = roomMemberIdentityStateChanges.toPersistentList()
|
||||||
}
|
}
|
||||||
.launchIn(this)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun CoroutineScope.pinUserIdentity(userId: UserId) = launch {
|
private fun CoroutineScope.pinUserIdentity(userId: UserId) = launch {
|
||||||
|
|||||||
Reference in New Issue
Block a user