Просмотр исходного кода

Fix mmol/L display for history, delta and live activity

Deniz Cengiz 1 год назад
Родитель
Сommit
3a6a4a1407

+ 7 - 9
FreeAPS/Sources/Modules/DataTable/View/DataTableRootView.swift

@@ -56,6 +56,7 @@ extension DataTable {
 
             if state.units == .mmolL {
                 formatter.maximumFractionDigits = 1
+                formatter.minimumFractionDigits = 1
                 formatter.roundingMode = .halfUp
             } else {
                 formatter.maximumFractionDigits = 0
@@ -68,6 +69,7 @@ extension DataTable {
             formatter.numberStyle = .decimal
             if state.units == .mmolL {
                 formatter.maximumFractionDigits = 1
+                formatter.minimumFractionDigits = 1
                 formatter.roundingMode = .ceiling
             } else {
                 formatter.maximumFractionDigits = 0
@@ -226,7 +228,7 @@ extension DataTable {
                 if !glucoseStored.isEmpty {
                     ForEach(glucoseStored) { glucose in
                         HStack {
-                            Text(formatGlucose(glucose.glucose, isManual: glucose.isManual))
+                            Text(formatGlucose(Decimal(glucose.glucose), isManual: glucose.isManual))
 
                             /// check for manual glucose
                             if glucose.isManual {
@@ -496,16 +498,12 @@ extension DataTable {
 
         // MARK: - Format glucose
 
-        private func formatGlucose(_ value: Int16, isManual: Bool) -> String {
+        private func formatGlucose(_ value: Decimal, isManual: Bool) -> String {
             let formatter = isManual ? manualGlucoseFormatter : glucoseFormatter
-            let formattedValue = formatter.string(from: NSNumber(value: value)) ?? "--"
+            let glucoseValue = state.units == .mmolL ? value.asMmolL : value
+            let formattedValue = formatter.string(from: glucoseValue as NSNumber) ?? "--"
 
-            return state.units == .mmolL ? convertToMMOL(Double(value)) : formattedValue
-        }
-
-        private func convertToMMOL(_ value: Double) -> String {
-            let mmolValue = value * 0.0555
-            return "\(mmolValue) mmol/L"
+            return formattedValue
         }
     }
 }

+ 13 - 5
FreeAPS/Sources/Modules/Home/View/Header/CurrentGlucoseView.swift

@@ -31,19 +31,27 @@ struct CurrentGlucoseView: View {
     private var glucoseFormatter: NumberFormatter {
         let formatter = NumberFormatter()
         formatter.numberStyle = .decimal
-        formatter.maximumFractionDigits = 0
+
         if units == .mmolL {
-            formatter.minimumFractionDigits = 1
             formatter.maximumFractionDigits = 1
+            formatter.minimumFractionDigits = 1
+            formatter.roundingMode = .halfUp
+        } else {
+            formatter.maximumFractionDigits = 0
         }
-        formatter.roundingMode = .halfUp
         return formatter
     }
 
     private var deltaFormatter: NumberFormatter {
         let formatter = NumberFormatter()
         formatter.numberStyle = .decimal
-        formatter.maximumFractionDigits = 1
+        if units == .mmolL {
+            formatter.maximumFractionDigits = 1
+            formatter.minimumFractionDigits = 1
+            formatter.roundingMode = .halfUp
+        } else {
+            formatter.maximumFractionDigits = 0
+        }
         formatter.positivePrefix = "  +"
         formatter.negativePrefix = "  -"
         return formatter
@@ -149,7 +157,7 @@ struct CurrentGlucoseView: View {
         let lastGlucose = combinedGlucoseValues.first?.glucose ?? 0
         let secondLastGlucose = combinedGlucoseValues.dropFirst().first?.glucose ?? 0
         let delta = lastGlucose - secondLastGlucose
-        let deltaAsDecimal = Decimal(delta)
+        let deltaAsDecimal = units == .mmolL ? Decimal(delta).asMmolL : Decimal(delta)
         return deltaFormatter.string(from: deltaAsDecimal as NSNumber) ?? "--"
     }
 

+ 12 - 8
FreeAPS/Sources/Services/LiveActivity/LiveActivityAttributes+Helper.swift

@@ -1,11 +1,11 @@
 import Foundation
 
 extension LiveActivityAttributes.ContentState {
-    static func formatGlucose(_ value: Int, mmol: Bool, forceSign: Bool) -> String {
+    static func formatGlucose(_ value: Int, units: GlucoseUnits, forceSign: Bool) -> String {
         let formatter = NumberFormatter()
         formatter.numberStyle = .decimal
         formatter.maximumFractionDigits = 0
-        if mmol {
+        if units == .mmolL {
             formatter.minimumFractionDigits = 1
             formatter.maximumFractionDigits = 1
         }
@@ -15,18 +15,22 @@ extension LiveActivityAttributes.ContentState {
         formatter.roundingMode = .halfUp
 
         return formatter
-            .string(from: mmol ? value.asMmolL as NSNumber : NSNumber(value: value))!
+            .string(from: units == .mmolL ? value.asMmolL as NSNumber : NSNumber(value: value))!
     }
 
-    static func calculateChange(chart: [GlucoseData]) -> String {
+    static func calculateChange(chart: [GlucoseData], units: GlucoseUnits) -> String {
         guard chart.count > 2 else { return "" }
         let lastGlucose = chart.first?.glucose ?? 0
         let secondLastGlucose = chart.dropFirst().first?.glucose ?? 0
         let delta = lastGlucose - secondLastGlucose
-        let deltaAsDecimal = Decimal(delta)
+        let deltaAsDecimal = units == .mmolL ? Decimal(delta).asMmolL : Decimal(delta)
         let formatter = NumberFormatter()
         formatter.numberStyle = .decimal
         formatter.maximumFractionDigits = 1
+        if units == .mmolL {
+            formatter.minimumFractionDigits = 1
+            formatter.maximumFractionDigits = 1
+        }
         formatter.positivePrefix = "  +"
         formatter.negativePrefix = "  -"
         return formatter.string(from: deltaAsDecimal as NSNumber) ?? "--"
@@ -35,14 +39,14 @@ extension LiveActivityAttributes.ContentState {
     init?(
         new bg: GlucoseData,
         prev _: GlucoseData?,
-        mmol: Bool,
+        units: GlucoseUnits,
         chart: [GlucoseData],
         settings: FreeAPSSettings,
         determination: DeterminationData?,
         override: OverrideData?
     ) {
         let glucose = bg.glucose
-        let formattedBG = Self.formatGlucose(Int(glucose), mmol: mmol, forceSign: false)
+        let formattedBG = Self.formatGlucose(Int(glucose), units: units, forceSign: false)
         var rotationDegrees: Double = 0.0
 
         switch bg.direction {
@@ -69,7 +73,7 @@ extension LiveActivityAttributes.ContentState {
         }
 
         let trendString = bg.direction?.symbol as? String
-        let change = Self.calculateChange(chart: chart)
+        let change = Self.calculateChange(chart: chart, units: units)
         let chartBG = chart.map(\.glucose)
         let conversionFactor: Double = settings.units == .mmolL ? 18.0 : 1.0
         let convertedChartBG = chartBG.map { Double($0) / conversionFactor }

+ 1 - 1
FreeAPS/Sources/Services/LiveActivity/LiveActivityBridge.swift

@@ -217,7 +217,7 @@ extension LiveActivityBridge {
             let content = LiveActivityAttributes.ContentState(
                 new: bg,
                 prev: latestGlucose,
-                mmol: settings.units == .mmolL,
+                units: settings.units,
                 chart: glucose,
                 settings: settings,
                 determination: determination,