From 2185718d506359aca7d44754386bf94b6942ea1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toni=20F=C3=B6rster?= Date: Fri, 6 Sep 2024 15:11:31 +0200 Subject: [PATCH] orientation fullscreen code cleanup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Toni Förster --- Model/Player/PlayerModel.swift | 25 ++++++++++++++++++------- iOS/Orientation.swift | 1 - iOS/OrientationModel.swift | 11 +++++++---- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/Model/Player/PlayerModel.swift b/Model/Player/PlayerModel.swift index a7ba1c11..5c939104 100644 --- a/Model/Player/PlayerModel.swift +++ b/Model/Player/PlayerModel.swift @@ -137,6 +137,7 @@ final class PlayerModel: ObservableObject { } @Default(.rotateToLandscapeOnEnterFullScreen) private var rotateToLandscapeOnEnterFullScreen + @Default(.lockPortraitWhenBrowsing) private var lockPortraitWhenBrowsing #endif @Published var currentChapterIndex: Int? @@ -209,7 +210,7 @@ final class PlayerModel: ObservableObject { #if os(iOS) isOrientationLocked = Defaults[.isOrientationLocked] - if isOrientationLocked, Defaults[.lockPortraitWhenBrowsing] { + if isOrientationLocked, lockPortraitWhenBrowsing { lockedOrientation = UIInterfaceOrientationMask.portrait Orientation.lockOrientation(.portrait, andRotateTo: .portrait) } else if isOrientationLocked { @@ -564,7 +565,7 @@ final class PlayerModel: ObservableObject { if !presentingPlayer { #if os(iOS) - if Defaults[.lockPortraitWhenBrowsing] { + if lockPortraitWhenBrowsing { Orientation.lockOrientation(.portrait, andRotateTo: .portrait) } else { Orientation.lockOrientation(.allButUpsideDown) @@ -1155,10 +1156,20 @@ final class PlayerModel: ObservableObject { let lockOrientation = rotateToLandscapeOnEnterFullScreen.interfaceOrientation if currentVideoIsLandscape { if initiatedByButton { - Orientation.lockOrientation(self.isOrientationLocked ? (lockOrientation == .landscapeRight ? .landscapeRight : .landscapeLeft) : .landscape) + Orientation.lockOrientation(isOrientationLocked + ? (lockOrientation == .landscapeRight ? .landscapeRight : .landscapeLeft) + : .landscape) } - let orientation = OrientationTracker.shared.currentDeviceOrientation.isLandscape ? OrientationTracker.shared.currentInterfaceOrientation : self.rotateToLandscapeOnEnterFullScreen.interfaceOrientation - Orientation.lockOrientation(self.isOrientationLocked ? (lockOrientation == .landscapeRight ? .landscapeRight : .landscapeLeft) : .landscape, andRotateTo: orientation) + let orientation = OrientationTracker.shared.currentDeviceOrientation.isLandscape + ? OrientationTracker.shared.currentInterfaceOrientation + : rotateToLandscapeOnEnterFullScreen.interfaceOrientation + + Orientation.lockOrientation( + isOrientationLocked + ? (lockOrientation == .landscapeRight ? .landscapeRight : .landscapeLeft) + : .landscape, + andRotateTo: orientation + ) } } else { if activeBackend == .appleAVPlayer, avPlayerUsesSystemControls { @@ -1169,8 +1180,8 @@ final class PlayerModel: ObservableObject { if Defaults[.lockPortraitWhenBrowsing] { lockedOrientation = UIInterfaceOrientationMask.portrait } - let rotationOrientation = Defaults[.lockPortraitWhenBrowsing] ? UIInterfaceOrientation.portrait : nil - Orientation.lockOrientation(Defaults[.lockPortraitWhenBrowsing] ? .portrait : .allButUpsideDown, andRotateTo: rotationOrientation) + let rotationOrientation = lockPortraitWhenBrowsing ? UIInterfaceOrientation.portrait : nil + Orientation.lockOrientation(lockPortraitWhenBrowsing ? .portrait : .allButUpsideDown, andRotateTo: rotationOrientation) } #endif } diff --git a/iOS/Orientation.swift b/iOS/Orientation.swift index 2b93b18e..8371c012 100644 --- a/iOS/Orientation.swift +++ b/iOS/Orientation.swift @@ -1,5 +1,4 @@ import CoreMotion -import Defaults import Logging import UIKit diff --git a/iOS/OrientationModel.swift b/iOS/OrientationModel.swift index e4beb232..a3d1c2c7 100644 --- a/iOS/OrientationModel.swift +++ b/iOS/OrientationModel.swift @@ -13,6 +13,9 @@ final class OrientationModel { var orientationDebouncer = Debouncer(.milliseconds(300)) var orientationObserver: Any? + @Default(.lockPortraitWhenBrowsing) private var lockPortraitWhenBrowsing + @Default(.enterFullscreenInLandscape) private var enterFullscreenInLandscape + private var player = PlayerModel.shared func startOrientationUpdates() { @@ -25,7 +28,7 @@ final class OrientationModel { self.logger.info("Notification received: Device orientation changed.") // We only allow .portrait and are not showing the player - guard (!self.player.presentingPlayer && !Defaults[.lockPortraitWhenBrowsing]) || self.player.presentingPlayer + guard (!self.player.presentingPlayer && !self.lockPortraitWhenBrowsing) || self.player.presentingPlayer else { return } @@ -42,7 +45,7 @@ final class OrientationModel { } // Only take action if the player is active and presenting - guard (!self.player.isOrientationLocked && !self.player.playingInPictureInPicture) || (!Defaults[.lockPortraitWhenBrowsing] && !self.player.presentingPlayer) || (!Defaults[.lockPortraitWhenBrowsing] && self.player.presentingPlayer && !self.player.isOrientationLocked) + guard (!self.player.isOrientationLocked && !self.player.playingInPictureInPicture) || (!self.lockPortraitWhenBrowsing && !self.player.presentingPlayer) || (!self.lockPortraitWhenBrowsing && self.player.presentingPlayer && !self.player.isOrientationLocked) else { self.logger.info("Only updating orientation without actions.") return @@ -52,7 +55,7 @@ final class OrientationModel { self.orientationDebouncer.callback = { DispatchQueue.main.async { if orientation.isLandscape { - if Defaults[.enterFullscreenInLandscape], self.player.presentingPlayer { + if self.enterFullscreenInLandscape, self.player.presentingPlayer { self.logger.info("Entering fullscreen because orientation is landscape.") self.player.controls.presentingControls = false self.player.enterFullScreen(showControls: false) @@ -63,7 +66,7 @@ final class OrientationModel { if self.player.playingFullScreen { self.player.exitFullScreen(showControls: false) } - if Defaults[.lockPortraitWhenBrowsing] { + if self.lockPortraitWhenBrowsing { Orientation.lockOrientation(.portrait, andRotateTo: .portrait) } else { Orientation.lockOrientation(OrientationTracker.shared.currentInterfaceOrientationMask, andRotateTo: orientation)