fix: use rememberUpdatedState for permissionsState in DefaultVoiceMessageComposerPresenter.kt

This commit is contained in:
Karsten Knappe
2026-02-02 15:17:49 +01:00
parent 0e6ad3076c
commit 35e3100f86
2 changed files with 11 additions and 4 deletions

View File

@@ -17,6 +17,7 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.runtime.setValue
import androidx.core.net.toUri
import androidx.lifecycle.Lifecycle
@@ -79,7 +80,7 @@ class DefaultVoiceMessageComposerPresenter(
val playerState by player.state.collectAsState(initial = VoiceMessageComposerPlayer.State.Initial)
val keepScreenOn by remember { derivedStateOf { recorderState is VoiceRecorderState.Recording } }
val permissionState = permissionsPresenter.present()
val permissionState by rememberUpdatedState (permissionsPresenter.present())
var isSending by remember { mutableStateOf(false) }
var showSendFailureDialog by remember { mutableStateOf(false) }

View File

@@ -522,7 +522,9 @@ class DefaultVoiceMessageComposerPresenterTest {
permissionsPresenter.setPermissionGranted()
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
val finalState = awaitItem()
advanceUntilIdle()
val finalState = expectMostRecentItem()
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
voiceRecorder.assertCalls(stopped = 1, started = 1)
@@ -547,15 +549,16 @@ class DefaultVoiceMessageComposerPresenterTest {
assertThat(it.showPermissionRationaleDialog).isTrue()
it.eventSink(VoiceMessageComposerEvent.AcceptPermissionRationale)
}
skipItems(1)
// Dialog is hidden, user accepts permissions
assertThat(awaitItem().showPermissionRationaleDialog).isFalse()
// Permission is granted, recording starts automatically
permissionsPresenter.setPermissionGranted()
advanceUntilIdle()
skipItems(1)
val finalState = awaitItem()
val finalState = expectMostRecentItem()
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
voiceRecorder.assertCalls(started = 1)
@@ -580,12 +583,14 @@ class DefaultVoiceMessageComposerPresenterTest {
assertThat(it.showPermissionRationaleDialog).isTrue()
it.eventSink(VoiceMessageComposerEvent.DismissPermissionsRationale)
}
skipItems(1)
// Dialog is hidden, user tries to record again
awaitItem().also {
assertThat(it.showPermissionRationaleDialog).isFalse()
it.eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
}
skipItems(1)
// Dialog is shown once again
val finalState = awaitItem().also {
@@ -594,6 +599,7 @@ class DefaultVoiceMessageComposerPresenterTest {
}
voiceRecorder.assertCalls(started = 0)
cancelAndIgnoreRemainingEvents()
testPauseAndDestroy(finalState)
}
}