This commit is contained in:
Trey t
2023-06-14 21:26:50 -05:00
parent 6ee4a9420b
commit bf58ca5167
16 changed files with 1133 additions and 97 deletions

View File

@@ -6,15 +6,63 @@
//
import SwiftUI
import Combine
@main
struct Werkout_iosApp: App {
let persistenceController = PersistenceController.shared
@ObservedObject var bridgeModule = BridgeModule.shared
@State var additionalWindows: [UIWindow] = []
private var screenDidConnectPublisher: AnyPublisher<UIScreen, Never> {
NotificationCenter.default
.publisher(for: UIScreen.didConnectNotification)
.compactMap { $0.object as? UIScreen }
.receive(on: RunLoop.main)
.eraseToAnyPublisher()
}
private var screenDidDisconnectPublisher: AnyPublisher<UIScreen, Never> {
NotificationCenter.default
.publisher(for: UIScreen.didDisconnectNotification)
.compactMap { $0.object as? UIScreen }
.receive(on: RunLoop.main)
.eraseToAnyPublisher()
}
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedObjectContext, persistenceController.container.viewContext)
MainView()
.environmentObject(bridgeModule)
.onReceive(
screenDidConnectPublisher,
perform: screenDidConnect
)
.onReceive(
screenDidDisconnectPublisher,
perform: screenDidDisconnect
)
}
}
private func screenDidDisconnect(_ screen: UIScreen) {
additionalWindows.removeAll { $0.screen == screen }
bridgeModule.isShowingOnExternalDisplay = false
}
private func screenDidConnect(_ screen: UIScreen) {
let window = UIWindow(frame: screen.bounds)
window.windowScene = UIApplication.shared.connectedScenes
.first { ($0 as? UIWindowScene)?.screen == screen }
as? UIWindowScene
let view = ExternalWorkoutDetailView()
.environmentObject(bridgeModule)
let controller = UIHostingController(rootView: view)
window.rootViewController = controller
window.isHidden = false
additionalWindows.append(window)
bridgeModule.isShowingOnExternalDisplay = true
}
}