Keep screen on while recording voicebroadcast (#8313)
This commit is contained in:
parent
99aa9493d6
commit
fb837fed5a
|
@ -0,0 +1 @@
|
|||
Keep screen on while recording voicebroadcast
|
|
@ -239,7 +239,7 @@ class AudioMessageHelper @Inject constructor(
|
|||
val percentage = currentPosition.toFloat() / totalDuration
|
||||
playbackTracker.updatePlayingAtPlaybackTime(id, currentPosition, percentage)
|
||||
} else {
|
||||
playbackTracker.stopPlayback(id)
|
||||
playbackTracker.stopPlaybackOrRecorder(id)
|
||||
stopPlaybackTicker()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -100,7 +100,7 @@ class AudioMessagePlaybackTracker @Inject constructor() {
|
|||
}
|
||||
}
|
||||
|
||||
fun stopPlayback(id: String) {
|
||||
fun stopPlaybackOrRecorder(id: String) {
|
||||
val state = getPlaybackState(id)
|
||||
if (state !is Listener.State.Error) {
|
||||
setState(id, Listener.State.Idle)
|
||||
|
|
|
@ -527,7 +527,7 @@ class VoiceBroadcastPlayerImpl @Inject constructor(
|
|||
State.Idle -> {
|
||||
// restart the playback time if player completed with less than 1s remaining time
|
||||
if (percentage == null || (playlist.duration - position) < 1000) {
|
||||
playbackTracker.stopPlayback(id)
|
||||
playbackTracker.stopPlaybackOrRecorder(id)
|
||||
} else {
|
||||
playbackTracker.updatePausedAtPlaybackTime(id, position, percentage)
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ import android.content.Context
|
|||
import androidx.core.content.FileProvider
|
||||
import im.vector.app.core.resources.BuildMeta
|
||||
import im.vector.app.features.attachments.toContentAttachmentData
|
||||
import im.vector.app.features.home.room.detail.timeline.helper.AudioMessagePlaybackTracker
|
||||
import im.vector.app.features.session.coroutineScope
|
||||
import im.vector.app.features.voicebroadcast.VoiceBroadcastConstants
|
||||
import im.vector.app.features.voicebroadcast.VoiceBroadcastFailure
|
||||
|
@ -54,6 +55,7 @@ import javax.inject.Inject
|
|||
class StartVoiceBroadcastUseCase @Inject constructor(
|
||||
private val session: Session,
|
||||
private val voiceBroadcastRecorder: VoiceBroadcastRecorder?,
|
||||
private val playbackTracker: AudioMessagePlaybackTracker,
|
||||
private val context: Context,
|
||||
private val buildMeta: BuildMeta,
|
||||
private val getRoomLiveVoiceBroadcastsUseCase: GetRoomLiveVoiceBroadcastsUseCase,
|
||||
|
@ -106,10 +108,14 @@ class StartVoiceBroadcastUseCase @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onStateUpdated(state: VoiceBroadcastRecorder.State) {
|
||||
if (state == VoiceBroadcastRecorder.State.Error) {
|
||||
session.coroutineScope.launch {
|
||||
pauseVoiceBroadcastUseCase.execute(room.roomId)
|
||||
when (state) {
|
||||
VoiceBroadcastRecorder.State.Recording -> playbackTracker.updateCurrentRecording(AudioMessagePlaybackTracker.RECORDING_ID, emptyList())
|
||||
VoiceBroadcastRecorder.State.Idle -> playbackTracker.stopPlaybackOrRecorder(AudioMessagePlaybackTracker.RECORDING_ID)
|
||||
VoiceBroadcastRecorder.State.Error -> {
|
||||
playbackTracker.stopPlaybackOrRecorder(AudioMessagePlaybackTracker.RECORDING_ID)
|
||||
session.coroutineScope.launch { pauseVoiceBroadcastUseCase.execute(room.roomId) }
|
||||
}
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
@ -47,8 +47,7 @@ class GetVoiceBroadcastStateEventLiveUseCase @Inject constructor(
|
|||
) {
|
||||
|
||||
fun execute(voiceBroadcast: VoiceBroadcast): Flow<Optional<VoiceBroadcastEvent>> {
|
||||
val room = session.getRoom(voiceBroadcast.roomId) ?: error("Unknown roomId: ${voiceBroadcast.roomId}")
|
||||
return getMostRecentVoiceBroadcastEventFlow(room, voiceBroadcast)
|
||||
return getMostRecentVoiceBroadcastEventFlow(voiceBroadcast)
|
||||
.onEach { event ->
|
||||
Timber.d(
|
||||
"## VoiceBroadcast | " +
|
||||
|
@ -61,7 +60,8 @@ class GetVoiceBroadcastStateEventLiveUseCase @Inject constructor(
|
|||
/**
|
||||
* Get a flow of the most recent event for the given voice broadcast.
|
||||
*/
|
||||
private fun getMostRecentVoiceBroadcastEventFlow(room: Room, voiceBroadcast: VoiceBroadcast): Flow<Optional<VoiceBroadcastEvent>> {
|
||||
private fun getMostRecentVoiceBroadcastEventFlow(voiceBroadcast: VoiceBroadcast): Flow<Optional<VoiceBroadcastEvent>> {
|
||||
val room = session.getRoom(voiceBroadcast.roomId) ?: error("Unknown roomId: ${voiceBroadcast.roomId}")
|
||||
val startedEventFlow = room.flow().liveTimelineEvent(voiceBroadcast.voiceBroadcastId)
|
||||
// observe started event changes
|
||||
return startedEventFlow
|
||||
|
|
|
@ -57,6 +57,7 @@ class StartVoiceBroadcastUseCaseTest {
|
|||
StartVoiceBroadcastUseCase(
|
||||
session = fakeSession,
|
||||
voiceBroadcastRecorder = fakeVoiceBroadcastRecorder,
|
||||
playbackTracker = mockk(),
|
||||
context = FakeContext().instance,
|
||||
buildMeta = mockk(),
|
||||
getRoomLiveVoiceBroadcastsUseCase = fakeGetRoomLiveVoiceBroadcastsUseCase,
|
||||
|
|
Loading…
Reference in New Issue