浏览代码

update override labels

Adjustments View:
* Re-ordered label to: Duration, Percent, Target, Disable SMBs, SMB/UAM Minutes
* Add dividers
* Only display UAM/SMB minutes when differing from Settings
* Remove `are` from `SMBs are off`
* Include SMB Off schedule
* Don't display percentage if 100%
* Don't show ISF/CR if both are defaulted to on
* Display ∞ if duration is indefinite

Home View override banner:
* Re-ordered label to: Duration, Percent, Target, Disable SMBs
* Reword `\u{20e0}` to `SMBs off
* Include SMB Off schedule
* Display ∞ if duration is indefinite
Mike Plante 1 年之前
父节点
当前提交
f7f4d914e3

+ 8 - 3
FreeAPS/Sources/Modules/Home/View/HomeRootView.swift

@@ -211,7 +211,7 @@ extension Home {
                 0
             )
             let indefinite = latestOverride.indefinite
-            var durationString = ""
+            var durationString = ""
 
             if !indefinite {
                 if newDuration >= 1 {
@@ -229,9 +229,14 @@ extension Home {
                 }
             }
 
-            let smbToggleString = latestOverride.smbIsOff ? " \u{20e0}" : ""
+            let smbScheduleString = latestOverride
+                .smbIsScheduledOff && ((latestOverride.start?.stringValue ?? "") != (latestOverride.end?.stringValue ?? ""))
+                ? " \(latestOverride.start?.stringValue ?? "")-\(latestOverride.end?.stringValue ?? "")"
+                : ""
+            let smbToggleString = latestOverride.smbIsOff || latestOverride
+                .smbIsScheduledOff ? "SMBs Off\(smbScheduleString)" : ""
 
-            let components = [percentString, targetString, durationString, smbToggleString].filter { !$0.isEmpty }
+            let components = [durationString, percentString, targetString, smbToggleString].filter { !$0.isEmpty }
             return components.isEmpty ? nil : components.joined(separator: ", ")
         }
 

+ 38 - 17
FreeAPS/Sources/Modules/OverrideConfig/View/OverrideRootView.swift

@@ -450,6 +450,11 @@ extension OverrideConfig {
             })
         }
 
+        private var overrideLabelDivider: some View {
+            Divider()
+                .frame(width: 1, height: 20)
+        }
+
         @ViewBuilder private func overridesView(for preset: OverrideStored) -> some View {
             let target = (state.units == .mgdL ? preset.target : preset.target?.decimalValue.asMmolL as NSDecimalNumber?) ?? 0
 
@@ -457,16 +462,18 @@ extension OverrideConfig {
             let name = ((preset.name ?? "") == "") || (preset.name?.isEmpty ?? true) ? "" : preset.name!
             let percent = preset.percentage / 100
             let perpetual = preset.indefinite
-            let durationString = perpetual ? "" : "\(formatter.string(from: duration as NSNumber)!)"
-            let scheduledSMBstring = (preset.smbIsOff && preset.smbIsScheduledOff) ? "Scheduled SMBs" : ""
-            let smbString = (preset.smbIsOff && scheduledSMBstring == "") ? "SMBs are off" : ""
-            let targetString = target != 0 ? target.description : ""
+            let durationString = perpetual ? "∞" : "\(formatter.string(from: duration as NSNumber)!) min"
+            let scheduledSMBstring = preset.smbIsScheduledOff && preset.start != preset.end
+                ? " \(preset.start?.stringValue ?? "")-\(preset.end?.stringValue ?? "")" : ""
+            let smbString = (preset.smbIsOff || preset.smbIsScheduledOff) ? "SMBs Off\(scheduledSMBstring)" : ""
+            let targetString = target != 0 ? "\(target.description) \(state.units.rawValue)" : ""
             let maxMinutesSMB = (preset.smbMinutes as Decimal?) != nil ? (preset.smbMinutes ?? 0) as Decimal : 0
             let maxMinutesUAM = (preset.uamMinutes as Decimal?) != nil ? (preset.uamMinutes ?? 0) as Decimal : 0
-            let isfString = preset.isf ? "ISF" : ""
-            let crString = preset.cr ? "CR" : ""
-            let dash = crString != "" ? "/" : ""
-            let isfAndCRstring = isfString + dash + crString
+            let maxSmbMinsString = (maxMinutesSMB != 0 && maxMinutesSMB != state.defaultSmbMinutes) ?
+                "\(maxMinutesSMB.formatted()) min SMB" : ""
+            let maxUamMinsString = (maxMinutesUAM != 0 && maxMinutesUAM != state.defaultUamMinutes) ?
+                "\(maxMinutesUAM.formatted()) min UAM" : ""
+            let isfAndCRstring = (preset.isf == preset.cr) ? "" : (preset.isf ? " ISF" : " CR")
             let isSelected = preset.id == selectedPresetID
 
             if name != "" {
@@ -478,18 +485,32 @@ extension OverrideConfig {
                                 Spacer()
                             }
                             HStack(spacing: 5) {
-                                Text(percent.formatted(.percent.grouping(.never).rounded().precision(.fractionLength(0))))
+                                if durationString != "" {
+                                    Text(durationString)
+                                }
+                                if percent != 1 {
+                                    overrideLabelDivider
+                                    Text(
+                                        percent
+                                            .formatted(.percent.grouping(.never).rounded().precision(.fractionLength(0))) +
+                                            isfAndCRstring
+                                    )
+                                }
                                 if targetString != "" {
+                                    overrideLabelDivider
                                     Text(targetString)
-                                    Text(targetString != "" ? state.units.rawValue : "")
                                 }
-                                if durationString != "" { Text(durationString + (perpetual ? "" : "min")) }
-                                if smbString != "" { Text(smbString).foregroundColor(.secondary).font(.caption) }
-                                if scheduledSMBstring != "" { Text(scheduledSMBstring) }
-                                if preset.advancedSettings {
-                                    Text(maxMinutesSMB == 0 ? "" : maxMinutesSMB.formatted() + " SMB")
-                                    Text(maxMinutesUAM == 0 ? "" : maxMinutesUAM.formatted() + " UAM")
-                                    Text(isfAndCRstring)
+                                if smbString != "" {
+                                    overrideLabelDivider
+                                    Text(smbString).foregroundColor(.secondary).font(.caption)
+                                }
+                                if maxSmbMinsString != "" {
+                                    overrideLabelDivider
+                                    Text(maxSmbMinsString)
+                                }
+                                if maxUamMinsString != "" {
+                                    overrideLabelDivider
+                                    Text(maxUamMinsString)
                                 }
                                 Spacer()
                             }