Skip to content

Commit 0f268bd

Browse files
VelikovPetarclaude
andauthored
Expose optional completion callback for audio recording (#6290)
Co-authored-by: Claude <noreply@anthropic.com>
1 parent 45c9f28 commit 0f268bd

5 files changed

Lines changed: 25 additions & 8 deletions

File tree

stream-chat-android-compose/api/stream-chat-android-compose.api

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5025,7 +5025,8 @@ public final class io/getstream/chat/android/compose/viewmodel/messages/MessageC
50255025
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;
50265026
public final fun cancelRecording ()V
50275027
public final fun clearData ()V
5028-
public final fun completeRecording ()V
5028+
public final fun completeRecording (Lkotlin/jvm/functions/Function1;)V
5029+
public static synthetic fun completeRecording$default (Lio/getstream/chat/android/compose/viewmodel/messages/MessageComposerViewModel;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
50295030
public final fun createPoll (Lio/getstream/chat/android/models/PollConfig;)V
50305031
public final fun dismissMessageActions ()V
50315032
public final fun getAlsoSendToChannel ()Lkotlinx/coroutines/flow/MutableStateFlow;

stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/viewmodel/messages/MessageComposerViewModel.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import io.getstream.chat.android.ui.common.state.messages.Reply
3333
import io.getstream.chat.android.ui.common.state.messages.composer.MessageComposerState
3434
import io.getstream.chat.android.ui.common.state.messages.composer.ValidationError
3535
import io.getstream.chat.android.ui.common.utils.typing.TypingUpdatesBuffer
36+
import io.getstream.result.Result
3637
import io.getstream.result.call.Call
3738
import kotlinx.coroutines.flow.Flow
3839
import kotlinx.coroutines.flow.MutableStateFlow
@@ -273,7 +274,8 @@ public class MessageComposerViewModel(
273274

274275
public fun toggleRecordingPlayback(): Unit = messageComposerController.toggleRecordingPlayback()
275276

276-
public fun completeRecording(): Unit = messageComposerController.completeRecording()
277+
public fun completeRecording(onComplete: ((Result<Attachment>) -> Unit)? = null): Unit =
278+
messageComposerController.completeRecording(onComplete)
277279

278280
public fun pauseRecording(): Unit = messageComposerController.pauseRecording()
279281

stream-chat-android-ui-common/src/main/kotlin/io/getstream/chat/android/ui/common/feature/messages/composer/MessageComposerController.kt

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -922,12 +922,23 @@ public class MessageComposerController(
922922
}
923923

924924
/**
925-
* Completes audio recording and moves [MessageComposerState.recording] state to [RecordingState.Complete].
926-
* Also, it wil update [MessageComposerState.attachments] list.
925+
* Completes audio recording and updates the [MessageComposerState.attachments] list.
926+
*
927+
* @param onComplete Optional callback invoked with the result of the recording once the recording has been
928+
* finalized. On success, the recorded [Attachment] is added to [selectedAttachments] before the callback
929+
* is invoked, so callers can safely build and send a message using the received attachment.
927930
*/
928-
public fun completeRecording() {
931+
public fun completeRecording(onComplete: ((Result<Attachment>) -> Unit)? = null) {
929932
scope.launch {
930-
audioRecordingController.completeRecording()
933+
if (onComplete != null) {
934+
val result = audioRecordingController.completeRecordingSync()
935+
if (result is Result.Success) {
936+
selectedAttachments.value += result.value
937+
}
938+
onComplete(result)
939+
} else {
940+
audioRecordingController.completeRecording()
941+
}
931942
}
932943
}
933944

stream-chat-android-ui-components/api/stream-chat-android-ui-components.api

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4518,7 +4518,8 @@ public final class io/getstream/chat/android/ui/viewmodel/messages/MessageCompos
45184518
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;
45194519
public final fun cancelRecording ()V
45204520
public final fun clearData ()V
4521-
public final fun completeRecording ()V
4521+
public final fun completeRecording (Lkotlin/jvm/functions/Function1;)V
4522+
public static synthetic fun completeRecording$default (Lio/getstream/chat/android/ui/viewmodel/messages/MessageComposerViewModel;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
45224523
public final fun createPoll (Lio/getstream/chat/android/models/PollConfig;)V
45234524
public final fun dismissMessageActions ()V
45244525
public final fun dismissSuggestionsPopup ()V

stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/viewmodel/messages/MessageComposerViewModel.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import io.getstream.chat.android.ui.common.state.messages.MessageMode
3131
import io.getstream.chat.android.ui.common.state.messages.Reply
3232
import io.getstream.chat.android.ui.common.state.messages.composer.MessageComposerState
3333
import io.getstream.chat.android.ui.common.state.messages.composer.ValidationError
34+
import io.getstream.result.Result
3435
import io.getstream.result.call.Call
3536
import kotlinx.coroutines.flow.Flow
3637
import kotlinx.coroutines.flow.MutableStateFlow
@@ -250,7 +251,8 @@ public class MessageComposerViewModel(
250251

251252
public fun toggleRecordingPlayback(): Unit = messageComposerController.toggleRecordingPlayback()
252253

253-
public fun completeRecording(): Unit = messageComposerController.completeRecording()
254+
public fun completeRecording(onComplete: ((Result<Attachment>) -> Unit)? = null): Unit =
255+
messageComposerController.completeRecording(onComplete)
254256

255257
public fun pauseRecording(): Unit = messageComposerController.pauseRecording()
256258

0 commit comments

Comments
 (0)