// // SettingsView.swift // USB Meter // // Created by Bogdan Timofte on 14/03/2020. // Copyright © 2020 Bogdan Timofte. All rights reserved. // import SwiftUI struct MeterSettingsView: View { @EnvironmentObject private var meter: Meter @State private var editingName = false @State private var editingScreenTimeout = false @State private var editingScreenBrightness = false var body: some View { ScrollView { VStack (spacing: 10) { // MARK: Name VStack { HStack { Text ("Name").fontWeight(.semibold) Spacer() if !editingName { Text(meter.name) } ChevronView( rotate: $editingName ) } if editingName { EditNameView(editingName: $editingName, newName: meter.name) } } .padding() .background(RoundedRectangle(cornerRadius: 15).foregroundColor(.secondary).opacity(0.1)) if meter.operationalState == .dataIsAvailable { VStack(alignment: .leading, spacing: 8) { Text("Device Info").fontWeight(.semibold) DeviceInfoRow(label: "Advertised Model", value: meter.modelString) DeviceInfoRow(label: "Displayed Model", value: meter.deviceModelSummary) DeviceInfoRow(label: "Temperature Unit", value: meter.temperatureUnitDescription) if meter.modelNumber != 0 { DeviceInfoRow(label: "Model Code", value: "\(meter.modelNumber)") } if !meter.firmwareVersion.isEmpty { DeviceInfoRow(label: "Firmware", value: meter.firmwareVersion) } if meter.serialNumber != 0 { DeviceInfoRow(label: "Serial", value: "\(meter.serialNumber)") } if meter.bootCount != 0 { DeviceInfoRow(label: "Boot Count", value: "\(meter.bootCount)") } } .padding() .background(RoundedRectangle(cornerRadius: 15).foregroundColor(.secondary).opacity(0.1)) } if meter.operationalState == .dataIsAvailable && meter.supportsManualTemperatureUnitSelection { VStack(alignment: .leading, spacing: 8) { Text("Temperature Unit").fontWeight(.semibold) Text("TC66 reports temperature using the unit selected on the device. Keep this setting matched to the meter.") .font(.footnote) .foregroundColor(.secondary) Picker("", selection: $meter.tc66TemperatureUnitPreference) { ForEach(TemperatureUnitPreference.allCases) { unit in Text(unit.title).tag(unit) } } .pickerStyle(SegmentedPickerStyle()) } .padding() .background(RoundedRectangle(cornerRadius: 15).foregroundColor(.secondary).opacity(0.1)) } if meter.operationalState == .dataIsAvailable && meter.supportsUMSettings { // MARK: Screen Timeout // Ar trebui separat enabled/disabled de valorile in minute eventual stocata valoarea in iCloud la dezactivare pentru restaurare VStack{ HStack { Text ("Screen Timeout").fontWeight(.semibold) Spacer() if !editingScreenTimeout { Text ( meter.screenTimeout != 0 ? "\(meter.screenTimeout) Minutes" : "Off" ) } ChevronView( rotate: $editingScreenTimeout ) } if editingScreenTimeout { EditScreenTimeoutView() } } .padding() .background(RoundedRectangle(cornerRadius: 15).foregroundColor(.secondary).opacity(0.1)) // MARK: Screen Brightness VStack{ HStack { Text ("Screen Brightness").fontWeight(.semibold) Spacer() if !editingScreenBrightness { Text ( "\(meter.screenBrightness)" ) } ChevronView( rotate: $editingScreenBrightness ) } if editingScreenBrightness { EditScreenBrightnessView() } } .padding() .background(RoundedRectangle(cornerRadius: 15).foregroundColor(.secondary).opacity(0.1)) } } } .padding() .navigationBarTitle("Meter Settings") .navigationBarItems( trailing: RSSIView( RSSI: meter.btSerial.RSSI ).frame( width: 24 ) ) } } private struct DeviceInfoRow: View { let label: String let value: String var body: some View { HStack { Text(label) Spacer() Text(value) .foregroundColor(.secondary) .multilineTextAlignment(.trailing) } .font(.footnote) } } struct EditNameView: View { @EnvironmentObject private var meter: Meter @Binding var editingName: Bool @State var newName: String var body: some View { TextField("Name", text: self.$newName, onCommit: { self.meter.name = self.newName self.editingName = false }) .textFieldStyle(RoundedBorderTextFieldStyle()) .lineLimit(1) .disableAutocorrection(true) .multilineTextAlignment(.center) .padding(.horizontal) } } struct EditScreenTimeoutView: View { @EnvironmentObject private var meter: Meter var body: some View { Picker("", selection: self.$meter.screenTimeout ) { Text("1").tag(1) Text("2").tag(2) Text("3").tag(3) Text("4").tag(4) Text("5").tag(5) Text("6").tag(6) Text("7").tag(7) Text("8").tag(8) Text("9").tag(9) Text("Off").tag(0) } .pickerStyle( SegmentedPickerStyle() ) .padding(.horizontal) } } struct EditScreenBrightnessView: View { @EnvironmentObject private var meter: Meter var body: some View { Picker("", selection: self.$meter.screenBrightness ) { Text("0").tag(0) Text("1").tag(1) Text("2").tag(2) Text("3").tag(3) Text("4").tag(4) Text("5").tag(5) } .pickerStyle( SegmentedPickerStyle() ) .padding(.horizontal) } }