From 4f7d26eef06a3eff26c2658b3e09be974af12d5d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Jan 2024 12:12:52 +0100 Subject: [PATCH 1/4] Cleanup: no need to provide a `CurrentSessionIdHolder`, the sessionId can be retrieved from the room. --- .../android/features/messages/impl/MessagesPresenter.kt | 8 +++----- .../features/messages/impl/MessagesPresenterTest.kt | 2 -- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt index 262f6cc6b2..f5d7246810 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt @@ -81,7 +81,6 @@ import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState import io.element.android.libraries.matrix.api.room.MessageEventType -import io.element.android.libraries.matrix.api.user.CurrentSessionIdHolder import io.element.android.libraries.matrix.ui.components.AttachmentThumbnailInfo import io.element.android.libraries.matrix.ui.components.AttachmentThumbnailType import io.element.android.libraries.matrix.ui.room.canRedactOtherAsState @@ -113,7 +112,6 @@ class MessagesPresenter @AssistedInject constructor( private val htmlConverterProvider: HtmlConverterProvider, @Assisted private val navigator: MessagesNavigator, private val buildMeta: BuildMeta, - private val currentSessionIdHolder: CurrentSessionIdHolder, ) : Presenter { private val timelinePresenter = timelinePresenterFactory.create(navigator = navigator) @@ -124,7 +122,7 @@ class MessagesPresenter @AssistedInject constructor( @Composable override fun present(): MessagesState { - htmlConverterProvider.Update(currentUserId = currentSessionIdHolder.current) + htmlConverterProvider.Update(currentUserId = room.sessionId) val roomInfo by room.roomInfoFlow.collectAsState(null) val localCoroutineScope = rememberCoroutineScope() @@ -157,9 +155,9 @@ class MessagesPresenter @AssistedInject constructor( mutableStateOf(false) } - LaunchedEffect(currentSessionIdHolder.current) { + LaunchedEffect(Unit) { withContext(dispatchers.io) { - canJoinCall = room.canUserJoinCall(userId = currentSessionIdHolder.current).getOrDefault(false) + canJoinCall = room.canUserJoinCall(room.sessionId).getOrDefault(false) } } diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt index 08eaf15f7b..1c10cb97e8 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt @@ -665,7 +665,6 @@ class MessagesPresenterTest { clipboardHelper: FakeClipboardHelper = FakeClipboardHelper(), analyticsService: FakeAnalyticsService = FakeAnalyticsService(), permissionsPresenter: PermissionsPresenter = FakePermissionsPresenter(), - currentSessionIdHolder: CurrentSessionIdHolder = CurrentSessionIdHolder(FakeMatrixClient(A_SESSION_ID)), ): MessagesPresenter { val mediaSender = MediaSender(FakeMediaPreProcessor(), matrixRoom) val permissionsPresenterFactory = FakePermissionsPresenterFactory(permissionsPresenter) @@ -736,7 +735,6 @@ class MessagesPresenterTest { featureFlagsService = FakeFeatureFlagService(), buildMeta = aBuildMeta(), dispatchers = coroutineDispatchers, - currentSessionIdHolder = currentSessionIdHolder, htmlConverterProvider = FakeHtmlConverterProvider(), ) } From 96bae05184bcf22b2036428834ffd459a9d650c5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Jan 2024 12:13:13 +0100 Subject: [PATCH 2/4] Remove useless `suspend` modifier. --- .../element/android/features/messages/impl/MessagesPresenter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt index f5d7246810..13a0fcb00b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt @@ -313,7 +313,7 @@ class MessagesPresenter @AssistedInject constructor( } } - private suspend fun handleActionEdit( + private fun handleActionEdit( targetEvent: TimelineItem.Event, composerState: MessageComposerState, enableTextFormatting: Boolean, From 6406477fef3d46b3346a9a415cb00e5b975ffaef Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Jan 2024 12:15:14 +0100 Subject: [PATCH 3/4] Ensure that `canUserJoinCall` is "live" --- .../element/android/features/messages/impl/MessagesPresenter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt index 13a0fcb00b..6ae5be0621 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt @@ -155,7 +155,7 @@ class MessagesPresenter @AssistedInject constructor( mutableStateOf(false) } - LaunchedEffect(Unit) { + LaunchedEffect(syncUpdateFlow) { withContext(dispatchers.io) { canJoinCall = room.canUserJoinCall(room.sessionId).getOrDefault(false) } From 05cc526be98f08f4560c6a1795c091996bbcd2e6 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 30 Jan 2024 10:19:53 +0100 Subject: [PATCH 4/4] Fix: ensure the effect is restarted on each sync update. --- .../android/features/messages/impl/MessagesPresenter.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt index 6ae5be0621..d378014e2f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt @@ -155,7 +155,7 @@ class MessagesPresenter @AssistedInject constructor( mutableStateOf(false) } - LaunchedEffect(syncUpdateFlow) { + LaunchedEffect(syncUpdateFlow.value) { withContext(dispatchers.io) { canJoinCall = room.canUserJoinCall(room.sessionId).getOrDefault(false) } @@ -163,7 +163,7 @@ class MessagesPresenter @AssistedInject constructor( val inviteProgress = remember { mutableStateOf>(AsyncData.Uninitialized) } var showReinvitePrompt by remember { mutableStateOf(false) } - LaunchedEffect(hasDismissedInviteDialog, composerState.hasFocus, syncUpdateFlow) { + LaunchedEffect(hasDismissedInviteDialog, composerState.hasFocus, syncUpdateFlow.value) { withContext(dispatchers.io) { showReinvitePrompt = !hasDismissedInviteDialog && composerState.hasFocus && room.isDirect && room.activeMemberCount == 1L }