From d81b5162f0038b56614f01414eb11a0d46abe85e Mon Sep 17 00:00:00 2001 From: Pete Schwamb Date: Mon, 31 Jan 2022 12:34:29 -0600 Subject: [PATCH] Add total delivery and last status date to pod details screen --- OmniBLE/PumpManager/OmniBLEPumpManager.swift | 8 ++-- .../ViewModels/OmniBLESettingsViewModel.swift | 5 +-- .../Views/OmniBLESettingsView.swift | 6 +-- .../PumpManagerUI/Views/PodDetailsView.swift | 42 ++++++++++++++++--- 4 files changed, 46 insertions(+), 15 deletions(-) diff --git a/OmniBLE/PumpManager/OmniBLEPumpManager.swift b/OmniBLE/PumpManager/OmniBLEPumpManager.swift index 45001ea3..e923d175 100644 --- a/OmniBLE/PumpManager/OmniBLEPumpManager.swift +++ b/OmniBLE/PumpManager/OmniBLEPumpManager.swift @@ -469,15 +469,17 @@ extension OmniBLEPumpManager { return state.podState?.expiresAt } - public var podVersion: PodVersion? { + public var podDetails: PodDetails? { guard let podState = state.podState else { return nil } - return PodVersion( + return PodDetails( lotNumber: podState.lotNo, sequenceNumber: podState.lotSeq, firmwareVersion: podState.firmwareVersion, - bleFirmwareVersion: podState.bleFirmwareVersion + bleFirmwareVersion: podState.bleFirmwareVersion, + totalDelivery: podState.lastInsulinMeasurements?.delivered, + lastStatus: podState.lastInsulinMeasurements?.validTime ) } diff --git a/OmniBLE/PumpManagerUI/ViewModels/OmniBLESettingsViewModel.swift b/OmniBLE/PumpManagerUI/ViewModels/OmniBLESettingsViewModel.swift index 50ab0302..88d97b63 100644 --- a/OmniBLE/PumpManagerUI/ViewModels/OmniBLESettingsViewModel.swift +++ b/OmniBLE/PumpManagerUI/ViewModels/OmniBLESettingsViewModel.swift @@ -106,8 +106,8 @@ class OmniBLESettingsViewModel: ObservableObject { return pumpManager.status.timeZone } - var podVersion: PodVersion? { - return pumpManager.podVersion + var podDetails: PodDetails? { + return pumpManager.podDetails } var viewTitle: String { @@ -153,7 +153,6 @@ class OmniBLESettingsViewModel: ObservableObject { }() let basalRateFormatter: NumberFormatter = { - let unit = HKUnit.internationalUnit() let numberFormatter = NumberFormatter() numberFormatter.numberStyle = .decimal numberFormatter.minimumFractionDigits = 1 diff --git a/OmniBLE/PumpManagerUI/Views/OmniBLESettingsView.swift b/OmniBLE/PumpManagerUI/Views/OmniBLESettingsView.swift index 784a99f6..dd639784 100644 --- a/OmniBLE/PumpManagerUI/Views/OmniBLESettingsView.swift +++ b/OmniBLE/PumpManagerUI/Views/OmniBLESettingsView.swift @@ -284,7 +284,7 @@ struct OmniBLESettingsView: View { Section() { HStack { - FrameworkLocalText("Pod Insertion", comment: "Label for pod insertion row") + FrameworkLocalText("Pod Activated", comment: "Label for pod insertion row") Spacer() Text(self.viewModel.activatedAtString) .foregroundColor(Color.secondary) @@ -297,8 +297,8 @@ struct OmniBLESettingsView: View { .foregroundColor(Color.secondary) } - if let podVersion = self.viewModel.podVersion { - NavigationLink(destination: PodDetailsView(podVersion: podVersion)) { + if let podDetails = self.viewModel.podDetails { + NavigationLink(destination: PodDetailsView(podDetails: podDetails)) { FrameworkLocalText("Device Details", comment: "Text for device details disclosure row").foregroundColor(Color.primary) } } else { diff --git a/OmniBLE/PumpManagerUI/Views/PodDetailsView.swift b/OmniBLE/PumpManagerUI/Views/PodDetailsView.swift index 5b7ff36b..58963be4 100644 --- a/OmniBLE/PumpManagerUI/Views/PodDetailsView.swift +++ b/OmniBLE/PumpManagerUI/Views/PodDetailsView.swift @@ -9,16 +9,28 @@ import SwiftUI import LoopKitUI -public struct PodVersion { +public struct PodDetails { var lotNumber: UInt32 var sequenceNumber: UInt32 var firmwareVersion: String var bleFirmwareVersion: String + var totalDelivery: Double? + var lastStatus: Date? } struct PodDetailsView: View { - var podVersion: PodVersion + var podDetails: PodDetails + + let ageFormatter: DateComponentsFormatter = { + let formatter = DateComponentsFormatter() + + formatter.allowedUnits = [.day, .hour, .minute, .second] + formatter.maximumUnitCount = 1 + formatter.unitsStyle = .short + + return formatter + }() private func row(_ label: String, value: String) -> some View { HStack { @@ -28,11 +40,29 @@ struct PodDetailsView: View { } } + var totalDeliveryText: String { + if let delivery = podDetails.totalDelivery { + return String(format: LocalizedString("%g U", comment: "Format string for total delivery on pod details screen"), delivery) + } else { + return LocalizedString("NA", comment: "String shown on pod details for total delivery when not available.") + } + } + + var lastStatusText: String { + if let lastStatus = podDetails.lastStatus, let ageString = ageFormatter.string(from: Date().timeIntervalSince(lastStatus)) { + return String(format: LocalizedString("%@ ago", comment: "Format string for last status date on pod details screen"), ageString) + } else { + return LocalizedString("NA", comment: "String shown on pod details for last status date when not available.") + } + } + var body: some View { List { - row(LocalizedString("Lot Number", comment: "description label for lot number pod details row"), value: String(describing: podVersion.lotNumber)) - row(LocalizedString("Sequence Number", comment: "description label for sequence number pod details row"), value: String(describing: podVersion.sequenceNumber)) - row(LocalizedString("Firmware Version", comment: "description label for firmware version pod details row"), value: podVersion.firmwareVersion) + row(LocalizedString("Lot Number", comment: "description label for lot number pod details row"), value: String(describing: podDetails.lotNumber)) + row(LocalizedString("Sequence Number", comment: "description label for sequence number pod details row"), value: String(describing: podDetails.sequenceNumber)) + row(LocalizedString("Firmware Version", comment: "description label for firmware version pod details row"), value: podDetails.firmwareVersion) + row(LocalizedString("Total Delivery", comment: "description label for total delivery pod details row"), value: totalDeliveryText) + row(LocalizedString("Last Status", comment: "description label for last status date pod details row"), value: lastStatusText) } .navigationBarTitle(Text(LocalizedString("Device Details", comment: "title for device details page")), displayMode: .automatic) } @@ -40,6 +70,6 @@ struct PodDetailsView: View { struct PodDetailsView_Previews: PreviewProvider { static var previews: some View { - PodDetailsView(podVersion: PodVersion(lotNumber: 0x1234, sequenceNumber: 0x1234, firmwareVersion: "1.1.1", bleFirmwareVersion: "2.2.2")) + PodDetailsView(podDetails: PodDetails(lotNumber: 0x1234, sequenceNumber: 0x1234, firmwareVersion: "1.1.1", bleFirmwareVersion: "2.2.2", totalDelivery: 10, lastStatus: Date())) } }