78 lines
2.4 KiB
Swift
78 lines
2.4 KiB
Swift
//
|
|
// Copyright 2024 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import UIKit
|
|
|
|
#if DEBUG
|
|
public class SheetPreviewViewController: UIViewController {
|
|
private let animateFirstAppearance: Bool
|
|
private let presentAction: PresentAction
|
|
|
|
private enum PresentAction {
|
|
case createSheet(() -> UIViewController)
|
|
case presentSheet((_ viewController: SheetPreviewViewController, _ animated: Bool) -> Void)
|
|
|
|
func present(from viewController: SheetPreviewViewController, animated: Bool) {
|
|
switch self {
|
|
case let .createSheet(createSheet):
|
|
let sheet = createSheet()
|
|
viewController.present(sheet, animated: animated)
|
|
case let .presentSheet(presentSheet):
|
|
presentSheet(viewController, animated)
|
|
}
|
|
}
|
|
}
|
|
|
|
public init(
|
|
animateFirstAppearance: Bool = false,
|
|
presentSheet: @escaping (
|
|
_ viewController: SheetPreviewViewController,
|
|
_ animated: Bool,
|
|
) -> Void,
|
|
) {
|
|
self.animateFirstAppearance = animateFirstAppearance
|
|
self.presentAction = .presentSheet(presentSheet)
|
|
super.init(nibName: nil, bundle: nil)
|
|
}
|
|
|
|
public init(
|
|
animateFirstAppearance: Bool = false,
|
|
sheet: @escaping @autoclosure () -> UIViewController,
|
|
) {
|
|
self.animateFirstAppearance = animateFirstAppearance
|
|
self.presentAction = .createSheet(sheet)
|
|
super.init(nibName: nil, bundle: nil)
|
|
}
|
|
|
|
public init(
|
|
animateFirstAppearance: Bool = false,
|
|
createSheet: @escaping () -> UIViewController,
|
|
) {
|
|
self.animateFirstAppearance = animateFirstAppearance
|
|
self.presentAction = .createSheet(createSheet)
|
|
super.init(nibName: nil, bundle: nil)
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
override public func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
let button = OWSButton(title: "Present sheet") { [unowned self] in
|
|
self.presentAction.present(from: self, animated: true)
|
|
}
|
|
view.addSubview(button)
|
|
button.autoCenterInSuperview()
|
|
button.setTitleColor(UIColor.Signal.accent, for: .normal)
|
|
}
|
|
|
|
override public func viewDidAppear(_ animated: Bool) {
|
|
super.viewDidAppear(animated)
|
|
self.presentAction.present(from: self, animated: animateFirstAppearance)
|
|
}
|
|
}
|
|
#endif
|