Seong-eun Jin
Committed by GitHub

Fixed primarySpeaker videoTrack, mute observer (#98)

* Add private keyword

* Set primarySpeaker muteIndicator visibility

* Fixed primarySpeaker videoTrack, mute observer
... ... @@ -77,33 +77,19 @@ class CallActivity : AppCompatActivity() {
// Observe primary speaker changes
emitAll(viewModel.primarySpeaker)
}.flatMapLatest { primarySpeaker ->
// Update new primary speaker identity
binding.identityText.text = primarySpeaker?.identity
if (primarySpeaker != null) {
primarySpeaker::audioTracks.flow
.flatMapLatest { tracks ->
val audioTrack = tracks.firstOrNull()?.first
if (audioTrack != null) {
audioTrack::muted.flow
} else {
flowOf(true)
}
}
.collect { muted ->
binding.muteIndicator.visibility = if (muted) View.VISIBLE else View.INVISIBLE
}
}
// observe videoTracks changes.
if (primarySpeaker != null) {
primarySpeaker::videoTracks.flow
.map { primarySpeaker to it }
flowOf(primarySpeaker)
} else {
emptyFlow()
}
}.flatMapLatest { (participant, videoTracks) ->
}.collect { participant ->
// Update new primary speaker identity
binding.identityText.text = participant.identity
// observe videoTracks changes.
val videoTrackFlow = participant::videoTracks.flow
.map { participant to it }
.flatMapLatest { (participant, videoTracks) ->
// Prioritize any screenshare streams.
val trackPublication = participant.getTrackPublication(Track.Source.SCREEN_SHARE)
?: participant.getTrackPublication(Track.Source.CAMERA)
... ... @@ -111,7 +97,22 @@ class CallActivity : AppCompatActivity() {
?: return@flatMapLatest emptyFlow()
trackPublication::track.flow
}.collect { videoTrack ->
}
// observe audioTracks changes.
val mutedFlow = participant::audioTracks.flow
.flatMapLatest { tracks ->
val audioTrack = tracks.firstOrNull()?.first
if (audioTrack != null) {
audioTrack::muted.flow
} else {
flowOf(true)
}
}
combine(videoTrackFlow, mutedFlow) { videoTrack, muted ->
videoTrack to muted
}.collect { (videoTrack, muted) ->
// Cleanup old video track
val oldVideoTrack = binding.speakerVideoView.tag as? VideoTrack
oldVideoTrack?.removeRenderer(binding.speakerVideoView)
... ... @@ -124,6 +125,9 @@ class CallActivity : AppCompatActivity() {
binding.speakerVideoView.visibility = View.INVISIBLE
}
binding.speakerVideoView.tag = videoTrack
binding.muteIndicator.visibility = if (muted) View.VISIBLE else View.INVISIBLE
}
}
}
... ...