Fix voice message recording not starting after permission is granted
This commit is contained in:
parent
3d75b92ec3
commit
efa6aa289d
2 changed files with 14 additions and 1 deletions
|
|
@ -69,6 +69,7 @@ class DefaultVoiceMessageComposerPresenter(
|
||||||
}
|
}
|
||||||
|
|
||||||
private val permissionsPresenter = permissionsPresenterFactory.create(Manifest.permission.RECORD_AUDIO)
|
private val permissionsPresenter = permissionsPresenterFactory.create(Manifest.permission.RECORD_AUDIO)
|
||||||
|
private var pendingEvent: VoiceMessageRecorderEvent.Start? = null
|
||||||
private val mediaSender = mediaSenderFactory.create(timelineMode)
|
private val mediaSender = mediaSenderFactory.create(timelineMode)
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|
@ -88,6 +89,15 @@ class DefaultVoiceMessageComposerPresenter(
|
||||||
player.setMedia(recording.file.path)
|
player.setMedia(recording.file.path)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LaunchedEffect(permissionState.permissionGranted) {
|
||||||
|
if (permissionState.permissionGranted) {
|
||||||
|
pendingEvent?.let {
|
||||||
|
localCoroutineScope.startRecording()
|
||||||
|
pendingEvent = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun handleLifecycleEvent(event: Lifecycle.Event) {
|
fun handleLifecycleEvent(event: Lifecycle.Event) {
|
||||||
when (event) {
|
when (event) {
|
||||||
Lifecycle.Event.ON_PAUSE -> {
|
Lifecycle.Event.ON_PAUSE -> {
|
||||||
|
|
@ -102,6 +112,7 @@ class DefaultVoiceMessageComposerPresenter(
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleVoiceMessageRecorderEvent(event: VoiceMessageRecorderEvent) {
|
fun handleVoiceMessageRecorderEvent(event: VoiceMessageRecorderEvent) {
|
||||||
|
pendingEvent = null
|
||||||
when (event) {
|
when (event) {
|
||||||
VoiceMessageRecorderEvent.Start -> {
|
VoiceMessageRecorderEvent.Start -> {
|
||||||
Timber.v("Voice message record button pressed")
|
Timber.v("Voice message record button pressed")
|
||||||
|
|
@ -111,6 +122,7 @@ class DefaultVoiceMessageComposerPresenter(
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
Timber.i("Voice message permission needed")
|
Timber.i("Voice message permission needed")
|
||||||
|
pendingEvent = VoiceMessageRecorderEvent.Start
|
||||||
permissionState.eventSink(PermissionsEvent.RequestPermissions)
|
permissionState.eventSink(PermissionsEvent.RequestPermissions)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -551,9 +551,10 @@ class DefaultVoiceMessageComposerPresenterTest {
|
||||||
// Dialog is hidden, user accepts permissions
|
// Dialog is hidden, user accepts permissions
|
||||||
assertThat(awaitItem().showPermissionRationaleDialog).isFalse()
|
assertThat(awaitItem().showPermissionRationaleDialog).isFalse()
|
||||||
|
|
||||||
|
// Permission is granted, recording starts automatically
|
||||||
permissionsPresenter.setPermissionGranted()
|
permissionsPresenter.setPermissionGranted()
|
||||||
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
skipItems(1)
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
|
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
|
||||||
voiceRecorder.assertCalls(started = 1)
|
voiceRecorder.assertCalls(started = 1)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue