From 48874c0efdca0100d79638ae031fce14c5953c20 Mon Sep 17 00:00:00 2001
From: Zohaib Iqbal Kambrani <>
Date: Mon, 14 Jun 2021 17:27:21 +0300
Subject: [PATCH] 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 @@
-
+
+
+
@@ -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
- }
}