From e752da70fb3354dc2f8cd44a3a4add9bafbe60fa Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 25 Nov 2024 17:18:07 +0100 Subject: [PATCH] Close the progress dialog when the treatment is over (avoid UI glitch) --- .../preview/AttachmentsPreviewPresenter.kt | 6 ++++++ .../attachments/preview/AttachmentsPreviewState.kt | 1 + .../attachments/AttachmentsPreviewPresenterTest.kt | 13 +++++++------ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewPresenter.kt index c447e2ce5b..a4482514b7 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewPresenter.kt @@ -131,6 +131,7 @@ class AttachmentsPreviewPresenter @AssistedInject constructor( attachment, prePropressingJob, mediaUploadInfoStateFlow.value, + sendActionState, ) } AttachmentsPreviewEvents.ClearSendState -> { @@ -192,6 +193,7 @@ class AttachmentsPreviewPresenter @AssistedInject constructor( attachment: Attachment, preProcessingJob: Job?, mediaUploadInfo: AsyncData, + sendActionState: MutableState, ) = launch { // Delete the temporary file when (attachment) { @@ -203,6 +205,8 @@ class AttachmentsPreviewPresenter @AssistedInject constructor( } } } + // Reset the sendActionState to ensure that dialog is closed before the screen + sendActionState.value = SendActionState.Done onDoneListener() } @@ -236,6 +240,8 @@ class AttachmentsPreviewPresenter @AssistedInject constructor( }.fold( onSuccess = { cleanUp(mediaUploadInfo) + // Reset the sendActionState to ensure that dialog is closed before the screen + sendActionState.value = SendActionState.Done onDoneListener() }, onFailure = { error -> diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewState.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewState.kt index 5d5f058375..0e9724c460 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewState.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewState.kt @@ -33,4 +33,5 @@ sealed interface SendActionState { } data class Failure(val error: Throwable) : SendActionState + data object Done : SendActionState } diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/attachments/AttachmentsPreviewPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/attachments/AttachmentsPreviewPresenterTest.kt index b1c2fbfcd6..204a5b5b76 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/attachments/AttachmentsPreviewPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/attachments/AttachmentsPreviewPresenterTest.kt @@ -92,7 +92,7 @@ class AttachmentsPreviewPresenterTest { assertThat(awaitItem().sendActionState).isEqualTo(SendActionState.Sending.Uploading(0f)) assertThat(awaitItem().sendActionState).isEqualTo(SendActionState.Sending.Uploading(0.5f)) assertThat(awaitItem().sendActionState).isEqualTo(SendActionState.Sending.Uploading(1f)) - advanceUntilIdle() + assertThat(awaitItem().sendActionState).isEqualTo(SendActionState.Done) sendFileResult.assertions().isCalledOnce() onDoneListener.assertions().isCalledOnce() } @@ -125,7 +125,7 @@ class AttachmentsPreviewPresenterTest { advanceUntilIdle() initialState.eventSink(AttachmentsPreviewEvents.SendAttachment) assertThat(awaitItem().sendActionState).isEqualTo(SendActionState.Sending.InstantSending) - advanceUntilIdle() + assertThat(awaitItem().sendActionState).isEqualTo(SendActionState.Done) sendFileResult.assertions().isCalledOnce() onDoneListener.assertions().isCalledOnce() } @@ -157,7 +157,7 @@ class AttachmentsPreviewPresenterTest { assertThat(awaitItem().sendActionState).isEqualTo(SendActionState.Sending.Processing) // Pre-processing finishes processLatch.complete(Unit) - advanceUntilIdle() + assertThat(awaitItem().sendActionState).isEqualTo(SendActionState.Done) sendFileResult.assertions().isCalledOnce() onDoneListener.assertions().isCalledOnce() } @@ -227,6 +227,7 @@ class AttachmentsPreviewPresenterTest { val initialState = awaitItem() assertThat(initialState.sendActionState).isEqualTo(SendActionState.Idle) initialState.eventSink(AttachmentsPreviewEvents.Cancel) + assertThat(awaitItem().sendActionState).isEqualTo(SendActionState.Done) deleteCallback.assertions().isCalledOnce() onDoneListener.assertions().isCalledOnce() } @@ -258,7 +259,7 @@ class AttachmentsPreviewPresenterTest { initialState.textEditorState.setMarkdown(A_CAPTION) initialState.eventSink(AttachmentsPreviewEvents.SendAttachment) assertThat(awaitItem().sendActionState).isEqualTo(SendActionState.Sending.Processing) - advanceUntilIdle() + assertThat(awaitItem().sendActionState).isEqualTo(SendActionState.Done) sendImageResult.assertions().isCalledOnce().with( any(), any(), @@ -297,7 +298,7 @@ class AttachmentsPreviewPresenterTest { initialState.textEditorState.setMarkdown(A_CAPTION) initialState.eventSink(AttachmentsPreviewEvents.SendAttachment) assertThat(awaitItem().sendActionState).isEqualTo(SendActionState.Sending.Processing) - advanceUntilIdle() + assertThat(awaitItem().sendActionState).isEqualTo(SendActionState.Done) sendVideoResult.assertions().isCalledOnce().with( any(), any(), @@ -334,7 +335,7 @@ class AttachmentsPreviewPresenterTest { initialState.textEditorState.setMarkdown(A_CAPTION) initialState.eventSink(AttachmentsPreviewEvents.SendAttachment) assertThat(awaitItem().sendActionState).isEqualTo(SendActionState.Sending.Processing) - advanceUntilIdle() + assertThat(awaitItem().sendActionState).isEqualTo(SendActionState.Done) sendAudioResult.assertions().isCalledOnce().with( any(), any(),