Fix voice message recording not starting after permission is granted

This commit is contained in:
Karsten Knappe
2026-01-29 12:18:27 +01:00
parent 3d75b92ec3
commit 0e6ad3076c
2 changed files with 14 additions and 1 deletions

View File

@@ -69,6 +69,7 @@ class DefaultVoiceMessageComposerPresenter(
}
private val permissionsPresenter = permissionsPresenterFactory.create(Manifest.permission.RECORD_AUDIO)
private var pendingEvent: VoiceMessageRecorderEvent.Start? = null
private val mediaSender = mediaSenderFactory.create(timelineMode)
@Composable
@@ -88,6 +89,15 @@ class DefaultVoiceMessageComposerPresenter(
player.setMedia(recording.file.path)
}
LaunchedEffect(permissionState.permissionGranted) {
if (permissionState.permissionGranted) {
pendingEvent?.let {
localCoroutineScope.startRecording()
pendingEvent = null
}
}
}
fun handleLifecycleEvent(event: Lifecycle.Event) {
when (event) {
Lifecycle.Event.ON_PAUSE -> {
@@ -102,6 +112,7 @@ class DefaultVoiceMessageComposerPresenter(
}
fun handleVoiceMessageRecorderEvent(event: VoiceMessageRecorderEvent) {
pendingEvent = null
when (event) {
VoiceMessageRecorderEvent.Start -> {
Timber.v("Voice message record button pressed")
@@ -111,6 +122,7 @@ class DefaultVoiceMessageComposerPresenter(
}
else -> {
Timber.i("Voice message permission needed")
pendingEvent = VoiceMessageRecorderEvent.Start
permissionState.eventSink(PermissionsEvent.RequestPermissions)
}
}

View File

@@ -551,9 +551,10 @@ class DefaultVoiceMessageComposerPresenterTest {
// Dialog is hidden, user accepts permissions
assertThat(awaitItem().showPermissionRationaleDialog).isFalse()
// Permission is granted, recording starts automatically
permissionsPresenter.setPermissionGranted()
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
skipItems(1)
val finalState = awaitItem()
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
voiceRecorder.assertCalls(started = 1)