davidliu
Committed by GitHub

Remove RoomOptions from Room.connect (#346)

This was causing confusion in users who expected it to overwrite the existing room options
@@ -105,6 +105,7 @@ class LiveKit { @@ -105,6 +105,7 @@ class LiveKit {
105 } 105 }
106 room.adaptiveStream = options.adaptiveStream 106 room.adaptiveStream = options.adaptiveStream
107 room.dynacast = options.dynacast 107 room.dynacast = options.dynacast
  108 + room.e2eeOptions = options.e2eeOptions
108 109
109 return room 110 return room
110 } 111 }
@@ -35,7 +35,7 @@ data class RoomOptions( @@ -35,7 +35,7 @@ data class RoomOptions(
35 val dynacast: Boolean = false, 35 val dynacast: Boolean = false,
36 36
37 /** 37 /**
38 - * Options for end-to-end encryption. 38 + * @see [Room.e2eeOptions]
39 */ 39 */
40 val e2eeOptions: E2EEOptions? = null, 40 val e2eeOptions: E2EEOptions? = null,
41 41
@@ -33,6 +33,7 @@ import io.livekit.android.Version @@ -33,6 +33,7 @@ import io.livekit.android.Version
33 import io.livekit.android.audio.AudioHandler 33 import io.livekit.android.audio.AudioHandler
34 import io.livekit.android.dagger.InjectionNames 34 import io.livekit.android.dagger.InjectionNames
35 import io.livekit.android.e2ee.E2EEManager 35 import io.livekit.android.e2ee.E2EEManager
  36 +import io.livekit.android.e2ee.E2EEOptions
36 import io.livekit.android.events.* 37 import io.livekit.android.events.*
37 import io.livekit.android.memory.CloseableManager 38 import io.livekit.android.memory.CloseableManager
38 import io.livekit.android.renderer.TextureViewRenderer 39 import io.livekit.android.renderer.TextureViewRenderer
@@ -162,6 +163,13 @@ constructor( @@ -162,6 +163,13 @@ constructor(
162 } 163 }
163 164
164 /** 165 /**
  166 + * Options for end-to-end encryption. Must be setup prior to [connect].
  167 + *
  168 + * If null, e2ee will be disabled.
  169 + */
  170 + var e2eeOptions: E2EEOptions? = null
  171 +
  172 + /**
165 * Default options to use when creating an audio track. 173 * Default options to use when creating an audio track.
166 */ 174 */
167 var audioTrackCaptureDefaults: LocalAudioTrackOptions by defaultsManager::audioTrackCaptureDefaults 175 var audioTrackCaptureDefaults: LocalAudioTrackOptions by defaultsManager::audioTrackCaptureDefaults
@@ -210,15 +218,17 @@ constructor( @@ -210,15 +218,17 @@ constructor(
210 videoTrackCaptureDefaults = videoTrackCaptureDefaults, 218 videoTrackCaptureDefaults = videoTrackCaptureDefaults,
211 audioTrackPublishDefaults = audioTrackPublishDefaults, 219 audioTrackPublishDefaults = audioTrackPublishDefaults,
212 videoTrackPublishDefaults = videoTrackPublishDefaults, 220 videoTrackPublishDefaults = videoTrackPublishDefaults,
213 - e2eeOptions = null, 221 + e2eeOptions = e2eeOptions,
214 ) 222 )
215 223
216 - suspend fun connect(url: String, token: String, options: ConnectOptions = ConnectOptions(), roomOptions: RoomOptions = getCurrentRoomOptions()) { 224 + suspend fun connect(url: String, token: String, options: ConnectOptions = ConnectOptions()) {
217 if (this::coroutineScope.isInitialized) { 225 if (this::coroutineScope.isInitialized) {
218 coroutineScope.cancel() 226 coroutineScope.cancel()
219 } 227 }
220 coroutineScope = CoroutineScope(defaultDispatcher + SupervisorJob()) 228 coroutineScope = CoroutineScope(defaultDispatcher + SupervisorJob())
221 229
  230 + val roomOptions = getCurrentRoomOptions()
  231 +
222 // Setup local participant. 232 // Setup local participant.
223 localParticipant.reinitialize() 233 localParticipant.reinitialize()
224 coroutineScope.launch { 234 coroutineScope.launch {
@@ -71,9 +71,11 @@ class RoomTest { @@ -71,9 +71,11 @@ class RoomTest {
71 override fun create(dynacast: Boolean): LocalParticipant { 71 override fun create(dynacast: Boolean): LocalParticipant {
72 return Mockito.mock(LocalParticipant::class.java) 72 return Mockito.mock(LocalParticipant::class.java)
73 .apply { 73 .apply {
74 - whenever(this.events).thenReturn(object : EventListenable<ParticipantEvent> { 74 + whenever(this.events).thenReturn(
  75 + object : EventListenable<ParticipantEvent> {
75 override val events: SharedFlow<ParticipantEvent> = MutableSharedFlow() 76 override val events: SharedFlow<ParticipantEvent> = MutableSharedFlow()
76 - }) 77 + },
  78 + )
77 } 79 }
78 } 80 }
79 } 81 }
@@ -178,10 +178,10 @@ class CallViewModel( @@ -178,10 +178,10 @@ class CallViewModel(
178 178
179 private suspend fun connectToRoom() { 179 private suspend fun connectToRoom() {
180 try { 180 try {
  181 + room.e2eeOptions = getE2EEOptions()
181 room.connect( 182 room.connect(
182 url = url, 183 url = url,
183 token = token, 184 token = token,
184 - roomOptions = RoomOptions(e2eeOptions = getE2EEOptions()),  
185 ) 185 )
186 186
187 // Create and publish audio/video tracks 187 // Create and publish audio/video tracks