steep-balloon-41261
08/14/2023, 6:14 AMdry-elephant-14928
08/14/2023, 6:57 PMfamous-oxygen-25341
08/16/2023, 12:22 AM[TestParicipant class]
val audioTracks: StateFlow<List<Pair<TestTrackPublication, TestTrack>>>
get() {
return participant::audioTracks.flow
.map {
it.map { (trackPublication, track) ->
val testTrackPublication = when (trackPublication) {
is LocalTrackPublication -> {
TestLocalTrackPublication(trackPublication)
}
is RemoteTrackPublication -> {
TestRemoteTrackPublication(trackPublication)
}
else -> {
TestTrackPublication(trackPublication)
}
}
val testTrack = when (track) {
is AudioTrack -> {
TestAudioTrack(track)
}
is VideoTrack -> {
TestVideoTrack(track)
}
else -> {
TestTrack(track)
}
}
testTrackPublication to testTrack
}
}
.stateIn(delegateScope, SharingStarted.Eagerly, emptyList())
}
class TestRemoteTrackPublication(private val remoteTrackPublication: RemoteTrackPublication): TestTrackPublication(remoteTrackPublication) {
override val track: Flow<TestTrack?>
get() {
return remoteTrackPublication::track.flow.map {
TestTrack(it)
}
}
}
open class TestTrackPublication(private val trackPublication: TrackPublication) {
val muted: Flow<Boolean>
get() {
trackPublication::muted.flow.map {
it
}
}
var source: Track.Source = trackPublication.source
get() = trackPublication.source
var kind: Track.Kind = trackPublication.kind
get() = trackPublication.kind
var name: String = trackPublication.name
open val track: Flow<TestTrack?>
get() {
return trackPublication::track.flow.map {
TestTrack(it)
}
}
}
I got this error when accessing trackPublication::muted in TestTrackPublication.
java.lang.NullPointerException: null cannot be cast to non-null type kotlinx.coroutines.flow.StateFlow<T of io.fflite.webrtc.android.util.FlowDelegateKt.<get-flow>>
coroutineScope?.launch {
// participant is TestParticipant and audioTracks StateFlow<List<Pair<TestTrackPublication, TestTrack>>
participant.audioTracks
.flatMapLatest { tracks ->
val audioTrack = tracks.firstOrNull()?.first
audioTrack?.muted ?: flowOf(true)
}
.collect { muted ->
viewBinding.muteIndicator.visibility = if (muted == true) View.VISIBLE else View.INVISIBLE
}
}famous-oxygen-25341
08/16/2023, 7:15 AMdry-elephant-14928
08/16/2023, 5:16 PM