davidliu
Committed by GitHub

Send UpdateTrackSettings after resume (#51)

* Send UpdateTrackSettings after resume

* pr comment fixes
@@ -18,7 +18,6 @@ import livekit.LivekitRtc @@ -18,7 +18,6 @@ import livekit.LivekitRtc
18 import org.webrtc.* 18 import org.webrtc.*
19 import java.net.ConnectException 19 import java.net.ConnectException
20 import java.nio.ByteBuffer 20 import java.nio.ByteBuffer
21 -import java.util.concurrent.TimeUnit  
22 import javax.inject.Inject 21 import javax.inject.Inject
23 import javax.inject.Named 22 import javax.inject.Named
24 import javax.inject.Singleton 23 import javax.inject.Singleton
@@ -380,14 +379,12 @@ internal constructor( @@ -380,14 +379,12 @@ internal constructor(
380 } 379 }
381 380
382 if (connectionState == ConnectionState.CONNECTED) { 381 if (connectionState == ConnectionState.CONNECTED) {
383 - if (isFullReconnect) {  
384 - listener?.onFullReconnect()  
385 - } 382 + listener?.onPostReconnect(isFullReconnect)
386 return@launch 383 return@launch
387 } 384 }
388 385
389 val curReconnectTime = SystemClock.elapsedRealtime() - reconnectStartTime 386 val curReconnectTime = SystemClock.elapsedRealtime() - reconnectStartTime
390 - if(curReconnectTime > MAX_RECONNECT_TIMEOUT){ 387 + if (curReconnectTime > MAX_RECONNECT_TIMEOUT) {
391 break 388 break
392 } 389 }
393 } 390 }
@@ -516,9 +513,9 @@ internal constructor( @@ -516,9 +513,9 @@ internal constructor(
516 fun onStreamStateUpdate(streamStates: List<LivekitRtc.StreamStateInfo>) 513 fun onStreamStateUpdate(streamStates: List<LivekitRtc.StreamStateInfo>)
517 fun onSubscribedQualityUpdate(subscribedQualityUpdate: LivekitRtc.SubscribedQualityUpdate) 514 fun onSubscribedQualityUpdate(subscribedQualityUpdate: LivekitRtc.SubscribedQualityUpdate)
518 fun onSubscriptionPermissionUpdate(subscriptionPermissionUpdate: LivekitRtc.SubscriptionPermissionUpdate) 515 fun onSubscriptionPermissionUpdate(subscriptionPermissionUpdate: LivekitRtc.SubscriptionPermissionUpdate)
519 - fun onSignalConnected(isReconnect: Boolean) 516 + fun onSignalConnected(isResume: Boolean)
520 fun onFullReconnecting() 517 fun onFullReconnecting()
521 - suspend fun onFullReconnect() 518 + suspend fun onPostReconnect(isFullReconnect: Boolean)
522 } 519 }
523 520
524 companion object { 521 companion object {
@@ -23,6 +23,7 @@ import io.livekit.android.room.track.* @@ -23,6 +23,7 @@ import io.livekit.android.room.track.*
23 import io.livekit.android.util.FlowObservable 23 import io.livekit.android.util.FlowObservable
24 import io.livekit.android.util.LKLog 24 import io.livekit.android.util.LKLog
25 import io.livekit.android.util.flowDelegate 25 import io.livekit.android.util.flowDelegate
  26 +import io.livekit.android.util.invoke
26 import kotlinx.coroutines.* 27 import kotlinx.coroutines.*
27 import livekit.LivekitModels 28 import livekit.LivekitModels
28 import livekit.LivekitRtc 29 import livekit.LivekitRtc
@@ -616,9 +617,9 @@ constructor( @@ -616,9 +617,9 @@ constructor(
616 /** 617 /**
617 * @suppress 618 * @suppress
618 */ 619 */
619 - override fun onSignalConnected(isReconnect: Boolean) {  
620 - if (state == State.RECONNECTING && isReconnect) {  
621 - // during reconnection, need to send sync state upon signal connection. 620 + override fun onSignalConnected(isResume: Boolean) {
  621 + if (state == State.RECONNECTING && isResume) {
  622 + // during resume reconnection, need to send sync state upon signal connection.
622 sendSyncState() 623 sendSyncState()
623 } 624 }
624 } 625 }
@@ -635,8 +636,21 @@ constructor( @@ -635,8 +636,21 @@ constructor(
635 /** 636 /**
636 * @suppress 637 * @suppress
637 */ 638 */
638 - override suspend fun onFullReconnect() { 639 + override suspend fun onPostReconnect(isFullReconnect: Boolean) {
  640 + if (isFullReconnect) {
639 localParticipant.republishTracks() 641 localParticipant.republishTracks()
  642 + } else {
  643 + val remoteParticipants = remoteParticipants.values.toList()
  644 + for (participant in remoteParticipants) {
  645 + val pubs = participant.tracks.values.toList()
  646 + for (pub in pubs) {
  647 + val remotePub = pub as? RemoteTrackPublication ?: continue
  648 + if(remotePub.subscribed) {
  649 + remotePub.sendUpdateTrackSettings.invoke()
  650 + }
  651 + }
  652 + }
  653 + }
640 } 654 }
641 655
642 //------------------------------- ParticipantListener --------------------------------// 656 //------------------------------- ParticipantListener --------------------------------//
@@ -173,7 +173,7 @@ class RemoteTrackPublication( @@ -173,7 +173,7 @@ class RemoteTrackPublication(
173 } 173 }
174 174
175 // Debounce just in case multiple settings get changed at once. 175 // Debounce just in case multiple settings get changed at once.
176 - private val sendUpdateTrackSettings = debounce<Unit, Unit>(100L, CoroutineScope(ioDispatcher)) { 176 + internal val sendUpdateTrackSettings = debounce<Unit, Unit>(100L, CoroutineScope(ioDispatcher)) {
177 sendUpdateTrackSettingsImpl() 177 sendUpdateTrackSettingsImpl()
178 } 178 }
179 179