fix: use rememberUpdatedState for permissionsState in DefaultVoiceMessageComposerPresenter.kt
This commit is contained in:
parent
0e6ad3076c
commit
35e3100f86
2 changed files with 11 additions and 4 deletions
|
|
@ -17,6 +17,7 @@ import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
|
import androidx.compose.runtime.rememberUpdatedState
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
|
|
@ -79,7 +80,7 @@ class DefaultVoiceMessageComposerPresenter(
|
||||||
val playerState by player.state.collectAsState(initial = VoiceMessageComposerPlayer.State.Initial)
|
val playerState by player.state.collectAsState(initial = VoiceMessageComposerPlayer.State.Initial)
|
||||||
val keepScreenOn by remember { derivedStateOf { recorderState is VoiceRecorderState.Recording } }
|
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 isSending by remember { mutableStateOf(false) }
|
||||||
var showSendFailureDialog by remember { mutableStateOf(false) }
|
var showSendFailureDialog by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -522,7 +522,9 @@ class DefaultVoiceMessageComposerPresenterTest {
|
||||||
permissionsPresenter.setPermissionGranted()
|
permissionsPresenter.setPermissionGranted()
|
||||||
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
val finalState = awaitItem()
|
advanceUntilIdle()
|
||||||
|
|
||||||
|
val finalState = expectMostRecentItem()
|
||||||
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
|
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
|
||||||
voiceRecorder.assertCalls(stopped = 1, started = 1)
|
voiceRecorder.assertCalls(stopped = 1, started = 1)
|
||||||
|
|
||||||
|
|
@ -547,15 +549,16 @@ class DefaultVoiceMessageComposerPresenterTest {
|
||||||
assertThat(it.showPermissionRationaleDialog).isTrue()
|
assertThat(it.showPermissionRationaleDialog).isTrue()
|
||||||
it.eventSink(VoiceMessageComposerEvent.AcceptPermissionRationale)
|
it.eventSink(VoiceMessageComposerEvent.AcceptPermissionRationale)
|
||||||
}
|
}
|
||||||
|
skipItems(1)
|
||||||
|
|
||||||
// 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
|
// Permission is granted, recording starts automatically
|
||||||
permissionsPresenter.setPermissionGranted()
|
permissionsPresenter.setPermissionGranted()
|
||||||
|
advanceUntilIdle()
|
||||||
|
|
||||||
skipItems(1)
|
val finalState = expectMostRecentItem()
|
||||||
val finalState = awaitItem()
|
|
||||||
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
|
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
|
||||||
voiceRecorder.assertCalls(started = 1)
|
voiceRecorder.assertCalls(started = 1)
|
||||||
|
|
||||||
|
|
@ -580,12 +583,14 @@ class DefaultVoiceMessageComposerPresenterTest {
|
||||||
assertThat(it.showPermissionRationaleDialog).isTrue()
|
assertThat(it.showPermissionRationaleDialog).isTrue()
|
||||||
it.eventSink(VoiceMessageComposerEvent.DismissPermissionsRationale)
|
it.eventSink(VoiceMessageComposerEvent.DismissPermissionsRationale)
|
||||||
}
|
}
|
||||||
|
skipItems(1)
|
||||||
|
|
||||||
// Dialog is hidden, user tries to record again
|
// Dialog is hidden, user tries to record again
|
||||||
awaitItem().also {
|
awaitItem().also {
|
||||||
assertThat(it.showPermissionRationaleDialog).isFalse()
|
assertThat(it.showPermissionRationaleDialog).isFalse()
|
||||||
it.eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
it.eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}
|
}
|
||||||
|
skipItems(1)
|
||||||
|
|
||||||
// Dialog is shown once again
|
// Dialog is shown once again
|
||||||
val finalState = awaitItem().also {
|
val finalState = awaitItem().also {
|
||||||
|
|
@ -594,6 +599,7 @@ class DefaultVoiceMessageComposerPresenterTest {
|
||||||
}
|
}
|
||||||
voiceRecorder.assertCalls(started = 0)
|
voiceRecorder.assertCalls(started = 0)
|
||||||
|
|
||||||
|
cancelAndIgnoreRemainingEvents()
|
||||||
testPauseAndDestroy(finalState)
|
testPauseAndDestroy(finalState)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue