@@ -77,12 +77,6 @@ actual class ChimeSDK(
7777 }
7878 }
7979
80- private var videoTileObserver: VideoTileManager ? = null
81- private var cameraCaptureSource: CameraCaptureSource ? = null
82- private var cachedVideoDevices: List <MediaDevice >? = null
83- private var currentCameraFacing = CameraFacing .FRONT
84- private var cameraOn = false
85-
8680 actual fun getAvailableInputDevices (): List <AudioDevice > =
8781 meetingSession.audioVideo
8882 .listAudioDevices()
@@ -119,6 +113,18 @@ actual class ChimeSDK(
119113 )
120114 }
121115
116+ private lateinit var realTimeObserver: RealTimeObserverImpl
117+ private lateinit var deviceObserver: DeviceObserverImpl
118+ private lateinit var videoTileObserver: VideoTileObserverImpl
119+ private lateinit var audioVideoObserver: AudioVideoObserverImpl
120+ private lateinit var activeSpeakerObserver: ActiveSpeakerObserverImpl
121+ private lateinit var dataMessageObserver: DataMessageObserverImpl
122+
123+ private var cameraCaptureSource: CameraCaptureSource ? = null
124+ private var cachedVideoDevices: List <MediaDevice >? = null
125+ private var currentCameraFacing = CameraFacing .FRONT
126+ private var cameraOn = false
127+
122128 actual fun joinMeeting (
123129 realTimeListener : RealTimeEventListener ,
124130 onActiveSpeakersChanged : (Set <String >) -> Unit ,
@@ -134,10 +140,10 @@ actual class ChimeSDK(
134140 onRemoteTileAdded : (Int ) -> Unit ,
135141 onRemoteTileRemoved : () -> Unit
136142 ) {
137- val realTimeObserver = RealTimeObserverImpl (realTimeListener)
143+ realTimeObserver = RealTimeObserverImpl (realTimeListener)
138144 meetingSession.audioVideo.addRealtimeObserver(realTimeObserver)
139145
140- val deviceObserver = DeviceObserver (
146+ deviceObserver = DeviceObserverImpl (
141147 meetingSession = meetingSession,
142148 realTimeEventListener = realTimeListener
143149 )
@@ -147,15 +153,16 @@ actual class ChimeSDK(
147153 .firstOrNull { it.label == selectedAudioInputDevice }
148154 ?.let (deviceObserver::selectAudioDevice)
149155
150- videoTileObserver = VideoTileManager (
156+ videoTileObserver = VideoTileObserverImpl (
157+ meetingSession = meetingSession,
151158 onLocalTileAdded = onLocalTileAdded,
152159 onLocalTileRemoved = onLocalTileRemoved,
153160 onRemoteTileAdded = onRemoteTileAdded,
154161 onRemoteTileRemoved = onRemoteTileRemoved
155162 )
156- meetingSession.audioVideo.addVideoTileObserver(videoTileObserver!! )
163+ meetingSession.audioVideo.addVideoTileObserver(videoTileObserver)
157164
158- val audioVideoObserver = AudioVideoObserverImpl (
165+ audioVideoObserver = AudioVideoObserverImpl (
159166 meetingSession = meetingSession,
160167 onConnectionStatusChanged = onConnectionStatusChanged,
161168 onRemoteVideoAvailable = onRemoteVideoAvailable,
@@ -166,12 +173,14 @@ actual class ChimeSDK(
166173 )
167174 meetingSession.audioVideo.addAudioVideoObserver(audioVideoObserver)
168175
169- val activeSpeakerObserver = ActiveSpeakerObserver (onActiveSpeakersChanged)
176+ activeSpeakerObserver = ActiveSpeakerObserverImpl (onActiveSpeakersChanged)
170177 meetingSession.audioVideo.addActiveSpeakerObserver(
171178 observer = activeSpeakerObserver,
172179 policy = DefaultActiveSpeakerPolicy ()
173180 )
174181
182+ dataMessageObserver = DataMessageObserverImpl (meetingSession)
183+
175184 try {
176185 meetingSession.audioVideo.start()
177186 meetingSession.audioVideo.startRemoteVideo()
@@ -190,14 +199,21 @@ actual class ChimeSDK(
190199 cameraCaptureSource = null
191200 }
192201
202+ meetingSession.audioVideo.removeRealtimeObserver(realTimeObserver)
203+ meetingSession.audioVideo.removeDeviceChangeObserver(deviceObserver)
204+ meetingSession.audioVideo.removeVideoTileObserver(videoTileObserver)
205+ meetingSession.audioVideo.removeAudioVideoObserver(audioVideoObserver)
206+ meetingSession.audioVideo.removeActiveSpeakerObserver(activeSpeakerObserver)
207+ dataMessageObserver.clearListeners()
208+
193209 meetingSession.audioVideo.stopRemoteVideo()
194210 meetingSession.audioVideo.realtimeLocalMute()
195211 meetingSession.audioVideo.stop()
196212 } catch (e: Exception ) {
197213 e.printStackTrace()
198214 }
199215
200- videoTileObserver? .clearAll()
216+ videoTileObserver.clearAll()
201217 }
202218
203219 actual fun startLocalVideo () {
@@ -240,12 +256,12 @@ actual class ChimeSDK(
240256 @Composable
241257 actual fun LocalVideoView (modifier : Modifier , cameraFacing : CameraFacing , isOnTop : Boolean ) =
242258 VideoTileView (
243- tileId = videoTileObserver? .localTileId,
259+ tileId = videoTileObserver.localTileId,
244260 modifier = modifier,
245261 cameraFacing = cameraFacing,
246262 isOnTop = isOnTop,
247263 meetingSession = meetingSession,
248- videoTileManager = videoTileObserver!!
264+ videoTileObserverImpl = videoTileObserver
249265 )
250266
251267 @Composable
@@ -254,7 +270,7 @@ actual class ChimeSDK(
254270 modifier = modifier,
255271 isOnTop = isOnTop,
256272 meetingSession = meetingSession,
257- videoTileManager = videoTileObserver!!
273+ videoTileObserverImpl = videoTileObserver
258274 )
259275
260276 actual fun sendRealtimeMessage (topic : String , data : String , lifetimeMs : Long ) =
@@ -291,11 +307,7 @@ actual class ChimeSDK(
291307 }
292308
293309 actual fun subscribeToTopic (topic : String , listener : (ChimeMessage ) -> Unit ) =
294- meetingSession.audioVideo.addRealtimeDataMessageObserver(
295- topic = topic,
296- observer = DataMessageObserverImpl (listener)
297- )
310+ dataMessageObserver.addListener(topic, listener)
298311
299- actual fun unsubscribeFromTopic (topic : String ) =
300- meetingSession.audioVideo.removeRealtimeDataMessageObserverFromTopic(topic)
312+ actual fun unsubscribeFromTopic (topic : String ) = dataMessageObserver.removeListener(topic)
301313}
0 commit comments