/* * Copyright @ 2017-present Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import UIKit import JitsiMeet class ViewController: UIViewController { @IBOutlet weak var videoButton: UIButton? fileprivate var pipViewCoordinator: PiPViewCoordinator? fileprivate var jitsiMeetView: JitsiMeetView? override func viewDidLoad() { super.viewDidLoad() } override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) let rect = CGRect(origin: CGPoint.zero, size: size) pipViewCoordinator?.resetBounds(bounds: rect) } // MARK: - Actions @IBAction func openJitsiMeet(sender: Any?) { cleanUp() // create and configure jitsimeet view let jitsiMeetView = JitsiMeetView() jitsiMeetView.welcomePageEnabled = true jitsiMeetView.pictureInPictureEnabled = true jitsiMeetView.load(nil) jitsiMeetView.delegate = self self.jitsiMeetView = jitsiMeetView // Enable jitsimeet view to be a view that can be displayed // on top of all the things, and let the coordinator to manage // the view state and interactions pipViewCoordinator = PiPViewCoordinator(withView: jitsiMeetView) pipViewCoordinator?.configureAsStickyView(withParentView: view) // animate in jitsiMeetView.alpha = 0 pipViewCoordinator?.show() } fileprivate func cleanUp() { jitsiMeetView?.removeFromSuperview() jitsiMeetView = nil pipViewCoordinator = nil } } extension ViewController: JitsiMeetViewDelegate { func conferenceFailed(_ data: [AnyHashable : Any]!) { hideJitsiMeetViewAndCleanUp() } func conferenceLeft(_ data: [AnyHashable : Any]!) { hideJitsiMeetViewAndCleanUp() } func enterPicture(inPicture data: [AnyHashable : Any]!) { DispatchQueue.main.async { self.pipViewCoordinator?.enterPictureInPicture() } } private func hideJitsiMeetViewAndCleanUp() { DispatchQueue.main.async { self.pipViewCoordinator?.hide() { _ in self.cleanUp() } } } }