SnoozerViewController.swift 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. //
  2. // SnoozerViewController.swift
  3. // LoopFollow
  4. //
  5. // Created by Jonas Björkert on 2025-04-26.
  6. // Copyright © 2025 Jon Fawcett. All rights reserved.
  7. //
  8. import UIKit
  9. import SwiftUI
  10. import Combine
  11. class SnoozerViewController: UIViewController {
  12. private var hostingController: UIHostingController<SnoozerView>?
  13. private var bgValue = ObservableValue<String>(default: "8,9")
  14. private var deltaValue = ObservableValue<String>(default: "-0,7")
  15. private var direction = ObservableValue<String>(default: "→")
  16. private var age = ObservableValue<String>(default: "4 min")
  17. private var time = ObservableValue<String>(default: "10:28")
  18. private var alarmText = ObservableValue<String?>(default: "High Alert")
  19. @State private var snoozeMinutes = 15
  20. override func viewDidLoad() {
  21. super.viewDidLoad()
  22. view.backgroundColor = .black
  23. let snoozerView = SnoozerView(
  24. bgValue: bgValue,
  25. deltaValue: deltaValue,
  26. direction: direction,
  27. age: age,
  28. time: time,
  29. alarmText: alarmText,
  30. snoozeMinutes: Binding(get: { self.snoozeMinutes }, set: { self.snoozeMinutes = $0 }),
  31. onSnooze: {
  32. // Trigger snooze logic here (e.g., update UserDefaultsRepository, stop alarm, etc.)
  33. print("Snoozed for \(self.snoozeMinutes) minutes")
  34. }
  35. )
  36. let hosting = UIHostingController(rootView: snoozerView)
  37. self.hostingController = hosting
  38. addChild(hosting)
  39. view.addSubview(hosting.view)
  40. hosting.view.translatesAutoresizingMaskIntoConstraints = false
  41. NSLayoutConstraint.activate([
  42. hosting.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
  43. hosting.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
  44. hosting.view.topAnchor.constraint(equalTo: view.topAnchor),
  45. hosting.view.bottomAnchor.constraint(equalTo: view.bottomAnchor)
  46. ])
  47. hosting.didMove(toParent: self)
  48. }
  49. // ✅ Only this screen supports landscape
  50. override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
  51. return [.portrait, .landscapeLeft, .landscapeRight]
  52. }
  53. override var shouldAutorotate: Bool {
  54. return true
  55. }
  56. }