From 9538b905fb698f43c726ac7bd1972d443692e8dc Mon Sep 17 00:00:00 2001 From: skydoves Date: Thu, 23 Feb 2023 15:28:42 +0900 Subject: [PATCH] Implement enableCamera feature --- .../sample/compose/ui/screens/video/VideoCallScreen.kt | 6 ++++-- .../compose/webrtc/sessions/WebRtcSessionManager.kt | 2 ++ .../compose/webrtc/sessions/WebRtcSessionManagerImpl.kt | 8 ++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/webrtc-android/app/src/main/kotlin/io/getstream/webrtc/sample/compose/ui/screens/video/VideoCallScreen.kt b/webrtc-android/app/src/main/kotlin/io/getstream/webrtc/sample/compose/ui/screens/video/VideoCallScreen.kt index e1b54e2..e90d53a 100644 --- a/webrtc-android/app/src/main/kotlin/io/getstream/webrtc/sample/compose/ui/screens/video/VideoCallScreen.kt +++ b/webrtc-android/app/src/main/kotlin/io/getstream/webrtc/sample/compose/ui/screens/video/VideoCallScreen.kt @@ -59,6 +59,8 @@ fun VideoCallScreen() { val localVideoTrackState by sessionManager.localVideoTrackFlow.collectAsState(null) val localVideoTrack = localVideoTrackState + var callMediaState by remember { mutableStateOf(CallMediaState()) } + if (remoteVideoTrack != null) { VideoRenderer( videoTrack = remoteVideoTrack, @@ -68,7 +70,7 @@ fun VideoCallScreen() { ) } - if (localVideoTrack != null) { + if (localVideoTrack != null && callMediaState.isCameraEnabled) { FloatingVideoRenderer( modifier = Modifier .size(width = 150.dp, height = 210.dp) @@ -81,7 +83,6 @@ fun VideoCallScreen() { } val activity = (LocalContext.current as? Activity) - var callMediaState by remember { mutableStateOf(CallMediaState()) } VideoCallControls( modifier = Modifier @@ -98,6 +99,7 @@ fun VideoCallScreen() { is CallAction.ToggleCamera -> { val enabled = callMediaState.isCameraEnabled.not() callMediaState = callMediaState.copy(isCameraEnabled = enabled) + sessionManager.enableCamera(enabled) } CallAction.FlipCamera -> sessionManager.flipCamera() CallAction.LeaveCall -> { diff --git a/webrtc-android/app/src/main/kotlin/io/getstream/webrtc/sample/compose/webrtc/sessions/WebRtcSessionManager.kt b/webrtc-android/app/src/main/kotlin/io/getstream/webrtc/sample/compose/webrtc/sessions/WebRtcSessionManager.kt index 75d4492..f7700a0 100644 --- a/webrtc-android/app/src/main/kotlin/io/getstream/webrtc/sample/compose/webrtc/sessions/WebRtcSessionManager.kt +++ b/webrtc-android/app/src/main/kotlin/io/getstream/webrtc/sample/compose/webrtc/sessions/WebRtcSessionManager.kt @@ -37,5 +37,7 @@ interface WebRtcSessionManager { fun enableMicrophone(enabled: Boolean) + fun enableCamera(enabled: Boolean) + fun disconnect() } diff --git a/webrtc-android/app/src/main/kotlin/io/getstream/webrtc/sample/compose/webrtc/sessions/WebRtcSessionManagerImpl.kt b/webrtc-android/app/src/main/kotlin/io/getstream/webrtc/sample/compose/webrtc/sessions/WebRtcSessionManagerImpl.kt index d1e40a7..ec0cd5a 100644 --- a/webrtc-android/app/src/main/kotlin/io/getstream/webrtc/sample/compose/webrtc/sessions/WebRtcSessionManagerImpl.kt +++ b/webrtc-android/app/src/main/kotlin/io/getstream/webrtc/sample/compose/webrtc/sessions/WebRtcSessionManagerImpl.kt @@ -214,6 +214,14 @@ class WebRtcSessionManagerImpl( audioManager?.isMicrophoneMute = !enabled } + override fun enableCamera(enabled: Boolean) { + if (enabled) { + videoCapturer.startCapture(resolution.width, resolution.height, 30) + } else { + videoCapturer.stopCapture() + } + } + override fun disconnect() { // dispose audio & video tracks. remoteVideoTrackFlow.replayCache.forEach { videoTrack ->