Update how eventSink is used in DefaultVoiceMessageComposerPresenter

This commit is contained in:
Benoit Marty 2025-11-07 12:18:47 +01:00
parent a8cfeb4f8d
commit 4283fe8634

View file

@ -68,7 +68,6 @@ class DefaultVoiceMessageComposerPresenter(
} }
private val permissionsPresenter = permissionsPresenterFactory.create(Manifest.permission.RECORD_AUDIO) private val permissionsPresenter = permissionsPresenterFactory.create(Manifest.permission.RECORD_AUDIO)
private val mediaSender = mediaSenderFactory.create(timelineMode) private val mediaSender = mediaSenderFactory.create(timelineMode)
@Composable @Composable
@ -88,7 +87,7 @@ class DefaultVoiceMessageComposerPresenter(
player.setMedia(recording.file.path) player.setMedia(recording.file.path)
} }
val onLifecycleEvent = { event: Lifecycle.Event -> fun handleLifecycleEvent(event: Lifecycle.Event) {
when (event) { when (event) {
Lifecycle.Event.ON_PAUSE -> { Lifecycle.Event.ON_PAUSE -> {
sessionCoroutineScope.finishRecording() sessionCoroutineScope.finishRecording()
@ -101,13 +100,12 @@ class DefaultVoiceMessageComposerPresenter(
} }
} }
val onVoiceMessageRecorderEvent = { event: VoiceMessageComposerEvents.RecorderEvent -> fun handleVoiceMessageRecorderEvent(event: VoiceMessageRecorderEvent) {
val permissionGranted = permissionState.permissionGranted when (event) {
when (event.recorderEvent) {
VoiceMessageRecorderEvent.Start -> { VoiceMessageRecorderEvent.Start -> {
Timber.v("Voice message record button pressed") Timber.v("Voice message record button pressed")
when { when {
permissionGranted -> { permissionState.permissionGranted -> {
localCoroutineScope.startRecording() localCoroutineScope.startRecording()
} }
else -> { else -> {
@ -126,7 +124,8 @@ class DefaultVoiceMessageComposerPresenter(
} }
} }
} }
val onPlayerEvent = { event: VoiceMessagePlayerEvent ->
fun handleVoiceMessagePlayerEvent(event: VoiceMessagePlayerEvent) {
localCoroutineScope.launch { localCoroutineScope.launch {
when (event) { when (event) {
VoiceMessagePlayerEvent.Play -> player.play() VoiceMessagePlayerEvent.Play -> player.play()
@ -136,28 +135,16 @@ class DefaultVoiceMessageComposerPresenter(
} }
} }
val onAcceptPermissionsRationale = { fun sendVoiceMessage() {
permissionState.eventSink(PermissionsEvents.OpenSystemSettingAndCloseDialog)
}
val onDismissPermissionsRationale = {
permissionState.eventSink(PermissionsEvents.CloseDialog)
}
val onDismissSendFailureDialog = {
showSendFailureDialog = false
}
val onSendButtonPress = lambda@{
val finishedState = recorderState as? VoiceRecorderState.Finished val finishedState = recorderState as? VoiceRecorderState.Finished
if (finishedState == null) { if (finishedState == null) {
val exception = VoiceMessageException.FileException("No file to send") val exception = VoiceMessageException.FileException("No file to send")
analyticsService.trackError(exception) analyticsService.trackError(exception)
Timber.e(exception) Timber.e(exception)
return@lambda return
} }
if (isSending) { if (isSending) {
return@lambda return
} }
isSending = true isSending = true
player.pause() player.pause()
@ -176,21 +163,27 @@ class DefaultVoiceMessageComposerPresenter(
} }
} }
val handleEvents: (VoiceMessageComposerEvents) -> Unit = { event -> fun handleEvent(event: VoiceMessageComposerEvents) {
when (event) { when (event) {
is VoiceMessageComposerEvents.RecorderEvent -> onVoiceMessageRecorderEvent(event) is VoiceMessageComposerEvents.RecorderEvent -> handleVoiceMessageRecorderEvent(event.recorderEvent)
is VoiceMessageComposerEvents.PlayerEvent -> onPlayerEvent(event.playerEvent) is VoiceMessageComposerEvents.PlayerEvent -> handleVoiceMessagePlayerEvent(event.playerEvent)
is VoiceMessageComposerEvents.SendVoiceMessage -> localCoroutineScope.launch { is VoiceMessageComposerEvents.SendVoiceMessage -> localCoroutineScope.launch {
onSendButtonPress() sendVoiceMessage()
} }
VoiceMessageComposerEvents.DeleteVoiceMessage -> { VoiceMessageComposerEvents.DeleteVoiceMessage -> {
player.pause() player.pause()
localCoroutineScope.deleteRecording() localCoroutineScope.deleteRecording()
} }
VoiceMessageComposerEvents.DismissPermissionsRationale -> onDismissPermissionsRationale() VoiceMessageComposerEvents.DismissPermissionsRationale -> {
VoiceMessageComposerEvents.AcceptPermissionRationale -> onAcceptPermissionsRationale() permissionState.eventSink(PermissionsEvents.CloseDialog)
is VoiceMessageComposerEvents.LifecycleEvent -> onLifecycleEvent(event.event) }
VoiceMessageComposerEvents.DismissSendFailureDialog -> onDismissSendFailureDialog() VoiceMessageComposerEvents.AcceptPermissionRationale -> {
permissionState.eventSink(PermissionsEvents.OpenSystemSettingAndCloseDialog)
}
is VoiceMessageComposerEvents.LifecycleEvent -> handleLifecycleEvent(event.event)
VoiceMessageComposerEvents.DismissSendFailureDialog -> {
showSendFailureDialog = false
}
} }
} }
@ -211,7 +204,7 @@ class DefaultVoiceMessageComposerPresenter(
showPermissionRationaleDialog = permissionState.showDialog, showPermissionRationaleDialog = permissionState.showDialog,
showSendFailureDialog = showSendFailureDialog, showSendFailureDialog = showSendFailureDialog,
keepScreenOn = keepScreenOn, keepScreenOn = keepScreenOn,
eventSink = handleEvents, eventSink = ::handleEvent,
) )
} }