import UIKit import SwiftUI import ComposeApp final class RootComposeViewController: UIViewController { private let contentController: UIViewController init(contentController: UIViewController) { self.contentController = contentController super.init(nibName: nil, bundle: nil) } @available(*, unavailable) required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .black contentController.view.backgroundColor = .black addChild(contentController) view.addSubview(contentController.view) contentController.view.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ contentController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor), contentController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor), contentController.view.topAnchor.constraint(equalTo: view.topAnchor), contentController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor), ]) contentController.didMove(toParent: self) } override var childForHomeIndicatorAutoHidden: UIViewController? { immersiveController(in: contentController) ?? contentController } override var childForScreenEdgesDeferringSystemGestures: UIViewController? { immersiveController(in: contentController) ?? contentController } override var childForStatusBarHidden: UIViewController? { immersiveController(in: contentController) ?? contentController } override var prefersHomeIndicatorAutoHidden: Bool { immersiveController(in: contentController)?.prefersHomeIndicatorAutoHidden ?? false } override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge { immersiveController(in: contentController)?.preferredScreenEdgesDeferringSystemGestures ?? [] } override var prefersStatusBarHidden: Bool { immersiveController(in: contentController)?.prefersStatusBarHidden ?? false } override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { .fade } func refreshImmersiveSystemUI() { setNeedsUpdateOfHomeIndicatorAutoHidden() setNeedsUpdateOfScreenEdgesDeferringSystemGestures() setNeedsStatusBarAppearanceUpdate() } private func immersiveController(in controller: UIViewController?) -> UIViewController? { guard let controller else { return nil } if controller.prefersHomeIndicatorAutoHidden || !controller.preferredScreenEdgesDeferringSystemGestures.isEmpty || controller.prefersStatusBarHidden { return controller } if let presented = immersiveController(in: controller.presentedViewController) { return presented } for child in controller.children.reversed() { if let immersiveChild = immersiveController(in: child) { return immersiveChild } } return nil } } struct ComposeView: UIViewControllerRepresentable { func makeUIViewController(context: Context) -> UIViewController { // Register MPV player bridge before Compose initializes NuvioPlayerRegistration.register() let controller = MainViewControllerKt.MainViewController() controller.view.backgroundColor = UIColor(red: 0.008, green: 0.016, blue: 0.016, alpha: 1.0) return RootComposeViewController(contentController: controller) } func updateUIViewController(_ uiViewController: UIViewController, context: Context) {} } struct ContentView: View { var body: some View { ComposeView() .ignoresSafeArea() } }