mirror of https://github.com/jitsi/jitsi-meet
parent
8428dd95c2
commit
5858859838
@ -1,101 +0,0 @@ |
||||
// Copyright © 2018 Jitsi. All rights reserved. |
||||
|
||||
import Foundation |
||||
|
||||
/// Creates and coordinates the presentation of JitsiMeetViewController inside of an external window |
||||
/// which can be resized and dragged with custom PiP mode |
||||
open class JitsiMeetManager: NSObject { |
||||
|
||||
/// Defines if welcome screen should be on |
||||
public var welcomeScreenEnabled: Bool = false { |
||||
didSet { |
||||
meetViewController?.jitsiMeetView.welcomePageEnabled = welcomeScreenEnabled |
||||
} |
||||
} |
||||
|
||||
private(set) var meetViewController: JitsiMeetViewController? |
||||
private(set) var meetWindow: PiPWindow? |
||||
|
||||
override public init() { |
||||
super.init() |
||||
self.meetViewController = makeMeetViewController() |
||||
self.meetWindow = makeMeetWindow() |
||||
} |
||||
|
||||
public init(meetViewController: JitsiMeetViewController? = nil, meetWindow: PiPWindow? = nil) { |
||||
super.init() |
||||
self.meetViewController = meetViewController ?? makeMeetViewController() |
||||
self.meetWindow = meetWindow ?? makeMeetWindow() |
||||
} |
||||
|
||||
/// Presents and loads a jitsi meet view |
||||
/// |
||||
/// - Parameter url: The url of the presentation |
||||
public func load(withUrl url: URL?) { |
||||
meetWindow?.show() |
||||
meetViewController?.jitsiMeetView.load(url) |
||||
} |
||||
|
||||
/// Presents and loads a jitsi meet view with configuration |
||||
/// |
||||
/// - Parameter urlObject: A dictionary of keys to be used for configuration |
||||
public func load(withUrlObject urlObject: [AnyHashable : Any]?) { |
||||
meetWindow?.show() |
||||
meetViewController?.jitsiMeetView.loadURLObject(urlObject) |
||||
} |
||||
|
||||
deinit { |
||||
cleanUp() |
||||
} |
||||
|
||||
// MARK: - helpers |
||||
|
||||
fileprivate func cleanUp() { |
||||
// TODO: more clean up work on this |
||||
|
||||
meetWindow?.isHidden = true |
||||
meetWindow?.stopDragGesture() |
||||
} |
||||
|
||||
private func makeMeetViewController() -> JitsiMeetViewController { |
||||
let vc = JitsiMeetViewController() |
||||
vc.jitsiMeetView.welcomePageEnabled = self.welcomeScreenEnabled |
||||
vc.jitsiMeetView.pictureInPictureEnabled = true |
||||
vc.delegate = self |
||||
return vc |
||||
} |
||||
|
||||
private func makeMeetWindow() -> PiPWindow { |
||||
let window = PiPWindow(frame: UIScreen.main.bounds) |
||||
window.backgroundColor = .clear |
||||
window.windowLevel = UIWindowLevelStatusBar + 100 |
||||
window.rootViewController = self.meetViewController |
||||
return window |
||||
} |
||||
} |
||||
|
||||
extension JitsiMeetManager: JitsiMeetViewControllerDelegate { |
||||
|
||||
open func performPresentationUpdate(to: JitsiMeetPresentationUpdate) { |
||||
guard let meetWindow = self.meetWindow else { return } |
||||
|
||||
switch to { |
||||
case .enterPiP: |
||||
meetWindow.goToPiP() |
||||
case .traitChange: |
||||
// resize to full screen if rotation happens |
||||
if meetWindow.isInPiP { |
||||
meetWindow.goToFullScreen() |
||||
} |
||||
} |
||||
} |
||||
|
||||
open func meetingStarted() { |
||||
// do something |
||||
} |
||||
|
||||
open func meetingEnded(wasFailure: Bool) { |
||||
cleanUp() |
||||
} |
||||
} |
||||
|
@ -0,0 +1,97 @@ |
||||
/* |
||||
* 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 Foundation |
||||
|
||||
/// Coordinates the presentation of JitsiMeetViewController inside of |
||||
/// an external window that can be resized and dragged with custom PiP mode |
||||
open class JitsiMeetPresentationCoordinator: NSObject { |
||||
|
||||
fileprivate let meetViewController: JitsiMeetViewController |
||||
fileprivate let meetWindow: PiPWindow |
||||
|
||||
public init(meetViewController: JitsiMeetViewController? = nil, |
||||
meetWindow: PiPWindow? = nil) { |
||||
self.meetViewController = meetViewController ?? JitsiMeetViewController() |
||||
self.meetWindow = meetWindow ?? PiPWindow(frame: UIScreen.main.bounds) |
||||
|
||||
super.init() |
||||
|
||||
configureMeetWindow() |
||||
configureMeetViewController() |
||||
} |
||||
|
||||
public func jitsiMeetView() -> JitsiMeetView { |
||||
return meetViewController.jitsiMeetView |
||||
} |
||||
|
||||
public func show() { |
||||
meetWindow.show() |
||||
} |
||||
|
||||
public func hide() { |
||||
meetWindow.hide() |
||||
} |
||||
|
||||
deinit { |
||||
cleanUp() |
||||
} |
||||
|
||||
// MARK: - helpers |
||||
|
||||
fileprivate func cleanUp() { |
||||
// TODO: more clean up work on this |
||||
|
||||
meetWindow.isHidden = true |
||||
meetWindow.stopDragGesture() |
||||
} |
||||
|
||||
private func configureMeetViewController() { |
||||
meetViewController.jitsiMeetView.pictureInPictureEnabled = true |
||||
meetViewController.delegate = self |
||||
} |
||||
|
||||
private func configureMeetWindow() { |
||||
meetWindow.backgroundColor = .clear |
||||
meetWindow.windowLevel = UIWindowLevelStatusBar + 100 |
||||
meetWindow.rootViewController = self.meetViewController |
||||
} |
||||
} |
||||
|
||||
extension JitsiMeetPresentationCoordinator: JitsiMeetViewControllerDelegate { |
||||
|
||||
open func performPresentationUpdate(to: JitsiMeetPresentationUpdate) { |
||||
switch to { |
||||
case .enterPictureInPicture: |
||||
meetWindow.enterPictureInPicture() |
||||
case .traitChange: |
||||
// resize to full screen if rotation happens |
||||
if meetWindow.isInPiP { |
||||
meetWindow.exitPictureInPicture() |
||||
} |
||||
} |
||||
} |
||||
|
||||
open func conferenceStarted() { |
||||
if meetWindow.isHidden { |
||||
meetWindow.show() |
||||
} |
||||
} |
||||
|
||||
open func conferenceEnded(didFail: Bool) { |
||||
cleanUp() |
||||
} |
||||
} |
Before Width: | Height: | Size: 509 B After Width: | Height: | Size: 509 B |
Before Width: | Height: | Size: 724 B After Width: | Height: | Size: 724 B |
Loading…
Reference in new issue