From 291983f6bcc78ad222fd3efb68adf6682d4845bc Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 16:15:36 +0200 Subject: [PATCH] Use produceState and fetch profile only if necessary. --- .../details/RoomMemberDetailsPresenter.kt | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsPresenter.kt index 5c98a048ff..dcb953e978 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsPresenter.kt @@ -21,6 +21,7 @@ import androidx.compose.runtime.LaunchedEffect 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.setValue @@ -74,9 +75,10 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( // Update room member info when opening this screen // We don't need to assign the result as it will be automatically propagated by `room.getRoomMemberAsState` room.getUpdatedMember(roomMemberId) - } - LaunchedEffect(Unit) { - userProfile = client.getProfile(roomMemberId).getOrNull() + .onFailure { + // Not a member of the room, try to get the user profile + userProfile = client.getProfile(roomMemberId).getOrNull() + } } fun handleEvents(event: RoomMemberDetailsEvents) { @@ -112,9 +114,12 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( } } - var userName: String? by remember { mutableStateOf(roomMember?.displayName ?: userProfile?.displayName) } - LaunchedEffect(roomMember, userProfile) { - userName = room.userDisplayName(roomMemberId) + val userName: String? by produceState( + initialValue = roomMember?.displayName ?: userProfile?.displayName, + key1 = roomMember, + key2 = userProfile, + ) { + value = room.userDisplayName(roomMemberId) .fold( onSuccess = { it }, onFailure = { @@ -124,9 +129,12 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( ) } - var userAvatar: String? by remember { mutableStateOf(roomMember?.avatarUrl ?: userProfile?.avatarUrl) } - LaunchedEffect(roomMember, userProfile) { - userAvatar = room.userAvatarUrl(roomMemberId) + val userAvatar: String? by produceState( + initialValue = roomMember?.avatarUrl ?: userProfile?.avatarUrl, + key1 = roomMember, + key2 = userProfile, + ) { + value = room.userAvatarUrl(roomMemberId) .fold( onSuccess = { it }, onFailure = {