NuvioStreaming/iosApp/iosApp/ContentView.swift
2026-04-20 17:14:38 +05:30

111 lines
3.8 KiB
Swift

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()
}
}