| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- //
- // GeneralSetingsViewController.swift
- // LoopFollow
- //
- // Created by Jose Paredes on 7/16/20.
- // Copyright © 2020 Jon Fawcett. All rights reserved.
- //
- import Foundation
- import Eureka
- import EventKit
- import EventKitUI
- class GeneralSettingsViewController: FormViewController {
-
- var appStateController: AppStateController?
-
- override func viewDidLoad() {
- super.viewDidLoad()
-
- if UserDefaultsRepository.forceDarkMode.value {
- overrideUserInterfaceStyle = .dark
- }
- buildGeneralSettings()
- // Register the GeneralSettingsViewController as an observer for the UIApplication.willEnterForegroundNotification, which will be triggered when the app enters the foreground. This helps ensure that the "Speak BG" switch in the General Settings is updated according to the current setting.
- NotificationCenter.default.addObserver(self, selector: #selector(handleAppWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
- }
-
- private func buildGeneralSettings() {
- form
- +++ Section("App Settings")
- <<< SwitchRow("appBadge"){ row in
- row.title = "Display App Badge"
- row.tag = "appBadge"
- row.value = UserDefaultsRepository.appBadge.value
- }.onChange { [weak self] row in
- guard let value = row.value else { return }
- UserDefaultsRepository.appBadge.value = value
- // Force main screen update
- //guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return }
- //mainScreen.nightscoutLoader(forceLoad: true)
-
- // set the appstate to indicate settings change and flags
- if let appState = self!.appStateController {
- appState.generalSettingsChanged = true
- appState.generalSettingsChanges |= GeneralSettingsChangeEnum.appBadgeChange.rawValue
- }
-
- }
- <<< SwitchRow("backgroundRefresh"){ row in
- row.title = "Background Refresh"
- row.tag = "backgroundRefresh"
- row.value = UserDefaultsRepository.backgroundRefresh.value
- }.onChange { [weak self] row in
- guard let value = row.value else { return }
- UserDefaultsRepository.backgroundRefresh.value = value
- }
- <<< SwitchRow("persistentNotification") { row in
- row.title = "Persistent Notification"
- row.value = UserDefaultsRepository.persistentNotification.value
- }.onChange { [weak self] row in
- guard let value = row.value else { return }
- UserDefaultsRepository.persistentNotification.value = value
- }
-
- +++ Section("Display Settings")
- <<< SwitchRow("forceDarkMode") { row in
- row.title = "Force Dark Mode (Restart App)"
- row.value = UserDefaultsRepository.forceDarkMode.value
- }.onChange { [weak self] row in
- guard let value = row.value else { return }
- UserDefaultsRepository.forceDarkMode.value = value
-
- }
- <<< SwitchRow("showStats") { row in
- row.title = "Display Stats"
- row.value = UserDefaultsRepository.showStats.value
- }.onChange { [weak self] row in
- guard let value = row.value else { return }
- UserDefaultsRepository.showStats.value = value
-
- // set the appstate to indicate settings change and flags
- if let appState = self!.appStateController {
- appState.generalSettingsChanged = true
- appState.generalSettingsChanges |= GeneralSettingsChangeEnum.showStatsChange.rawValue
- }
- }
- <<< SwitchRow("useIFCC") { row in
- row.title = "Use IFCC A1C"
- row.value = UserDefaultsRepository.useIFCC.value
- }.onChange { [weak self] row in
- guard let value = row.value else { return }
- UserDefaultsRepository.useIFCC.value = value
-
- // set the appstate to indicate settings change and flags
- if let appState = self!.appStateController {
- appState.generalSettingsChanged = true
- appState.generalSettingsChanges |= GeneralSettingsChangeEnum.useIFCCChange.rawValue
- }
- }
- <<< SwitchRow("showSmallGraph") { row in
- row.title = "Display Small Graph"
- row.value = UserDefaultsRepository.showSmallGraph.value
- }.onChange { [weak self] row in
- guard let value = row.value else { return }
- UserDefaultsRepository.showSmallGraph.value = value
-
- // set the appstate to indicate settings change and flags
- if let appState = self!.appStateController {
- appState.generalSettingsChanged = true
- appState.generalSettingsChanges |= GeneralSettingsChangeEnum.showSmallGraphChange.rawValue
- }
- }
- <<< SwitchRow("colorBGText") { row in
- row.title = "Color Main BG Text"
- row.value = UserDefaultsRepository.colorBGText.value
- }.onChange { [weak self] row in
- guard let value = row.value else { return }
- UserDefaultsRepository.colorBGText.value = value
- // Force main screen update
- //guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return }
- //mainScreen.setBGTextColor()
-
- // set the appstate to indicate settings change and flags
- if let appState = self!.appStateController {
- appState.generalSettingsChanged = true
- appState.generalSettingsChanges |= GeneralSettingsChangeEnum.colorBGTextChange.rawValue
- }
- }
-
- <<< SwitchRow("screenlockSwitchState") { row in
- row.title = "Keep Screen Active"
- row.value = UserDefaultsRepository.screenlockSwitchState.value
- }.onChange { [weak self] row in
- guard let value = row.value else { return }
- UserDefaultsRepository.screenlockSwitchState.value = value
- }
-
-
-
-
- <<< SwitchRow("speakBG"){ row in
- row.title = "Speak BG"
- row.value = UserDefaultsRepository.speakBG.value
- }.onChange { [weak self] row in
- guard let value = row.value else { return }
- UserDefaultsRepository.speakBG.value = value
- // Post a "toggleSpeakBG" notification whenever the "Speak BG" switch value changes in the General Settings. This allows the SceneDelegate to update the Home Screen Quick Action appearance and ensures consistency between the switch and the Quick Action.
- NotificationCenter.default.post(name: Notification.Name("toggleSpeakBG"), object: nil)
- }
-
- <<< SwitchRow("showDisplayName") { row in
- row.title = "Show Display Name"
- row.value = UserDefaultsRepository.showDisplayName.value
- }.onChange { [weak self] row in
- guard let value = row.value else { return }
- UserDefaultsRepository.showDisplayName.value = value
- if let appState = self!.appStateController {
- appState.generalSettingsChanged = true
- appState.generalSettingsChanges |= GeneralSettingsChangeEnum.showDisplayNameChange.rawValue
- }
- }
- +++ ButtonRow() {
- $0.title = "DONE"
- }.onCellSelection { (row, arg) in
- self.dismiss(animated:true, completion: nil)
- }
- }
-
- // Update the "Speak BG" SwitchRow value in the General Settings when the app enters the foreground. This ensures that the switch reflects the current setting in UserDefaultsRepository, even if it was changed using the Home Screen Quick Action while the app was in the background.
- @objc func handleAppWillEnterForeground() {
- if let row = self.form.rowBy(tag: "speakBG") as? SwitchRow {
- row.value = UserDefaultsRepository.speakBG.value
- row.updateCell()
- }
- }
- deinit {
- NotificationCenter.default.removeObserver(self, name: UIApplication.willEnterForegroundNotification, object: nil)
- }
- }
|