YR
Size: a a a
YR
S
СП
V
collect
. Только после вызова этого метода он начинает излучать значения и превращается в stream данных. Поэтому он и холодный.YR
S
YR
YR
РП
СП
Y
V
T
D
YR
V
YR
A
YR
interface MediaFrame {
class Handler {
private val isVideoRecording = MutableStateFlow(false)
private suspend fun takePhoto(): Uri = TODO("take photo uri")
private suspend fun takeVideo(maxDuration: Long = 10_000): Uri {
isVideoRecording.value = true
// todo start video recording
withTimeoutOrNull(maxDuration) { isVideoRecording.first { !it } }
isVideoRecording.value = false
// todo stop video recording
TODO("take video uri")
}
private suspend fun takeLocation(): LatLng = TODO("take location")
suspend fun createMediaFrame(): MediaFrame {
val photoUri = takePhoto()
val videoUri = takeVideo()
val location = takeLocation()
TODO("do something with $photoUri, $videoUri & $location")
}
fun interruptVideoRecording() = let { isVideoRecording.value = false }
}
}
suspend fun usage() {
coroutineScope {
val frame = with(MediaFrame.Handler()) {
val frameDeferred = async { createMediaFrame() }
delay(5000)
interruptVideoRecording()
frameDeferred.await()
}
TODO("do something with $frame")
}
}
YR