diff --git a/stream-chat-android-compose/api/stream-chat-android-compose.api b/stream-chat-android-compose/api/stream-chat-android-compose.api index ab16848ae3b..481942080cf 100644 --- a/stream-chat-android-compose/api/stream-chat-android-compose.api +++ b/stream-chat-android-compose/api/stream-chat-android-compose.api @@ -5025,7 +5025,8 @@ public final class io/getstream/chat/android/compose/viewmodel/messages/MessageC public static synthetic fun buildNewMessage$default (Lio/getstream/chat/android/compose/viewmodel/messages/MessageComposerViewModel;Ljava/lang/String;Ljava/util/List;ILjava/lang/Object;)Lio/getstream/chat/android/models/Message; public final fun cancelRecording ()V public final fun clearData ()V - public final fun completeRecording ()V + public final fun completeRecording (Lkotlin/jvm/functions/Function1;)V + public static synthetic fun completeRecording$default (Lio/getstream/chat/android/compose/viewmodel/messages/MessageComposerViewModel;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V public final fun createPoll (Lio/getstream/chat/android/models/PollConfig;)V public final fun dismissMessageActions ()V public final fun getAlsoSendToChannel ()Lkotlinx/coroutines/flow/MutableStateFlow; diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/viewmodel/messages/MessageComposerViewModel.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/viewmodel/messages/MessageComposerViewModel.kt index afa40a466f2..ce5d1dce042 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/viewmodel/messages/MessageComposerViewModel.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/viewmodel/messages/MessageComposerViewModel.kt @@ -33,6 +33,7 @@ import io.getstream.chat.android.ui.common.state.messages.Reply import io.getstream.chat.android.ui.common.state.messages.composer.MessageComposerState import io.getstream.chat.android.ui.common.state.messages.composer.ValidationError import io.getstream.chat.android.ui.common.utils.typing.TypingUpdatesBuffer +import io.getstream.result.Result import io.getstream.result.call.Call import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow @@ -273,7 +274,8 @@ public class MessageComposerViewModel( public fun toggleRecordingPlayback(): Unit = messageComposerController.toggleRecordingPlayback() - public fun completeRecording(): Unit = messageComposerController.completeRecording() + public fun completeRecording(onComplete: ((Result) -> Unit)? = null): Unit = + messageComposerController.completeRecording(onComplete) public fun pauseRecording(): Unit = messageComposerController.pauseRecording() diff --git a/stream-chat-android-ui-common/src/main/kotlin/io/getstream/chat/android/ui/common/feature/messages/composer/MessageComposerController.kt b/stream-chat-android-ui-common/src/main/kotlin/io/getstream/chat/android/ui/common/feature/messages/composer/MessageComposerController.kt index 3a072d4b458..0f0e6c767f1 100644 --- a/stream-chat-android-ui-common/src/main/kotlin/io/getstream/chat/android/ui/common/feature/messages/composer/MessageComposerController.kt +++ b/stream-chat-android-ui-common/src/main/kotlin/io/getstream/chat/android/ui/common/feature/messages/composer/MessageComposerController.kt @@ -922,12 +922,23 @@ public class MessageComposerController( } /** - * Completes audio recording and moves [MessageComposerState.recording] state to [RecordingState.Complete]. - * Also, it wil update [MessageComposerState.attachments] list. + * Completes audio recording and updates the [MessageComposerState.attachments] list. + * + * @param onComplete Optional callback invoked with the result of the recording once the recording has been + * finalized. On success, the recorded [Attachment] is added to [selectedAttachments] before the callback + * is invoked, so callers can safely build and send a message using the received attachment. */ - public fun completeRecording() { + public fun completeRecording(onComplete: ((Result) -> Unit)? = null) { scope.launch { - audioRecordingController.completeRecording() + if (onComplete != null) { + val result = audioRecordingController.completeRecordingSync() + if (result is Result.Success) { + selectedAttachments.value += result.value + } + onComplete(result) + } else { + audioRecordingController.completeRecording() + } } } diff --git a/stream-chat-android-ui-components/api/stream-chat-android-ui-components.api b/stream-chat-android-ui-components/api/stream-chat-android-ui-components.api index 77c098e8f27..bea62fad715 100644 --- a/stream-chat-android-ui-components/api/stream-chat-android-ui-components.api +++ b/stream-chat-android-ui-components/api/stream-chat-android-ui-components.api @@ -4518,7 +4518,8 @@ public final class io/getstream/chat/android/ui/viewmodel/messages/MessageCompos public static synthetic fun buildNewMessage$default (Lio/getstream/chat/android/ui/viewmodel/messages/MessageComposerViewModel;Ljava/lang/String;Ljava/util/List;ILjava/lang/Object;)Lio/getstream/chat/android/models/Message; public final fun cancelRecording ()V public final fun clearData ()V - public final fun completeRecording ()V + public final fun completeRecording (Lkotlin/jvm/functions/Function1;)V + public static synthetic fun completeRecording$default (Lio/getstream/chat/android/ui/viewmodel/messages/MessageComposerViewModel;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V public final fun createPoll (Lio/getstream/chat/android/models/PollConfig;)V public final fun dismissMessageActions ()V public final fun dismissSuggestionsPopup ()V diff --git a/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/viewmodel/messages/MessageComposerViewModel.kt b/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/viewmodel/messages/MessageComposerViewModel.kt index ea0c8c41cd8..dbcb0132fa3 100644 --- a/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/viewmodel/messages/MessageComposerViewModel.kt +++ b/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/viewmodel/messages/MessageComposerViewModel.kt @@ -31,6 +31,7 @@ import io.getstream.chat.android.ui.common.state.messages.MessageMode import io.getstream.chat.android.ui.common.state.messages.Reply import io.getstream.chat.android.ui.common.state.messages.composer.MessageComposerState import io.getstream.chat.android.ui.common.state.messages.composer.ValidationError +import io.getstream.result.Result import io.getstream.result.call.Call import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow @@ -250,7 +251,8 @@ public class MessageComposerViewModel( public fun toggleRecordingPlayback(): Unit = messageComposerController.toggleRecordingPlayback() - public fun completeRecording(): Unit = messageComposerController.completeRecording() + public fun completeRecording(onComplete: ((Result) -> Unit)? = null): Unit = + messageComposerController.completeRecording(onComplete) public fun pauseRecording(): Unit = messageComposerController.pauseRecording()