mirror of
https://github.com/yattee/yattee.git
synced 2026-10-31 08:57:17 +00:00
Look up the foreground scene instead of the first connected one
The swipe-action share sheet, the expanded player's safe area and the Dynamic Island side check took connectedScenes.first, which ignores which scene is active (on the iPhone Duo it can be the other panel's) and presented the share sheet from the main window, behind an expanded player. UIApplication.foregroundWindowScene/foregroundWindow resolve the foreground-active scene (else foreground-inactive, else any) and its key window, the order the widescreen layout already used. The share sheet now presents from the key window, which is the player's while it is up. The tvOS display mode manager uses the same lookup.
This commit is contained in:
@@ -186,9 +186,9 @@ struct VideoSwipeActionsModifier: ViewModifier {
|
||||
activityItems: [appEnvironment?.shareURL(for: video) ?? video.shareURL],
|
||||
applicationActivities: nil
|
||||
)
|
||||
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
|
||||
let window = windowScene.windows.first,
|
||||
let rootVC = window.rootViewController {
|
||||
// The key window is the expanded player's while it is up, so the
|
||||
// share sheet opens above it rather than behind it.
|
||||
if let rootVC = UIApplication.shared.foregroundWindow?.rootViewController {
|
||||
// Find the top-most view controller
|
||||
var topVC = rootVC
|
||||
while let presented = topVC.presentedViewController {
|
||||
|
||||
@@ -1767,9 +1767,7 @@ extension ExpandedPlayerSheet {
|
||||
Text(verbatim: "fullH: \(Int(fullHeight)) offset: \(Int(controlsOffset))")
|
||||
Text(verbatim: "pinned: \(isPanelPinned ? "Y" : "N") vis: \(isPanelVisible ? "Y" : "N") side: \(panelSide == .left ? "L" : "R")")
|
||||
#if os(iOS)
|
||||
let orientation = UIApplication.shared.connectedScenes
|
||||
.compactMap { $0 as? UIWindowScene }
|
||||
.first?.interfaceOrientation
|
||||
let orientation = UIApplication.shared.foregroundWindowScene?.interfaceOrientation
|
||||
Text(verbatim: "orient: \(orientation == .landscapeLeft ? "LL" : orientation == .landscapeRight ? "LR" : "P")")
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -15,12 +15,7 @@ extension ExpandedPlayerSheet {
|
||||
|
||||
/// Get safe area insets from the window.
|
||||
var windowSafeAreaInsets: UIEdgeInsets {
|
||||
UIApplication.shared.connectedScenes
|
||||
.compactMap { $0 as? UIWindowScene }
|
||||
.first?
|
||||
.windows
|
||||
.first?
|
||||
.safeAreaInsets ?? .zero
|
||||
UIApplication.shared.foregroundWindow?.safeAreaInsets ?? .zero
|
||||
}
|
||||
|
||||
// MARK: - Orientation Lock
|
||||
|
||||
@@ -118,11 +118,7 @@ struct WideScreenPlayerLayout<PlayerContent: View>: View {
|
||||
/// requiring `.foregroundActive` would drop the safe area to zero while
|
||||
/// they are open and make the panel jump to the screen edge.
|
||||
private var foregroundWindow: UIWindow? {
|
||||
let scenes = UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }
|
||||
let scene = scenes.first { $0.activationState == .foregroundActive }
|
||||
?? scenes.first { $0.activationState == .foregroundInactive }
|
||||
?? scenes.first
|
||||
return scene?.windows.first { $0.isKeyWindow } ?? scene?.windows.first
|
||||
UIApplication.shared.foregroundWindow
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -187,9 +183,7 @@ struct WideScreenPlayerLayout<PlayerContent: View>: View {
|
||||
// deployment target allows, and consider `traitCollection.verticalBarEdge` (iOS 27.1)
|
||||
// for the bar-edge question. Global scene lookup should be replaced by the hosting
|
||||
// window (e.g. via a UIViewRepresentable reading `view.window?.windowScene`).
|
||||
let interfaceOrientation = UIApplication.shared.connectedScenes
|
||||
.compactMap { $0 as? UIWindowScene }
|
||||
.first?
|
||||
let interfaceOrientation = UIApplication.shared.foregroundWindowScene?
|
||||
.interfaceOrientation ?? .unknown
|
||||
// landscapeLeft = home/gesture bar on left = Dynamic Island on RIGHT
|
||||
// landscapeRight = home/gesture bar on right = Dynamic Island on LEFT
|
||||
|
||||
Reference in New Issue
Block a user