| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- //
- // SettingsViewController.swift
- // LoopFollow
- //
- // Created by Jon Fawcett on 6/3/20.
- // Copyright © 2020 Jon Fawcett. All rights reserved.
- //
- import UIKit
- import Eureka
- import EventKit
- import EventKitUI
- class SettingsViewController: FormViewController {
- var appStateController: AppStateController?
-
- func showHideNSDetails() {
- var isHidden = false
- var isEnabled = true
- if UserDefaultsRepository.url.value == "" {
- isHidden = true
- isEnabled = false
- }
-
- if let row1 = form.rowBy(tag: "informationDisplaySettings") as? ButtonRow {
- row1.hidden = .function(["hide"], {form in
- return isHidden
- })
- row1.evaluateHidden()
- }
-
- guard let nightscoutTab = self.tabBarController?.tabBar.items![3] else { return }
- nightscoutTab.isEnabled = isEnabled
-
- }
-
- override func viewDidLoad() {
- super.viewDidLoad()
- if UserDefaultsRepository.forceDarkMode.value {
- overrideUserInterfaceStyle = .dark
- }
-
- var expiration: Date = Date()
- if let provision = MobileProvision.read() {
- expiration = provision.expirationDate
- }
-
- form
- +++ Section(header: "Nightscout Settings", footer: "Changing Nightscout settings requires an app restart.")
- <<< TextRow(){ row in
- row.title = "URL"
- row.placeholder = "https://mycgm.herokuapp.com"
- row.value = UserDefaultsRepository.url.value
- }.cellSetup { (cell, row) in
- cell.textField.autocorrectionType = .no
- }.onChange { row in
- guard let value = row.value else {
- UserDefaultsRepository.url.value = ""
- self.showHideNSDetails()
- return }
- // check the format of the URL entered by the user and trim away any spaces or "/" at the end
- var urlNSInput = value.replacingOccurrences(of: "\\s+$", with: "", options: .regularExpression)
- if urlNSInput.last == "/" {
- urlNSInput = String(urlNSInput.dropLast())
- }
- UserDefaultsRepository.url.value = urlNSInput.lowercased()
- // set the row value back to the correctly formatted URL so that the user immediately sees how it should have been written
- row.value = UserDefaultsRepository.url.value
- self.showHideNSDetails()
- globalVariables.nsVerifiedAlert = 0
- }
- <<< TextRow(){ row in
- row.title = "NS Token"
- row.placeholder = "Leave blank if not using tokens"
- row.value = UserDefaultsRepository.token.value
- }.cellSetup { (cell, row) in
- cell.textField.autocorrectionType = .no
- }.onChange { row in
- if row.value == nil {
- UserDefaultsRepository.token.value = ""
- }
- guard let value = row.value else { return }
- UserDefaultsRepository.token.value = value
- globalVariables.nsVerifiedAlert = 0
- }
- <<< SegmentedRow<String>("units") { row in
- row.title = "Units"
- row.options = ["mg/dL", "mmol/L"]
- row.value = UserDefaultsRepository.units.value
- }.onChange { row in
- guard let value = row.value else { return }
- UserDefaultsRepository.units.value = value
- }
- +++ Section("Dexcom Settings")
- <<< TextRow(){ row in
- row.title = "User Name"
- row.value = UserDefaultsRepository.shareUserName.value
- }.cellSetup { (cell, row) in
- cell.textField.autocorrectionType = .no
- }.onChange { row in
- if row.value == nil {
- UserDefaultsRepository.shareUserName.value = ""
- }
- guard let value = row.value else { return }
- UserDefaultsRepository.shareUserName.value = value
- globalVariables.dexVerifiedAlert = 0
- }
- <<< TextRow(){ row in
- row.title = "Password"
- row.value = UserDefaultsRepository.sharePassword.value
- }.cellSetup { (cell, row) in
- cell.textField.autocorrectionType = .no
- cell.textField.isSecureTextEntry = true
- }.onChange { row in
- if row.value == nil {
- UserDefaultsRepository.sharePassword.value = ""
- }
- guard let value = row.value else { return }
- UserDefaultsRepository.sharePassword.value = value
- globalVariables.dexVerifiedAlert = 0
- }
- <<< SegmentedRow<String>("shareServer") { row in
- row.title = "Server"
- row.options = ["US", "NON-US"]
- row.value = UserDefaultsRepository.shareServer.value
- }.onChange { row in
- guard let value = row.value else { return }
- UserDefaultsRepository.shareServer.value = value
- }
-
- +++ Section("App Settings")
- <<< ButtonRow() {
- $0.title = "General Settings"
- $0.presentationMode = .show(
- controllerProvider: .callback(builder: {
- let controller = GeneralSettingsViewController()
- controller.appStateController = self.appStateController
- return controller
- }
- ), onDismiss: nil)
- }
- <<< ButtonRow("graphSettings") {
- $0.title = "Graph Settings"
- $0.presentationMode = .show(
- controllerProvider: .callback(builder: {
- let controller = GraphSettingsViewController()
- controller.appStateController = self.appStateController
- return controller
- }
- ), onDismiss: nil)
- }
- <<< ButtonRow("informationDisplaySettings") {
- $0.title = "Information Display Settings"
- $0.presentationMode = .show(
- controllerProvider: .callback(builder: {
- let controller = InfoDisplaySettingsViewController()
- controller.appStateController = self.appStateController
- return controller
- }
- ), onDismiss: nil)
-
- }
-
- +++ Section("Integrations")
- <<< ButtonRow() {
- $0.title = "Apple Watch and Carplay"
- $0.presentationMode = .show(
- controllerProvider: .callback(builder: {
- let controller = WatchSettingsViewController()
- controller.appStateController = self.appStateController
- return controller
- }
- ), onDismiss: nil)
-
- }
- <<< LabelRow("Clear Images"){ row in
- row.title = "Delete Watch Face Images"
- }.onCellSelection{ cell,row in
- if UserDefaultsRepository.saveImage.value {
- guard let mainScreen = self.tabBarController!.viewControllers?[0] as? MainViewController else { return }
-
- mainScreen.deleteOldImages()
- mainScreen.saveChartImage()
- }
- }
-
- +++ Section("Advanced Settings")
- <<< ButtonRow() {
- $0.title = "Advanced Settings"
- $0.presentationMode = .show(
- controllerProvider: .callback(builder: {
- let controller = AdvancedSettingsViewController()
- controller.appStateController = self.appStateController
- return controller
- }
- ), onDismiss: nil)
-
- }
-
-
- +++ Section(header: "App Expiration", footer: String(expiration.description))
-
- showHideNSDetails()
-
- }
-
-
- }
|