GeneralSettingsView.swift 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // LoopFollow
  2. // GeneralSettingsView.swift
  3. // Created by Jonas Björkert on 2025-05-25.
  4. import SwiftUI
  5. struct GeneralSettingsView: View {
  6. @Environment(\.presentationMode) var presentationMode
  7. @ObservedObject var colorBGText = Storage.shared.colorBGText
  8. @ObservedObject var appBadge = Storage.shared.appBadge
  9. @ObservedObject var forceDarkMode = Storage.shared.forceDarkMode
  10. @ObservedObject var showStats = Storage.shared.showStats
  11. @ObservedObject var useIFCC = Storage.shared.useIFCC
  12. @ObservedObject var showSmallGraph = Storage.shared.showSmallGraph
  13. @ObservedObject var screenlockSwitchState = Storage.shared.screenlockSwitchState
  14. @ObservedObject var showDisplayName = Storage.shared.showDisplayName
  15. @ObservedObject var snoozerEmoji = Storage.shared.snoozerEmoji
  16. // Speak-BG settings
  17. @ObservedObject var speakBG = Storage.shared.speakBG
  18. @ObservedObject var speakBGAlways = Storage.shared.speakBGAlways
  19. @ObservedObject var speakLanguage = Storage.shared.speakLanguage
  20. @ObservedObject var speakLowBG = Storage.shared.speakLowBG
  21. @ObservedObject var speakProactiveLowBG = Storage.shared.speakProactiveLowBG
  22. @ObservedObject var speakLowBGLimit = Storage.shared.speakLowBGLimit
  23. @ObservedObject var speakFastDropDelta = Storage.shared.speakFastDropDelta
  24. @ObservedObject var speakHighBG = Storage.shared.speakHighBG
  25. @ObservedObject var speakHighBGLimit = Storage.shared.speakHighBGLimit
  26. var body: some View {
  27. NavigationStack {
  28. Form {
  29. Section("App Settings") {
  30. Toggle("Display App Badge", isOn: $appBadge.value)
  31. }
  32. Section("Display") {
  33. Toggle("Force Dark Mode (restart app)", isOn: $forceDarkMode.value)
  34. Toggle("Display Stats", isOn: $showStats.value)
  35. Toggle("Use IFCC A1C", isOn: $useIFCC.value)
  36. Toggle("Display Small Graph", isOn: $showSmallGraph.value)
  37. Toggle("Color BG Text", isOn: $colorBGText.value)
  38. Toggle("Keep Screen Active", isOn: $screenlockSwitchState.value)
  39. Toggle("Show Display Name", isOn: $showDisplayName.value)
  40. Toggle("Snoozer emoji", isOn: $snoozerEmoji.value)
  41. }
  42. Section("Speak BG") {
  43. Toggle("Speak BG", isOn: $speakBG.value.animation())
  44. if speakBG.value {
  45. Picker("Language", selection: $speakLanguage.value) {
  46. Text("English").tag("en")
  47. Text("Italian").tag("it")
  48. Text("Slovak").tag("sk")
  49. Text("Swedish").tag("sv")
  50. }
  51. Toggle("Always", isOn: $speakBGAlways.value.animation())
  52. if !speakBGAlways.value {
  53. Toggle("Low", isOn: $speakLowBG.value.animation())
  54. .onChange(of: speakLowBG.value) { newValue in
  55. if newValue {
  56. speakProactiveLowBG.value = false
  57. }
  58. }
  59. Toggle("Proactive Low", isOn: $speakProactiveLowBG.value.animation())
  60. .onChange(of: speakProactiveLowBG.value) { newValue in
  61. if newValue {
  62. speakLowBG.value = false
  63. }
  64. }
  65. if speakLowBG.value || speakProactiveLowBG.value {
  66. BGPicker(
  67. title: "Low BG Limit",
  68. range: 40 ... 108,
  69. value: $speakLowBGLimit.value
  70. )
  71. }
  72. if speakProactiveLowBG.value {
  73. BGPicker(
  74. title: "Fast Drop Delta",
  75. range: 3 ... 20,
  76. value: $speakFastDropDelta.value
  77. )
  78. }
  79. Toggle("High", isOn: $speakHighBG.value.animation())
  80. if speakHighBG.value {
  81. BGPicker(
  82. title: "High BG Limit",
  83. range: 140 ... 300,
  84. value: $speakHighBGLimit.value
  85. )
  86. }
  87. }
  88. }
  89. }
  90. }
  91. .navigationTitle("General Settings")
  92. .toolbar {
  93. ToolbarItem(placement: .confirmationAction) {
  94. Button("Done") {
  95. presentationMode.wrappedValue.dismiss()
  96. }
  97. }
  98. }
  99. }
  100. }
  101. }