mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-02 20:26:47 +01:00
Pause recording when the composer is not visible anymore
This commit is contained in:
parent
9d35e81db7
commit
62596b38c7
@ -227,10 +227,18 @@ class MessageComposerFragment : VectorBaseFragment<FragmentComposerBinding>(), A
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
|
||||
if (withState(messageComposerViewModel) { it.isVoiceRecording } && requireActivity().isChangingConfigurations) {
|
||||
// we're rotating, maintain any active recordings
|
||||
} else {
|
||||
messageComposerViewModel.handle(MessageComposerAction.OnEntersBackground(composer.text.toString()))
|
||||
withState(messageComposerViewModel) {
|
||||
when {
|
||||
it.isVoiceRecording && requireActivity().isChangingConfigurations -> {
|
||||
// we're rotating, maintain any active recordings
|
||||
}
|
||||
// TODO remove this when there will be a recording indicator outside of the timeline
|
||||
// Pause voice broadcast if the timeline is not shown anymore
|
||||
it.isVoiceBroadcasting && !requireActivity().isChangingConfigurations -> timelineViewModel.handle(VoiceBroadcastAction.Pause)
|
||||
else -> {
|
||||
messageComposerViewModel.handle(MessageComposerAction.OnEntersBackground(composer.text.toString()))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package im.vector.app.features.home.room.detail.composer
|
||||
|
||||
import androidx.lifecycle.asFlow
|
||||
import com.airbnb.mvrx.MavericksViewModelFactory
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedFactory
|
||||
@ -40,8 +41,11 @@ import im.vector.app.features.home.room.detail.toMessageType
|
||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
||||
import im.vector.app.features.session.coroutineScope
|
||||
import im.vector.app.features.settings.VectorPreferences
|
||||
import im.vector.app.features.voicebroadcast.VoiceBroadcastConstants
|
||||
import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.flow.mapNotNull
|
||||
import kotlinx.coroutines.launch
|
||||
import org.matrix.android.sdk.api.query.QueryStringValue
|
||||
import org.matrix.android.sdk.api.session.Session
|
||||
@ -90,6 +94,7 @@ class MessageComposerViewModel @AssistedInject constructor(
|
||||
init {
|
||||
loadDraftIfAny()
|
||||
observePowerLevelAndEncryption()
|
||||
observeVoiceBroadcast()
|
||||
subscribeToStateInternal()
|
||||
}
|
||||
|
||||
@ -182,6 +187,16 @@ class MessageComposerViewModel @AssistedInject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun observeVoiceBroadcast() {
|
||||
room.stateService().getStateEventLive(VoiceBroadcastConstants.STATE_ROOM_VOICE_BROADCAST_INFO, QueryStringValue.Equals(session.myUserId))
|
||||
.asFlow()
|
||||
.unwrap()
|
||||
.mapNotNull { it.asVoiceBroadcastEvent()?.content?.voiceBroadcastState }
|
||||
.setOnEach {
|
||||
copy(voiceBroadcastState = it)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleEnterQuoteMode(action: MessageComposerAction.EnterQuoteMode) {
|
||||
room.getTimelineEvent(action.eventId)?.let { timelineEvent ->
|
||||
setState { copy(sendMode = SendMode.Quote(timelineEvent, currentComposerText)) }
|
||||
|
@ -19,6 +19,7 @@ package im.vector.app.features.home.room.detail.composer
|
||||
import com.airbnb.mvrx.MavericksState
|
||||
import im.vector.app.features.home.room.detail.arguments.TimelineArgs
|
||||
import im.vector.app.features.home.room.detail.composer.voice.VoiceMessageRecorderView
|
||||
import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState
|
||||
import org.matrix.android.sdk.api.extensions.orFalse
|
||||
import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
|
||||
import kotlin.random.Random
|
||||
@ -67,6 +68,7 @@ data class MessageComposerViewState(
|
||||
val startsThread: Boolean = false,
|
||||
val sendMode: SendMode = SendMode.Regular("", false),
|
||||
val voiceRecordingUiState: VoiceMessageRecorderView.RecordingUiState = VoiceMessageRecorderView.RecordingUiState.Idle,
|
||||
val voiceBroadcastState: VoiceBroadcastState? = null,
|
||||
val text: CharSequence? = null,
|
||||
) : MavericksState {
|
||||
|
||||
@ -77,6 +79,13 @@ data class MessageComposerViewState(
|
||||
is VoiceMessageRecorderView.RecordingUiState.Recording -> true
|
||||
}
|
||||
|
||||
val isVoiceBroadcasting = when (voiceBroadcastState) {
|
||||
VoiceBroadcastState.STARTED,
|
||||
VoiceBroadcastState.PAUSED,
|
||||
VoiceBroadcastState.RESUMED -> true
|
||||
else -> false
|
||||
}
|
||||
|
||||
val isVoiceMessageIdle = !isVoiceRecording
|
||||
|
||||
val isComposerVisible = canSendMessage.boolean() && !isVoiceRecording
|
||||
|
Loading…
x
Reference in New Issue
Block a user