mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-05-17 15:32:01 +00:00
111 lines
3.8 KiB
Swift
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()
|
|
}
|
|
}
|