From 48874c0efdca0100d79638ae031fce14c5953c20 Mon Sep 17 00:00:00 2001 From: Zohaib Iqbal Kambrani <> Date: Mon, 14 Jun 2021 17:27:21 +0300 Subject: [PATCH 1/2] no message --- ios/Runner/Base.lproj/Main.storyboard | 172 ++++++++++++----------- ios/Runner/MainAppViewController.swift | 78 +++++++--- ios/Runner/VideoCallViewController.swift | 59 ++++---- 3 files changed, 183 insertions(+), 126 deletions(-) diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard index cecbd930..c1c16274 100755 --- a/ios/Runner/Base.lproj/Main.storyboard +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -39,79 +39,18 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - + @@ -128,7 +67,7 @@ - + @@ -261,7 +201,7 @@ - + @@ -270,11 +210,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -285,7 +293,10 @@ + + + @@ -294,17 +305,19 @@ + - + + @@ -333,7 +346,6 @@ - diff --git a/ios/Runner/MainAppViewController.swift b/ios/Runner/MainAppViewController.swift index 87610042..ffca444c 100644 --- a/ios/Runner/MainAppViewController.swift +++ b/ios/Runner/MainAppViewController.swift @@ -13,9 +13,10 @@ class MainAppViewController: FlutterViewController{ var videoCallContainer:AADraggableView! var videoCallViewController:VideoCallViewController! var videoCallFlutterResult:FlutterResult? - var vdoCallViewMinConstraint:[NSLayoutConstraint]! - var vdoCallViewMaxConstraint:[NSLayoutConstraint]! - + var vdoCallViewFloatRectConstraint:[NSLayoutConstraint]! + var vdoCallViewFullConstraint:[NSLayoutConstraint]! + var vdoCallViewFloatCircleConstraint:[NSLayoutConstraint]! + override func viewDidLoad() { super.viewDidLoad() @@ -58,15 +59,15 @@ extension MainAppViewController : ICallProtocol{ view.addSubview(videoCallContainer) setVideoViewConstrints() - NSLayoutConstraint.activate(vdoCallViewMaxConstraint) - NSLayoutConstraint.deactivate(vdoCallViewMinConstraint) + NSLayoutConstraint.activate(vdoCallViewFullConstraint) + NSLayoutConstraint.deactivate(vdoCallViewFloatRectConstraint) ViewEmbedder.embed( withIdentifier: "videoCall", // Storyboard ID parent: self, container: self.videoCallContainer){ vc in self.videoCallViewController = vc as? VideoCallViewController - + } } @@ -82,8 +83,17 @@ extension MainAppViewController : ICallProtocol{ if let arguments = call.arguments as? NSDictionary{ showVideoCallView(true) - videoCallViewController.onFloat = { min in - self.floatVideoCallView(min) + videoCallViewController.onRectFloat = { min in + self.rectFloatVideoCallView(min) + if(min){ + self.videoCallContainer.repositionIfNeeded() + } + } + + videoCallViewController.onCircleFloat = { min in + self.circleFloatVideoCallView(min) + self.videoCallContainer.reposition = min ? .free : .edgesOnly + self.videoCallContainer.repositionIfNeeded() } videoCallViewController.onCallConnect = { self.videoCallChannel?.invokeMethod("onCallConnected",arguments: nil) @@ -99,16 +109,18 @@ extension MainAppViewController : ICallProtocol{ } - private func floatVideoCallView(_ value:Bool){ + private func rectFloatVideoCallView(_ value:Bool){ videoCallContainer.enable(value) UIView.animate(withDuration: 0.5) { if(value){ - NSLayoutConstraint.deactivate(self.vdoCallViewMaxConstraint) - NSLayoutConstraint.activate(self.vdoCallViewMinConstraint) + NSLayoutConstraint.deactivate(self.vdoCallViewFullConstraint) + NSLayoutConstraint.deactivate(self.vdoCallViewFloatCircleConstraint) + NSLayoutConstraint.activate(self.vdoCallViewFloatRectConstraint) }else{ - NSLayoutConstraint.deactivate(self.vdoCallViewMinConstraint) - NSLayoutConstraint.activate(self.vdoCallViewMaxConstraint) + NSLayoutConstraint.deactivate(self.vdoCallViewFloatRectConstraint) + NSLayoutConstraint.deactivate(self.vdoCallViewFloatCircleConstraint) + NSLayoutConstraint.activate(self.vdoCallViewFullConstraint) } self.videoCallContainer.layer.cornerRadius = value ? 10 : 0 self.videoCallContainer.layer.borderColor = value ? UIColor.white.cgColor : nil @@ -117,6 +129,28 @@ extension MainAppViewController : ICallProtocol{ } } + private func circleFloatVideoCallView(_ value:Bool){ + videoCallContainer.enable(value) + + UIView.animate(withDuration: 0.5) { + if(value){ + NSLayoutConstraint.deactivate(self.vdoCallViewFullConstraint) + NSLayoutConstraint.deactivate(self.vdoCallViewFloatRectConstraint) + NSLayoutConstraint.activate(self.vdoCallViewFloatCircleConstraint) + self.videoCallContainer.layer.cornerRadius = 35 + }else{ + NSLayoutConstraint.activate(self.vdoCallViewFloatRectConstraint) + NSLayoutConstraint.deactivate(self.vdoCallViewFullConstraint) + NSLayoutConstraint.deactivate(self.vdoCallViewFloatCircleConstraint) + self.videoCallContainer.layer.cornerRadius = 10 + + } + self.videoCallContainer.layer.borderColor = value ? UIColor.white.cgColor : nil + self.videoCallContainer.layer.borderWidth = value ? 2 : 0 + self.view.layoutIfNeeded() + } + } + private func showVideoCallView(_ value:Bool){ UIView.animate(withDuration: 0.5) { self.videoCallContainer.isHidden = !value @@ -133,21 +167,31 @@ extension MainAppViewController : ICallProtocol{ func setVideoViewConstrints(){ + videoCallContainer.layer.shadowColor = UIColor.black.cgColor + videoCallContainer.layer.shadowOffset = CGSize(width: 1, height: 1) + videoCallContainer.layer.shadowRadius = 5 + let screen = UIScreen.main.bounds videoCallContainer.translatesAutoresizingMaskIntoConstraints = false - vdoCallViewMinConstraint = [ + vdoCallViewFullConstraint = [ + videoCallContainer.topAnchor.constraint(equalTo: view.topAnchor), + videoCallContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor), + videoCallContainer.widthAnchor.constraint(equalToConstant: screen.width), + videoCallContainer.heightAnchor.constraint(equalToConstant: screen.height) + ] + vdoCallViewFloatRectConstraint = [ videoCallContainer.topAnchor.constraint(equalTo: view.topAnchor, constant: 20), videoCallContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20), videoCallContainer.widthAnchor.constraint(equalToConstant: screen.width/3), videoCallContainer.heightAnchor.constraint(equalToConstant: screen.height/3.5) ] - vdoCallViewMaxConstraint = [ + vdoCallViewFloatCircleConstraint = [ videoCallContainer.topAnchor.constraint(equalTo: view.topAnchor), videoCallContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor), - videoCallContainer.widthAnchor.constraint(equalToConstant: screen.width), - videoCallContainer.heightAnchor.constraint(equalToConstant: screen.height) + videoCallContainer.widthAnchor.constraint(equalToConstant: 70), + videoCallContainer.heightAnchor.constraint(equalToConstant: 70) ] } diff --git a/ios/Runner/VideoCallViewController.swift b/ios/Runner/VideoCallViewController.swift index 27268128..02a70a0c 100644 --- a/ios/Runner/VideoCallViewController.swift +++ b/ios/Runner/VideoCallViewController.swift @@ -34,8 +34,8 @@ class VideoCallViewController: UIViewController { var seconds = 30 var isUserConnect : Bool = false - var onFloat:((Bool)->Void)? = nil - var onMinimize:(()->Void)? = nil + var onRectFloat:((Bool)->Void)? = nil + var onCircleFloat:((Bool)->Void)? = nil var onCallConnect:(()->Void)? = nil var onCallDisconnect:(()->Void)? = nil @@ -50,13 +50,15 @@ class VideoCallViewController: UIViewController { @IBOutlet var minimizeConstraint: [NSLayoutConstraint]! @IBOutlet var maximisedConstraint: [NSLayoutConstraint]! + @IBOutlet weak var btnMinimize: UIButton! @IBOutlet weak var hideVideoBtn: UIButton! - @IBOutlet weak var draggableBoundryDefiner: UIView! var localVideoDraggable:AADraggableView? @IBOutlet weak var controlButtons: UIView! @IBOutlet weak var remoteVideoMutedIndicator: UIImageView! @IBOutlet weak var localVideoMutedBg: UIView! + @IBOutlet weak var localVideoContainer: UIView! + @IBOutlet weak var topBar: UIView! @IBOutlet weak var lblCallDuration: UILabel! @IBOutlet weak var remoteVideo: UIView! @IBOutlet weak var localVideo: UIView!{ @@ -69,18 +71,31 @@ class VideoCallViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - localVideoDraggable?.respectedView = draggableBoundryDefiner + localVideoDraggable?.respectedView = localVideoContainer } + @objc func click(gesture:UIGestureRecognizer){ + gesture.view?.removeFromSuperview() + } + + @IBAction func onVideoContainerTapped(_ sender: Any) { + if(hideVideoBtn.isSelected){ + circleFloatBtnTapped(hideVideoBtn) + + }else if(btnMinimize.isSelected){ + btnMinimizeTapped(btnMinimize) + }else if(!btnMinimize.isSelected){ + // Swipe video here + } + } @IBAction func didClickMuteButton(_ sender: UIButton) { sender.isSelected = !sender.isSelected publisher!.publishAudio = !sender.isSelected } - @IBAction func didClickSpeakerButton(_ sender: UIButton) { + @IBAction func didClickSpeakerButton(_ sender: UIButton) { sender.isSelected = !sender.isSelected subscriber?.subscribeToAudio = !sender.isSelected - // resetHideButtonsTimer() } @IBAction func didClickVideoMuteButton(_ sender: UIButton) { @@ -92,7 +107,6 @@ class VideoCallViewController: UIViewController { } localVideo.isHidden = sender.isSelected localVideoMutedBg.isHidden = !sender.isSelected - // resetHideButtonsTimer() } @@ -104,7 +118,6 @@ class VideoCallViewController: UIViewController { } else { publisher!.cameraPosition = AVCaptureDevice.Position.back } - /// resetHideButtonsTimer() } @IBAction func hangUp(_ sender: UIButton) { @@ -112,14 +125,19 @@ class VideoCallViewController: UIViewController { sessionDisconnect() } - @IBAction func hideVideoBtnTapped(_ sender: Any) { - onMinimize?() + @IBAction func circleFloatBtnTapped(_ sender: UIButton) { + sender.isSelected = !sender.isSelected + onCircleFloat?(sender.isSelected) + topBar.isHidden = sender.isSelected + controlButtons.isHidden = sender.isSelected + localVideo.isHidden = sender.isSelected + self.publisher?.view?.layoutIfNeeded() } var floated = false - @IBAction func onMinimize(_ sender: UIButton) { + @IBAction func btnMinimizeTapped(_ sender: UIButton) { floated = !floated - onFloat?(floated) + onRectFloat?(floated) sender.isSelected = floated NSLayoutConstraint.activate(floated ? minimizeConstraint : maximisedConstraint) @@ -171,7 +189,6 @@ class VideoCallViewController: UIViewController { self.DoctorId = params.doctorId ?? 0 self.baseUrl = params.baseUrl ?? "" - setupButtons() askForMicrophonePermission() requestCameraPermissionsIfNeeded() hideVideoMuted() @@ -238,13 +255,6 @@ class VideoCallViewController: UIViewController { } } - - func setupButtons() { - perform(#selector(hideControlButtons), with: nil, afterDelay: 3) - let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(remoteVideoTapped(_:))) - view.addGestureRecognizer(tapGestureRecognizer) - view.isUserInteractionEnabled = true - } // MARK: -Microphone Camera and Permission Request func askForMicrophonePermission() { @@ -481,12 +491,6 @@ extension VideoCallViewController: OTPublisherDelegate { func publisher(_ publisher: OTPublisherKit, didFailWithError error: OTError) { print("The publisher failed: \(error)") } - @objc func remoteVideoTapped(_ recognizer: UITapGestureRecognizer?) { - if controlButtons.isHidden { - controlButtons.isHidden = false - perform(#selector(hideControlButtons), with: nil, afterDelay: 3) - } - } } extension VideoCallViewController: OTSubscriberDelegate { @@ -497,8 +501,5 @@ extension VideoCallViewController: OTSubscriberDelegate { public func subscriber(_ subscriber: OTSubscriberKit, didFailWithError error: OTError) { print("The subscriber failed to connect to the stream.") } - @objc func hideControlButtons() { -// controlButtons.isHidden = true - } } From c1de90877749e897f4d456cf2825a96bd02452cf Mon Sep 17 00:00:00 2001 From: Zohaib Iqbal Kambrani <> Date: Wed, 16 Jun 2021 11:16:27 +0300 Subject: [PATCH 2/2] no message --- ios/Runner/Base.lproj/Main.storyboard | 161 +++++++++++--------- ios/Runner/Extensions.swift | 13 +- ios/Runner/MainAppViewController.swift | 30 ++-- ios/Runner/VideoCallRequestParameters.swift | 4 +- ios/Runner/VideoCallViewController.swift | 91 ++++++----- 5 files changed, 167 insertions(+), 132 deletions(-) diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard index c1c16274..2bdee5a2 100755 --- a/ios/Runner/Base.lproj/Main.storyboard +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -41,18 +41,94 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -210,76 +286,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -300,23 +309,25 @@ + + + - - + diff --git a/ios/Runner/Extensions.swift b/ios/Runner/Extensions.swift index c73f49e2..b79c8deb 100644 --- a/ios/Runner/Extensions.swift +++ b/ios/Runner/Extensions.swift @@ -9,12 +9,19 @@ import AADraggableView extension AADraggableView{ func enable(_ enable:Bool){ - if enable == false{ + isEnabled = enable + if enable == false{ gestureRecognizers?.forEach({ gest in removeGestureRecognizer(gest) }) - }else{ - isEnabled = true } } } + +extension UIView{ + func hidden(_ hidden:Bool, rootView:UIView){ + UIView.transition(with: rootView, duration: 0.5, options: .transitionCrossDissolve, animations: { + self.isHidden = hidden + }) + } +} diff --git a/ios/Runner/MainAppViewController.swift b/ios/Runner/MainAppViewController.swift index ffca444c..c7b7a18d 100644 --- a/ios/Runner/MainAppViewController.swift +++ b/ios/Runner/MainAppViewController.swift @@ -72,9 +72,7 @@ extension MainAppViewController : ICallProtocol{ } private func showVideo(show:Bool){ - UIView.transition(with: view, duration: 0.5, options: .transitionCrossDissolve, animations: { - self.videoCallContainer.isHidden = !show - }) + self.videoCallContainer.hidden(!show, rootView: view) } private func startVideoCall(result: @escaping FlutterResult, call:FlutterMethodCall) { @@ -83,23 +81,19 @@ extension MainAppViewController : ICallProtocol{ if let arguments = call.arguments as? NSDictionary{ showVideoCallView(true) - videoCallViewController.onRectFloat = { min in - self.rectFloatVideoCallView(min) - if(min){ - self.videoCallContainer.repositionIfNeeded() - } + videoCallViewController.onRectFloat = { isRectFloat in + self.rectFloatVideoCallView(isRectFloat) } - videoCallViewController.onCircleFloat = { min in - self.circleFloatVideoCallView(min) - self.videoCallContainer.reposition = min ? .free : .edgesOnly - self.videoCallContainer.repositionIfNeeded() + videoCallViewController.onCircleFloat = { isCircleFloat in + self.circleFloatVideoCallView(isCircleFloat) } videoCallViewController.onCallConnect = { self.videoCallChannel?.invokeMethod("onCallConnected",arguments: nil) } videoCallViewController.onCallDisconnect = { self.showVideoCallView(false) + self.videoCallViewController.minimizeVideoState(state: false) self.videoCallChannel?.invokeMethod("onCallDisconnected",arguments: nil) } videoCallViewController.callBack = self @@ -130,7 +124,7 @@ extension MainAppViewController : ICallProtocol{ } private func circleFloatVideoCallView(_ value:Bool){ - videoCallContainer.enable(value) + videoCallContainer.reposition = value ? .sticky : .edgesOnly UIView.animate(withDuration: 0.5) { if(value){ @@ -152,9 +146,7 @@ extension MainAppViewController : ICallProtocol{ } private func showVideoCallView(_ value:Bool){ - UIView.animate(withDuration: 0.5) { - self.videoCallContainer.isHidden = !value - } + self.videoCallContainer.hidden(!value, rootView: view) } func sessionDone(res: Any) { @@ -182,14 +174,14 @@ extension MainAppViewController : ICallProtocol{ videoCallContainer.heightAnchor.constraint(equalToConstant: screen.height) ] vdoCallViewFloatRectConstraint = [ - videoCallContainer.topAnchor.constraint(equalTo: view.topAnchor, constant: 20), + videoCallContainer.topAnchor.constraint(equalTo: view.topAnchor, constant: 40), videoCallContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20), videoCallContainer.widthAnchor.constraint(equalToConstant: screen.width/3), videoCallContainer.heightAnchor.constraint(equalToConstant: screen.height/3.5) ] vdoCallViewFloatCircleConstraint = [ - videoCallContainer.topAnchor.constraint(equalTo: view.topAnchor), - videoCallContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor), + videoCallContainer.topAnchor.constraint(equalTo: view.topAnchor, constant: 40), + videoCallContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20), videoCallContainer.widthAnchor.constraint(equalToConstant: 70), videoCallContainer.heightAnchor.constraint(equalToConstant: 70) ] diff --git a/ios/Runner/VideoCallRequestParameters.swift b/ios/Runner/VideoCallRequestParameters.swift index 2366c562..543d7e8b 100644 --- a/ios/Runner/VideoCallRequestParameters.swift +++ b/ios/Runner/VideoCallRequestParameters.swift @@ -12,7 +12,8 @@ class VideoCallRequestParameters{ var generalId:String? var doctorId:Int? var baseUrl:String? - + var patientName:String? + init(dictionary:NSDictionary){ self.apiKey = dictionary["kApiKey"] as? String self.sessionId = dictionary["kSessionId"] as? String @@ -23,5 +24,6 @@ class VideoCallRequestParameters{ self.generalId = dictionary["generalId"] as? String self.doctorId = dictionary["DoctorId"] as? Int self.baseUrl = dictionary["baseUrl"] as? String + self.patientName = dictionary["patientName"] as? String } } diff --git a/ios/Runner/VideoCallViewController.swift b/ios/Runner/VideoCallViewController.swift index 02a70a0c..83865c6e 100644 --- a/ios/Runner/VideoCallViewController.swift +++ b/ios/Runner/VideoCallViewController.swift @@ -57,14 +57,15 @@ class VideoCallViewController: UIViewController { @IBOutlet weak var remoteVideoMutedIndicator: UIImageView! @IBOutlet weak var localVideoMutedBg: UIView! + @IBOutlet weak var btnScreenTap: UIButton! @IBOutlet weak var localVideoContainer: UIView! @IBOutlet weak var topBar: UIView! @IBOutlet weak var lblCallDuration: UILabel! - @IBOutlet weak var remoteVideo: UIView! - @IBOutlet weak var localVideo: UIView!{ + @IBOutlet weak var fullVideoView: UIView! + @IBOutlet weak var smallVideoView: UIView!{ didSet{ - localVideo.layer.borderColor = UIColor.white.cgColor - localVideoDraggable = localVideo?.superview as? AADraggableView + smallVideoView.layer.borderColor = UIColor.white.cgColor + localVideoDraggable = smallVideoView?.superview as? AADraggableView localVideoDraggable?.reposition = .edgesOnly } } @@ -78,16 +79,28 @@ class VideoCallViewController: UIViewController { gesture.view?.removeFromSuperview() } - @IBAction func onVideoContainerTapped(_ sender: Any) { + @IBAction func btnOnScreenTapped(_ sender: Any) { if(hideVideoBtn.isSelected){ circleFloatBtnTapped(hideVideoBtn) }else if(btnMinimize.isSelected){ btnMinimizeTapped(btnMinimize) - }else if(!btnMinimize.isSelected){ - // Swipe video here } } + + @IBAction func btnSwipeVideoTapped(_ sender: Any) { +// let smallVdoRender = smallVideoView.subviews.first +// let fullVdoRender = fullVideoView.subviews.first +// if let vdo = smallVdoRender{ +// fullVideoView.addSubview(vdo) +// } +// if let vdo = fullVdoRender{ +// smallVideoView.addSubview(vdo) +// } +// +// layoutVideoRenderViews() + } + @IBAction func didClickMuteButton(_ sender: UIButton) { sender.isSelected = !sender.isSelected publisher!.publishAudio = !sender.isSelected @@ -105,7 +118,7 @@ class VideoCallViewController: UIViewController { } else { publisher!.publishVideo = true } - localVideo.isHidden = sender.isSelected + smallVideoView.isHidden = sender.isSelected localVideoMutedBg.isHidden = !sender.isSelected } @@ -130,36 +143,41 @@ class VideoCallViewController: UIViewController { onCircleFloat?(sender.isSelected) topBar.isHidden = sender.isSelected controlButtons.isHidden = sender.isSelected - localVideo.isHidden = sender.isSelected + smallVideoView.isHidden = sender.isSelected self.publisher?.view?.layoutIfNeeded() } - var floated = false @IBAction func btnMinimizeTapped(_ sender: UIButton) { - floated = !floated - onRectFloat?(floated) - sender.isSelected = floated + minimizeVideoState(state: !sender.isSelected) + btnScreenTap.isHidden = !sender.isSelected + } + + func minimizeVideoState(state:Bool){ + btnMinimize.isSelected = state + onRectFloat?(state) - NSLayoutConstraint.activate(floated ? minimizeConstraint : maximisedConstraint) - NSLayoutConstraint.deactivate(floated ? maximisedConstraint : minimizeConstraint) - localVideoDraggable?.enable(!floated) + NSLayoutConstraint.activate(state ? minimizeConstraint : maximisedConstraint) + NSLayoutConstraint.deactivate(state ? maximisedConstraint : minimizeConstraint) + localVideoDraggable?.enable(!state) - lblRemoteUsername.isHidden = floated - hideVideoBtn.isHidden = !floated + lblRemoteUsername.isHidden = state + hideVideoBtn.isHidden = !state lblCallDuration.superview?.isHidden = !hideVideoBtn.isHidden - let min_ = floated UIView.animate(withDuration: 0.5) { - self.videoMuteBtn.isHidden = min_ - self.micMuteBtn.isHidden = min_ - self.camSwitchBtn.isHidden = min_ - - let localVdoSize = self.localVideo.bounds.size - let remoteVdoSize = self.remoteVideo.bounds.size - self.publisher?.view?.frame = CGRect(x: 0, y: 0, width: localVdoSize.width, height: localVdoSize.height) - self.subscriber?.view?.frame = CGRect(x: 0, y: 0, width: remoteVdoSize.width, height: remoteVdoSize.height) - self.publisher?.view?.layoutIfNeeded() - self.subscriber?.view?.layoutIfNeeded() + self.videoMuteBtn.isHidden = state + self.micMuteBtn.isHidden = state + self.camSwitchBtn.isHidden = state + self.layoutVideoRenderViews() + } + } + + func layoutVideoRenderViews(){ + if let publisherVdoSize = publisher?.view?.superview?.bounds.size{ + publisher?.view?.frame = CGRect(x: 0, y: 0, width: publisherVdoSize.width, height: publisherVdoSize.height) + } + if let subscriberVdoSize = subscriber?.view?.superview?.bounds.size{ + subscriber?.view?.frame = CGRect(x: 0, y: 0, width: subscriberVdoSize.width, height: subscriberVdoSize.height) } } @@ -179,6 +197,9 @@ class VideoCallViewController: UIViewController { } func start(params:VideoCallRequestParameters){ + lblRemoteUsername.text = params.patientName ?? "- - -" + btnScreenTap.isHidden = true + hideVideoBtn.isHidden = true self.kApiKey = params.apiKey ?? "" self.kSessionId = params.sessionId ?? "" @@ -193,6 +214,7 @@ class VideoCallViewController: UIViewController { requestCameraPermissionsIfNeeded() hideVideoMuted() setupSession() + } private func changeCallStatus(callStatus:Int){ @@ -397,10 +419,11 @@ extension VideoCallViewController: OTSessionDelegate { showAlert(error?.localizedDescription) } - publisher?.view!.frame = CGRect(x: 0, y: 0, width: localVideo.bounds.size.width, height: localVideo.bounds.size.height) + publisher?.view?.tag = 11 publisher?.view?.layer.cornerRadius = 5 publisher?.view?.clipsToBounds = true - localVideo.addSubview((publisher?.view)!) + smallVideoView.addSubview((publisher?.view)!) + layoutVideoRenderViews() } func sessionDidDisconnect(_ session: OTSession) { @@ -440,9 +463,9 @@ extension VideoCallViewController: OTSessionDelegate { guard let subscriberView = subscriber.view else { return } - - subscriberView.frame = CGRect(x: 0, y: 0, width: remoteVideo.bounds.width, height: remoteVideo.bounds.height) - remoteVideo.addSubview(subscriberView) + subscriberView.tag = 22 + fullVideoView.addSubview(subscriberView) + layoutVideoRenderViews() startUpdateCallDuration() onCallConnect?()