diff --git a/ios/Runner/Assets.xcassets/camera_back.imageset/Contents.json b/ios/Runner/Assets.xcassets/camera_back.imageset/Contents.json new file mode 100644 index 00000000..ab08ef1a --- /dev/null +++ b/ios/Runner/Assets.xcassets/camera_back.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "camera_back.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/Runner/Assets.xcassets/camera_back.imageset/camera_back.png b/ios/Runner/Assets.xcassets/camera_back.imageset/camera_back.png new file mode 100644 index 00000000..c3d63ac3 Binary files /dev/null and b/ios/Runner/Assets.xcassets/camera_back.imageset/camera_back.png differ diff --git a/ios/Runner/Assets.xcassets/camera_front.imageset/Contents.json b/ios/Runner/Assets.xcassets/camera_front.imageset/Contents.json new file mode 100644 index 00000000..a0e93123 --- /dev/null +++ b/ios/Runner/Assets.xcassets/camera_front.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "camera_front.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/Runner/Assets.xcassets/camera_front.imageset/camera_front.png b/ios/Runner/Assets.xcassets/camera_front.imageset/camera_front.png new file mode 100644 index 00000000..332ab0f5 Binary files /dev/null and b/ios/Runner/Assets.xcassets/camera_front.imageset/camera_front.png differ diff --git a/ios/Runner/Assets.xcassets/hide_video_icon.imageset/Contents.json b/ios/Runner/Assets.xcassets/hide_video_icon.imageset/Contents.json new file mode 100644 index 00000000..91a3b7b1 --- /dev/null +++ b/ios/Runner/Assets.xcassets/hide_video_icon.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "hide_video_icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/Runner/Assets.xcassets/hide_video_icon.imageset/hide_video_icon.png b/ios/Runner/Assets.xcassets/hide_video_icon.imageset/hide_video_icon.png new file mode 100644 index 00000000..8dea84b1 Binary files /dev/null and b/ios/Runner/Assets.xcassets/hide_video_icon.imageset/hide_video_icon.png differ diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard index 12e173a7..003f29f1 100755 --- a/ios/Runner/Base.lproj/Main.storyboard +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -1,6 +1,6 @@ - + @@ -16,7 +16,7 @@ - + @@ -34,84 +34,94 @@ - + - + - + - - + + - - - - - - - - - - - - - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + + + + + + - + - - + + + + + + + + + - - + + - - - - - - - - - + + - - - - - - + - + + + + + - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - + + - + - + + + + - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - + - - - - - - - - diff --git a/ios/Runner/MainAppViewController.swift b/ios/Runner/MainAppViewController.swift index 35ef4e1b..a6e4bcea 100644 --- a/ios/Runner/MainAppViewController.swift +++ b/ios/Runner/MainAppViewController.swift @@ -32,8 +32,10 @@ class MainAppViewController: FlutterViewController{ videoCallChannel.setMethodCallHandler({ (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in switch call.method { - case "openVideoCall": - self.startVideoCall(result: result, call: call) + case "openVideoCall": + self.startVideoCall(result: result, call: call) + case "showVideo": + self.showVideo() default: result(FlutterMethodNotImplemented) } @@ -69,6 +71,10 @@ extension MainAppViewController : ICallProtocol{ } } + private func showVideo(){ + videoCallContainer.isHidden = false + } + private func startVideoCall(result: @escaping FlutterResult, call:FlutterMethodCall) { videoCallFlutterResult = result @@ -78,6 +84,9 @@ extension MainAppViewController : ICallProtocol{ videoCallViewController.onMinimize = { min in self.minimizeVideoCall(min) } + videoCallViewController.onHide = { + self.videoCallContainer.isHidden = true + } videoCallViewController.onClose = videoCallClosed videoCallViewController.callBack = self videoCallViewController.start(params: VideoCallRequestParameters(dictionary: arguments)) diff --git a/ios/Runner/VideoCallViewController.swift b/ios/Runner/VideoCallViewController.swift index 69d65fb3..3e8b612c 100644 --- a/ios/Runner/VideoCallViewController.swift +++ b/ios/Runner/VideoCallViewController.swift @@ -35,23 +35,30 @@ class VideoCallViewController: UIViewController { var isUserConnect : Bool = false var onMinimize:((Bool)->Void)? = nil + var onHide:(()->Void)? = nil var onClose:(()->Void)? = nil + + @IBOutlet weak var lblRemoteUsername: UILabel! + // Bottom Actions - @IBOutlet weak var actionsHeightConstraint: NSLayoutConstraint! @IBOutlet weak var videoMuteBtn: UIButton! @IBOutlet weak var micMuteBtn: UIButton! - @IBOutlet weak var localvideoTopMargin: NSLayoutConstraint! + @IBOutlet var minimizeConstraint: [NSLayoutConstraint]! + @IBOutlet var maximisedConstraint: [NSLayoutConstraint]! + + @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 lblCallDuration: UILabel! @IBOutlet weak var remoteVideo: UIView! @IBOutlet weak var localVideo: UIView!{ didSet{ - localVideo.layer.borderColor = UIColor.white.cgColor localVideoDraggable = localVideo?.superview as? AADraggableView localVideoDraggable?.reposition = .edgesOnly } @@ -59,6 +66,7 @@ class VideoCallViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() + localVideoDraggable?.respectedView = draggableBoundryDefiner } @IBAction func didClickMuteButton(_ sender: UIButton) { @@ -107,12 +115,16 @@ class VideoCallViewController: UIViewController { minimized = !minimized onMinimize?(minimized) sender.isSelected = minimized + + NSLayoutConstraint.activate(minimized ? minimizeConstraint : maximisedConstraint) + NSLayoutConstraint.deactivate(minimized ? maximisedConstraint : minimizeConstraint) localVideoDraggable?.enable(!minimized) + lblRemoteUsername.isHidden = minimized + hideVideoBtn.isHidden = !minimized + let min_ = minimized UIView.animate(withDuration: 0.5) { - self.actionsHeightConstraint.constant = min_ ? 30 : 60 - self.localvideoTopMargin.constant = min_ ? 20 : 40 self.videoMuteBtn.isHidden = min_ self.micMuteBtn.isHidden = min_ @@ -125,6 +137,10 @@ class VideoCallViewController: UIViewController { } } + @IBAction func hideVideoBtnTapped(_ sender: Any) { + onHide?() + } + func start(params:VideoCallRequestParameters){ self.kApiKey = params.apiKey ?? "" @@ -352,6 +368,8 @@ extension VideoCallViewController: OTSessionDelegate { } publisher?.view!.frame = CGRect(x: 0, y: 0, width: localVideo.bounds.size.width, height: localVideo.bounds.size.height) + publisher?.view?.layer.cornerRadius = 5 + publisher?.view?.clipsToBounds = true localVideo.addSubview((publisher?.view)!) }