// // 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