From 6e37f0d165a28b59d92c5217b23e85a045f7ca10 Mon Sep 17 00:00:00 2001
From: kkostiuk <kateryna.kostiuk@savoirfairelinux.com>
Date: Mon, 17 May 2021 14:28:49 -0400
Subject: [PATCH] call: stop camera when peer refuse call

Gitlab: #136

Change-Id: I67831e9603380a516a06f8baf2a177c28d042a02
---
 Ring/Ring/Calls/CallViewModel.swift | 28 +++++++++++++++++++---------
 1 file changed, 19 insertions(+), 9 deletions(-)

diff --git a/Ring/Ring/Calls/CallViewModel.swift b/Ring/Ring/Calls/CallViewModel.swift
index 151a3faa0..175524aba 100644
--- a/Ring/Ring/Calls/CallViewModel.swift
+++ b/Ring/Ring/Calls/CallViewModel.swift
@@ -84,6 +84,10 @@ class CallViewModel: Stateable, ViewModel {
             if oldValue != nil {
                 return
             }
+            if !(self.call?.isAudioOnly ?? true) {
+                self.videoService.startVideoCaptureBeforeCall()
+            }
+            self.subscribeToCallFinished()
             self.callService.currentConferenceEvent
                 .asObservable()
                 .filter({ [weak self] conference-> Bool in
@@ -103,8 +107,6 @@ class CallViewModel: Stateable, ViewModel {
                         }
                         let isModerator = self.callService.isModerator(participantId: account.jamiId, inConference: conf.conferenceID)
                         if isModerator != self.containerViewModel?.isConference {
-//                            guard let updatedCall = self.callService.call(callID: call.callId) else { return }
-//                            self.call = updatedCall
                             self.containerViewModel?.isConference = isModerator
                             self.conferenceMode.accept(isModerator)
                         }
@@ -183,9 +185,6 @@ class CallViewModel: Stateable, ViewModel {
 
     var rendererId = ""
     lazy var capturedFrame: Observable<UIImage?> = {
-        if !(self.call?.isAudioOnly ?? true) {
-            videoService.startVideoCaptureBeforeCall()
-        }
         return videoService.capturedVideoFrame.asObservable().map({ frame in
             return frame
         })
@@ -213,10 +212,6 @@ class CallViewModel: Stateable, ViewModel {
                         return !hide
                     }
                 }
-                if hide {
-                    self?.videoService.setCameraOrientation(orientation: UIDevice.current.orientation)
-                    self?.callsProvider.stopCall(callUUID: call.callUUID)
-                }
                 return hide
             })
     }()
@@ -638,6 +633,21 @@ extension CallViewModel {
     func showDialpad() {
         self.stateSubject.onNext(ConversationState.showDialpad(inCall: true))
     }
+
+    func subscribeToCallFinished() {
+        dismisVC
+            .share()
+            .filter { dismised in
+                return dismised
+            }
+            .subscribe { [weak self ] _ in
+                guard let self = self, let call = self.call else { return }
+                self.videoService.stopCapture()
+                self.videoService.setCameraOrientation(orientation: UIDevice.current.orientation)
+                self.callsProvider.stopCall(callUUID: call.callUUID)
+            }
+            .disposed(by: self.disposeBag)
+    }
 }
 // MARK: conference layout
 extension CallViewModel {
-- 
GitLab