Jonas Björkert 1 год назад
Родитель
Сommit
a2095d15ae

+ 10 - 0
LoopFollow/Application/AppDelegate.swift

@@ -126,6 +126,16 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
 
         completionHandler()
     }
+
+    func application(_: UIApplication, supportedInterfaceOrientationsFor _: UIWindow?) -> UIInterfaceOrientationMask {
+        let forcePortrait = Storage.shared.forcePortraitMode.value
+
+        if forcePortrait {
+            return .portrait
+        } else {
+            return .all
+        }
+    }
 }
 
 extension AppDelegate: UNUserNotificationCenterDelegate {

+ 12 - 0
LoopFollow/Settings/GeneralSettingsView.swift

@@ -14,6 +14,7 @@ struct GeneralSettingsView: View {
     @ObservedObject var screenlockSwitchState = Storage.shared.screenlockSwitchState
     @ObservedObject var showDisplayName = Storage.shared.showDisplayName
     @ObservedObject var snoozerEmoji = Storage.shared.snoozerEmoji
+    @ObservedObject var forcePortraitMode = Storage.shared.forcePortraitMode
     @ObservedObject var persistentNotification = Storage.shared.persistentNotification
 
     // Speak-BG settings
@@ -44,6 +45,17 @@ struct GeneralSettingsView: View {
                     Toggle("Keep Screen Active", isOn: $screenlockSwitchState.value)
                     Toggle("Show Display Name", isOn: $showDisplayName.value)
                     Toggle("Snoozer emoji", isOn: $snoozerEmoji.value)
+                    Toggle("Force portrait mode", isOn: $forcePortraitMode.value)
+                        .onChange(of: forcePortraitMode.value) { _ in
+                            if #available(iOS 16.0, *) {
+                                let window = UIApplication.shared.connectedScenes
+                                    .compactMap { $0 as? UIWindowScene }
+                                    .flatMap { $0.windows }
+                                    .first
+
+                                window?.rootViewController?.setNeedsUpdateOfSupportedInterfaceOrientations()
+                            }
+                        }
                 }
 
                 Section("Speak BG") {

+ 1 - 0
LoopFollow/Storage/Storage.swift

@@ -68,6 +68,7 @@ class Storage {
     var screenlockSwitchState = StorageValue<Bool>(key: "screenlockSwitchState", defaultValue: true)
     var showDisplayName = StorageValue<Bool>(key: "showDisplayName", defaultValue: false)
     var snoozerEmoji = StorageValue<Bool>(key: "snoozerEmoji", defaultValue: false)
+    var forcePortraitMode = StorageValue<Bool>(key: "forcePortraitMode", defaultValue: false)
 
     var speakBG = StorageValue<Bool>(key: "speakBG", defaultValue: false)
     var speakBGAlways = StorageValue<Bool>(key: "speakBGAlways", defaultValue: true)