mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-05-17 07:21:58 +00:00
bump version
This commit is contained in:
parent
f2e9b27df5
commit
2f032bae81
3 changed files with 140 additions and 3 deletions
|
|
@ -1,3 +1,3 @@
|
||||||
CURRENT_PROJECT_VERSION=30
|
CURRENT_PROJECT_VERSION=31
|
||||||
MARKETING_VERSION=0.1.0
|
MARKETING_VERSION=0.1.3
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,94 @@ import UIKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import ComposeApp
|
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 {
|
struct ComposeView: UIViewControllerRepresentable {
|
||||||
func makeUIViewController(context: Context) -> UIViewController {
|
func makeUIViewController(context: Context) -> UIViewController {
|
||||||
// Register MPV player bridge before Compose initializes
|
// Register MPV player bridge before Compose initializes
|
||||||
|
|
@ -9,7 +97,7 @@ struct ComposeView: UIViewControllerRepresentable {
|
||||||
|
|
||||||
let controller = MainViewControllerKt.MainViewController()
|
let controller = MainViewControllerKt.MainViewController()
|
||||||
controller.view.backgroundColor = UIColor(red: 0.008, green: 0.016, blue: 0.016, alpha: 1.0)
|
controller.view.backgroundColor = UIColor(red: 0.008, green: 0.016, blue: 0.016, alpha: 1.0)
|
||||||
return controller
|
return RootComposeViewController(contentController: controller)
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
|
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
|
||||||
|
|
|
||||||
|
|
@ -167,6 +167,22 @@ final class MPVPlayerViewController: UIViewController {
|
||||||
}
|
}
|
||||||
private var _currentErrorMessage: String?
|
private var _currentErrorMessage: String?
|
||||||
|
|
||||||
|
override var prefersHomeIndicatorAutoHidden: Bool {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
|
||||||
|
[.bottom, .left, .right]
|
||||||
|
}
|
||||||
|
|
||||||
|
override var prefersStatusBarHidden: Bool {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
|
||||||
|
.fade
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: - Lifecycle
|
// MARK: - Lifecycle
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
|
|
@ -181,6 +197,12 @@ final class MPVPlayerViewController: UIViewController {
|
||||||
|
|
||||||
setupMpv()
|
setupMpv()
|
||||||
setupNotifications()
|
setupNotifications()
|
||||||
|
refreshImmersiveSystemUI()
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
|
super.viewWillAppear(animated)
|
||||||
|
refreshImmersiveSystemUI()
|
||||||
}
|
}
|
||||||
|
|
||||||
override func viewDidLayoutSubviews() {
|
override func viewDidLayoutSubviews() {
|
||||||
|
|
@ -188,6 +210,16 @@ final class MPVPlayerViewController: UIViewController {
|
||||||
metalLayer.frame = view.bounds
|
metalLayer.frame = view.bounds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func viewDidAppear(_ animated: Bool) {
|
||||||
|
super.viewDidAppear(animated)
|
||||||
|
refreshImmersiveSystemUI()
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewSafeAreaInsetsDidChange() {
|
||||||
|
super.viewSafeAreaInsetsDidChange()
|
||||||
|
refreshImmersiveSystemUI()
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: - MPV Setup
|
// MARK: - MPV Setup
|
||||||
|
|
||||||
private func setupMpv() {
|
private func setupMpv() {
|
||||||
|
|
@ -633,6 +665,23 @@ final class MPVPlayerViewController: UIViewController {
|
||||||
.joined(separator: ",")
|
.joined(separator: ",")
|
||||||
checkError(mpv_set_property_string(mpv, "http-header-fields", serialized))
|
checkError(mpv_set_property_string(mpv, "http-header-fields", serialized))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func refreshImmersiveSystemUI() {
|
||||||
|
setNeedsUpdateOfHomeIndicatorAutoHidden()
|
||||||
|
setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
|
||||||
|
setNeedsStatusBarAppearanceUpdate()
|
||||||
|
|
||||||
|
var currentParent = parent
|
||||||
|
while let controller = currentParent {
|
||||||
|
controller.setNeedsUpdateOfHomeIndicatorAutoHidden()
|
||||||
|
controller.setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
|
||||||
|
controller.setNeedsStatusBarAppearanceUpdate()
|
||||||
|
if let rootController = controller as? RootComposeViewController {
|
||||||
|
rootController.refreshImmersiveSystemUI()
|
||||||
|
}
|
||||||
|
currentParent = controller.parent
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Bridge Creator (implements Kotlin protocol)
|
// MARK: - Bridge Creator (implements Kotlin protocol)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue