From de0a7bfcd358df2d4d973a937bba7e39c542aa13 Mon Sep 17 00:00:00 2001 From: Daniel Ornelas Date: Wed, 21 Mar 2018 14:27:25 -0500 Subject: [PATCH] Some improvements for handling completion of transitions. Fixed a wrong conferenceEnded value when user left the conversation. --- .../JitsiMeetPresentationCoordinator.swift | 22 ++++++++--------- .../JitsiMeetViewController.swift | 6 +++-- .../src/picture-in-picture/PiPWindow.swift | 24 +++++++++++-------- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/ios/sdk/src/picture-in-picture/JitsiMeetPresentationCoordinator.swift b/ios/sdk/src/picture-in-picture/JitsiMeetPresentationCoordinator.swift index 404bf4c01..adc7ddd62 100644 --- a/ios/sdk/src/picture-in-picture/JitsiMeetPresentationCoordinator.swift +++ b/ios/sdk/src/picture-in-picture/JitsiMeetPresentationCoordinator.swift @@ -38,12 +38,19 @@ open class JitsiMeetPresentationCoordinator: NSObject { return meetViewController.jitsiMeetView } - public func show() { - meetWindow.show() + open func show(completion: CompletionAction? = nil) { + meetWindow.show(completion: completion) } - public func hide() { - meetWindow.hide() + open func hide(completion: CompletionAction? = nil) { + meetWindow.hide(completion: completion) + } + + open func cleanUp() { + // TODO: more clean up work on this + + meetWindow.isHidden = true + meetWindow.stopDragGesture() } deinit { @@ -52,13 +59,6 @@ open class JitsiMeetPresentationCoordinator: NSObject { // 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 diff --git a/ios/sdk/src/picture-in-picture/JitsiMeetViewController.swift b/ios/sdk/src/picture-in-picture/JitsiMeetViewController.swift index c9232e428..112f4a902 100644 --- a/ios/sdk/src/picture-in-picture/JitsiMeetViewController.swift +++ b/ios/sdk/src/picture-in-picture/JitsiMeetViewController.swift @@ -83,7 +83,7 @@ extension JitsiMeetViewController: JitsiMeetViewDelegate { open func conferenceLeft(_ data: [AnyHashable : Any]!) { DispatchQueue.main.async { - self.delegate?.conferenceEnded(didFail: true) + self.delegate?.conferenceEnded(didFail: false) } } @@ -94,7 +94,9 @@ extension JitsiMeetViewController: JitsiMeetViewDelegate { } open func loadConfigError(_ data: [AnyHashable : Any]!) { - // do something + DispatchQueue.main.async { + self.delegate?.conferenceEnded(didFail: true) + } } open func enterPicture(inPicture data: [AnyHashable : Any]!) { diff --git a/ios/sdk/src/picture-in-picture/PiPWindow.swift b/ios/sdk/src/picture-in-picture/PiPWindow.swift index 1d9f8a02e..9dd4130c3 100644 --- a/ios/sdk/src/picture-in-picture/PiPWindow.swift +++ b/ios/sdk/src/picture-in-picture/PiPWindow.swift @@ -14,6 +14,9 @@ * limitations under the License. */ +/// Alias defining a completion closure that returns a Bool +public typealias CompletionAction = (Bool) -> Void + /// A window that allows its root view controller to be presented /// in full screen or in a custom Picture in Picture mode open class PiPWindow: UIWindow { @@ -50,23 +53,23 @@ open class PiPWindow: UIWindow { } /// animate in the window - open func show() { + open func show(completion: CompletionAction? = nil) { if self.isHidden || self.alpha < 1 { self.isHidden = false self.alpha = 0 - animateTransition { + + animateTransition(animations: { self.alpha = 1 - } + }, completion: completion) } } /// animate out the window - open func hide() { + open func hide(completion: CompletionAction? = nil) { if !self.isHidden || self.alpha > 0 { - animateTransition { - self.alpha = 0 - self.isHidden = true - } + animateTransition(animations: { + self.alpha = 1 + }, completion: completion) } } @@ -175,11 +178,12 @@ open class PiPWindow: UIWindow { // MARK: - Animation transition - private func animateTransition(animations: @escaping () -> Void) { + private func animateTransition(animations: @escaping () -> Void, + completion: CompletionAction?) { UIView.animate(withDuration: 0.1, delay: 0, options: .beginFromCurrentState, animations: animations, - completion: nil) + completion: completion) } }