Kaynağa Gözat

Refactor overview step; persist preferences; extend startup step

Deniz Cengiz 1 yıl önce
ebeveyn
işleme
f9982f9f03

+ 36 - 5
Trio/Sources/Localizations/Main/Localizable.xcstrings

@@ -30132,6 +30132,7 @@
       }
       }
     },
     },
     "Algorithm" : {
     "Algorithm" : {
+      "extractionState" : "stale",
       "localizations" : {
       "localizations" : {
         "bg" : {
         "bg" : {
           "stringUnit" : {
           "stringUnit" : {
@@ -33427,6 +33428,9 @@
         }
         }
       }
       }
     },
     },
+    "Already using Trio and updating from an older version?" : {
+
+    },
     "Also add source info" : {
     "Also add source info" : {
       "extractionState" : "manual",
       "extractionState" : "manual",
       "localizations" : {
       "localizations" : {
@@ -57833,6 +57837,9 @@
         }
         }
       }
       }
     },
     },
+    "Configure diagnostics sharing, optionally sync with Nightscout, and enter essentials." : {
+
+    },
     "Configure Libre Transmitter" : {
     "Configure Libre Transmitter" : {
       "extractionState" : "manual",
       "extractionState" : "manual",
       "localizations" : {
       "localizations" : {
@@ -62443,6 +62450,9 @@
         }
         }
       }
       }
     },
     },
+    "Customize Trio’s algorithm features. Most users start with the recommended settings." : {
+
+    },
     "CV" : {
     "CV" : {
       "comment" : "CV",
       "comment" : "CV",
       "localizations" : {
       "localizations" : {
@@ -69543,6 +69553,9 @@
         }
         }
       }
       }
     },
     },
+    "Define your glucose target, basal rates, carb ratios, and insulin sensitivity." : {
+
+    },
     "Delay between fat & protein entry and first FPU entry." : {
     "Delay between fat & protein entry and first FPU entry." : {
       "localizations" : {
       "localizations" : {
         "bg" : {
         "bg" : {
@@ -111381,6 +111394,9 @@
         }
         }
       }
       }
     },
     },
+    "In the next few steps, you’ll configure your algorithm settings for" : {
+
+    },
     "Include IOB & COB in the calendar event data." : {
     "Include IOB & COB in the calendar event data." : {
       "localizations" : {
       "localizations" : {
         "bg" : {
         "bg" : {
@@ -152835,6 +152851,9 @@
         }
         }
       }
       }
     },
     },
+    "Prepare Trio" : {
+
+    },
     "Preset" : {
     "Preset" : {
       "localizations" : {
       "localizations" : {
         "bg" : {
         "bg" : {
@@ -168882,6 +168901,9 @@
         }
         }
       }
       }
     },
     },
+    "Set boundaries for insulin delivery and carb entries to help Trio keep you safe." : {
+
+    },
     "Set Display Values" : {
     "Set Display Values" : {
       "localizations" : {
       "localizations" : {
         "bg" : {
         "bg" : {
@@ -203557,6 +203579,9 @@
         }
         }
       }
       }
     },
     },
+    "Trio can automatically adapt insulin delivery based on inputs and glucose forecasts. Your algorithm settings play a major part in accurate and effective dosing." : {
+
+    },
     "Trio comes with a helpful Startup Guide. We recommend opening it now and following along as you go — side by side." : {
     "Trio comes with a helpful Startup Guide. We recommend opening it now and following along as you go — side by side." : {
 
 
     },
     },
@@ -206383,10 +206408,7 @@
         }
         }
       }
       }
     },
     },
-    "Trio’s algorithm can automatically adapt insulin delivery based on inputs and glucose forecsasts. Your algorithm settings play a major part in accurate and effective dosing." : {
-
-    },
-    "Trio's Onboarding consists of several steps. It takes about 5-10 minutes to complete. We'll guide you through each step." : {
+    "Trio's Onboarding takes about 15-30 minutes to complete. We'll guide you through each step." : {
 
 
     },
     },
     "Trio's Simple Lock Screen Widget displays current glucose reading, trend arrow, delta and the timestamp of the current reading." : {
     "Trio's Simple Lock Screen Widget displays current glucose reading, trend arrow, delta and the timestamp of the current reading." : {
@@ -215180,6 +215202,9 @@
         }
         }
       }
       }
     },
     },
+    "We recommend reviewing them carefully — Trio will guide you step-by-step." : {
+
+    },
     "We strongly recommend not changing DIA — it’s essential to stable and safe operation." : {
     "We strongly recommend not changing DIA — it’s essential to stable and safe operation." : {
 
 
     },
     },
@@ -219786,7 +219811,10 @@
     "You're All Set!" : {
     "You're All Set!" : {
 
 
     },
     },
-    "You've successfully completed the initial setup of Trio. Tap 'Get Started' to save your settings and get ready to start using Trio." : {
+    "You've successfully completed the initial setup of Trio. Tap 'Get Started' to save your settings and start using Trio." : {
+
+    },
+    "Your algorithm settings (previously called \"OpenAPS settings\") will be reset to defaults." : {
 
 
     },
     },
     "Your basal profile represents the amount of background insulin you need throughout the day. This helps Trio calculate your insulin needs." : {
     "Your basal profile represents the amount of background insulin you need throughout the day. This helps Trio calculate your insulin needs." : {
@@ -220227,6 +220255,9 @@
     "your progress will not be saved." : {
     "your progress will not be saved." : {
 
 
     },
     },
+    "Your therapy settings, pump, and CGM configurations will be carried over." : {
+
+    },
     "ZT" : {
     "ZT" : {
       "localizations" : {
       "localizations" : {
         "bg" : {
         "bg" : {

+ 33 - 5
Trio/Sources/Modules/Onboarding/OnboardingStateModel.swift

@@ -517,11 +517,39 @@ extension Onboarding {
 
 
         /// Applies the selected delivery preferences to the app's settings.
         /// Applies the selected delivery preferences to the app's settings.
         func applyToPreferences() {
         func applyToPreferences() {
-            var preferencesCopy = settingsManager.preferences
-            preferencesCopy.maxIOB = maxIOB
-            preferencesCopy.maxCOB = maxCOB
-            preferencesCopy.threshold_setting = minimumSafetyThreshold
-            settingsManager.preferences = preferencesCopy
+            var preferences = Preferences()
+
+            // delivery limits (those that are preference-bound, not pump-settings-bound
+            preferences.maxIOB = maxIOB
+            preferences.maxCOB = maxCOB
+            preferences.threshold_setting = minimumSafetyThreshold
+
+            // autosens
+            preferences.autosensMin = autosensMin
+            preferences.autosensMax = autosensMax
+            preferences.rewindResetsAutosens = rewindResetsAutosens
+
+            // smb settings
+            preferences.enableSMBAlways = enableSMBAlways
+            preferences.enableSMBWithCOB = enableSMBWithCOB
+            preferences.enableSMBWithTemptarget = enableSMBWithTempTarget
+            preferences.enableSMBAfterCarbs = enableSMBAfterCarbs
+            preferences.enableSMB_high_bg = enableSMBWithHighGlucoseTarget
+            preferences.enableSMB_high_bg_target = highGlucoseTarget
+            preferences.allowSMBWithHighTemptarget = allowSMBWithHighTempTarget
+            preferences.enableUAM = enableUAM
+            preferences.maxSMBBasalMinutes = maxSMBMinutes
+            preferences.maxUAMSMBBasalMinutes = maxUAMMinutes
+            preferences.maxDeltaBGthreshold = maxDeltaGlucoseThreshold
+
+            // target behavior
+            preferences.highTemptargetRaisesSensitivity = highTempTargetRaisesSensitivity
+            preferences.lowTemptargetLowersSensitivity = lowTempTargetLowersSensitivity
+            preferences.sensitivityRaisesTarget = sensitivityRaisesTarget
+            preferences.resistanceLowersTarget = resistanceLowersTarget
+            preferences.halfBasalExerciseTarget = halfBasalTarget
+
+            settingsManager.preferences = preferences
         }
         }
 
 
         /// Saves pump delivery limits to persistent storage and broadcasts changes.
         /// Saves pump delivery limits to persistent storage and broadcasts changes.

+ 5 - 5
Trio/Sources/Modules/Onboarding/View/OnboardingRootView.swift

@@ -238,7 +238,7 @@ struct OnboardingStepContent: View {
 
 
                             VStack(alignment: .leading) {
                             VStack(alignment: .leading) {
                                 Text(currentStep.title)
                                 Text(currentStep.title)
-                                    .font(.largeTitle)
+                                    .font(.title)
                                     .fontWeight(.bold)
                                     .fontWeight(.bold)
                                     .foregroundColor(.primary)
                                     .foregroundColor(.primary)
 
 
@@ -387,7 +387,7 @@ struct OnboardingNavigationButtons: View {
                 currentDeliverySubstep = previousSub
                 currentDeliverySubstep = previousSub
             } else if let previous = currentStep.previous {
             } else if let previous = currentStep.previous {
                 currentStep = previous
                 currentStep = previous
-                currentDeliverySubstep = .maxIOB
+                currentDeliverySubstep = .minimumSafetyThreshold
             }
             }
 
 
         case .autosensSettings:
         case .autosensSettings:
@@ -395,7 +395,7 @@ struct OnboardingNavigationButtons: View {
                 currentAutosensSubstep = previous
                 currentAutosensSubstep = previous
             } else if let previousStep = currentStep.previous {
             } else if let previousStep = currentStep.previous {
                 currentStep = previousStep
                 currentStep = previousStep
-                currentAutosensSubstep = .autosensMin
+                currentAutosensSubstep = .rewindResetsAutosens
             }
             }
 
 
         case .smbSettings:
         case .smbSettings:
@@ -403,7 +403,7 @@ struct OnboardingNavigationButtons: View {
                 currentSMBSubstep = previous
                 currentSMBSubstep = previous
             } else if let previousStep = currentStep.previous {
             } else if let previousStep = currentStep.previous {
                 currentStep = previousStep
                 currentStep = previousStep
-                currentSMBSubstep = .enableSMBAlways
+                currentSMBSubstep = .maxDeltaGlucoseThreshold
             }
             }
 
 
         case .targetBehavior:
         case .targetBehavior:
@@ -411,7 +411,7 @@ struct OnboardingNavigationButtons: View {
                 currentTargetBehaviorSubstep = previous
                 currentTargetBehaviorSubstep = previous
             } else if let previousStep = currentStep.previous {
             } else if let previousStep = currentStep.previous {
                 currentStep = previousStep
                 currentStep = previousStep
-                currentTargetBehaviorSubstep = .highTempTargetRaisesSensitivity
+                currentTargetBehaviorSubstep = .halfBasalTarget
             }
             }
 
 
         default:
         default:

+ 8 - 5
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/AlgorithmSettings/AlgorithmSettingsStepView.swift

@@ -24,20 +24,23 @@ struct AlgorithmSettingsStepView: View {
 
 
             VStack(alignment: .leading, spacing: 10) {
             VStack(alignment: .leading, spacing: 10) {
                 Text(
                 Text(
-                    "Trio’s algorithm can automatically adapt insulin delivery based on inputs and glucose forecsasts. Your algorithm settings play a major part in accurate and effective dosing."
-                )
+                    "Trio can automatically adapt insulin delivery based on inputs and glucose forecasts. Your algorithm settings play a major part in accurate and effective dosing."
+                ).multilineTextAlignment(.leading)
+
+                Text("In the next few steps, you’ll configure your algorithm settings for")
+                BulletPoint(String(localized: "Autosens"))
+                BulletPoint(String(localized: "Super Micro Bolus (SMB)"))
+                BulletPoint(String(localized: "Target Behavior"))
 
 
                 Text("Our strong recommendation is to ")
                 Text("Our strong recommendation is to ")
                     + Text("leave everything on default").bold()
                     + Text("leave everything on default").bold()
                     + Text(" as a beginner.")
                     + Text(" as a beginner.")
 
 
                 Text("Only adjust these settings if you’re an advanced or returning user who knows what they’re doing.")
                 Text("Only adjust these settings if you’re an advanced or returning user who knows what they’re doing.")
+                    .multilineTextAlignment(.leading)
             }
             }
             .padding(.horizontal)
             .padding(.horizontal)
 
 
-            Divider()
-                .padding(.horizontal)
-
             VStack(alignment: .leading, spacing: 10) {
             VStack(alignment: .leading, spacing: 10) {
                 Text("A few important notes:")
                 Text("A few important notes:")
                     .font(.headline)
                     .font(.headline)

+ 2 - 2
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/CompletedStepView.swift

@@ -5,7 +5,7 @@ struct CompletedStepView: View {
     var body: some View {
     var body: some View {
         VStack(alignment: .center, spacing: 20) {
         VStack(alignment: .center, spacing: 20) {
             Image(systemName: "checkmark.circle.fill")
             Image(systemName: "checkmark.circle.fill")
-                .font(.system(size: 80))
+                .font(.system(size: 60))
                 .foregroundColor(.green)
                 .foregroundColor(.green)
 
 
             Text("You're All Set!")
             Text("You're All Set!")
@@ -14,7 +14,7 @@ struct CompletedStepView: View {
                 .multilineTextAlignment(.center)
                 .multilineTextAlignment(.center)
 
 
             Text(
             Text(
-                "You've successfully completed the initial setup of Trio. Tap 'Get Started' to save your settings and get ready to start using Trio."
+                "You've successfully completed the initial setup of Trio. Tap 'Get Started' to save your settings and start using Trio."
             )
             )
             .multilineTextAlignment(.center)
             .multilineTextAlignment(.center)
             .foregroundColor(.secondary)
             .foregroundColor(.secondary)

+ 1 - 0
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/Nightscout/NightscoutImportStepView.swift

@@ -52,6 +52,7 @@ struct NightscoutImportStepView: View {
 
 
                     VStack(alignment: .leading, spacing: 10) {
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Trio will import the following therapy settings from your Nightscout instance:")
                         Text("Trio will import the following therapy settings from your Nightscout instance:")
+                            .multilineTextAlignment(.leading)
                         VStack(alignment: .leading) {
                         VStack(alignment: .leading) {
                             Text("• Glucose Targets")
                             Text("• Glucose Targets")
                             Text("• Basal Rates")
                             Text("• Basal Rates")

+ 76 - 6
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/OverviewStepView.swift

@@ -14,16 +14,86 @@ struct OverviewStepView: View {
                 .padding(.horizontal)
                 .padding(.horizontal)
 
 
             VStack(alignment: .center, spacing: 12) {
             VStack(alignment: .center, spacing: 12) {
-                ForEach(
-                    nonInfoOnboardingSteps,
-                    id: \.self
-                ) { step in
-                    SettingItemView(step: step, icon: step.iconName, title: step.title, type: .overview)
-                }
+                overviewItem(
+                    stepIndex: 1,
+                    title: String(localized: "Prepare Trio"),
+                    duration: "3-5",
+                    description: String(
+                        localized: "Configure diagnostics sharing, optionally sync with Nightscout, and enter essentials."
+                    )
+                )
+
+                Divider()
+
+                overviewItem(
+                    stepIndex: 2,
+                    title: String(localized: "Therapy Settings"),
+                    duration: "5-10",
+                    description: String(
+                        localized: "Define your glucose target, basal rates, carb ratios, and insulin sensitivity."
+                    )
+                )
+
+                Divider()
+
+                overviewItem(
+                    stepIndex: 3,
+                    title: String(localized: "Delivery Limits"),
+                    duration: "3-5",
+                    description: String(
+                        localized: "Set boundaries for insulin delivery and carb entries to help Trio keep you safe."
+                    )
+                )
+
+                Divider()
+
+                overviewItem(
+                    stepIndex: 4,
+                    title: String(localized: "Algorithm Settings"),
+                    duration: "5-10",
+                    description: String(
+                        localized: "Customize Trio’s algorithm features. Most users start with the recommended settings."
+                    )
+                )
             }
             }
             .padding()
             .padding()
             .background(Color.chart.opacity(0.65))
             .background(Color.chart.opacity(0.65))
             .cornerRadius(10)
             .cornerRadius(10)
         }
         }
     }
     }
+
+    @ViewBuilder private func overviewItem(
+        stepIndex: Int,
+        title: String,
+        duration: String,
+        description: String
+    ) -> some View {
+        VStack(alignment: .leading) {
+            HStack {
+                HStack(spacing: 14) {
+                    stepCount(stepIndex)
+                    Text(title).font(.headline)
+                }
+
+                Spacer()
+
+                Text("\(duration) \(String(localized: "min"))")
+                    .font(.subheadline)
+            }
+
+            Text(description)
+                .font(.footnote)
+                .foregroundStyle(Color.secondary)
+                .padding(.vertical, 8)
+        }
+    }
+
+    @ViewBuilder private func stepCount(_ count: Int) -> some View {
+        Text(count.description)
+            .font(.subheadline.bold())
+            .frame(width: 26, height: 26, alignment: .center)
+            .background(Color.blue)
+            .foregroundStyle(.white)
+            .clipShape(Capsule())
+    }
 }
 }

+ 14 - 2
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/StartupGuideStepView.swift

@@ -12,8 +12,9 @@ struct StartupGuideStepView: View {
     var body: some View {
     var body: some View {
         VStack(alignment: .leading, spacing: 20) {
         VStack(alignment: .leading, spacing: 20) {
             Text("Before you begin…")
             Text("Before you begin…")
-                .font(.title.bold())
                 .padding(.horizontal)
                 .padding(.horizontal)
+                .font(.title3)
+                .bold()
 
 
             VStack(alignment: .leading, spacing: 10) {
             VStack(alignment: .leading, spacing: 10) {
                 BulletPoint(String(localized: "Take a deep breath — you've got this."))
                 BulletPoint(String(localized: "Take a deep breath — you've got this."))
@@ -31,7 +32,18 @@ struct StartupGuideStepView: View {
                         .cornerRadius(8)
                         .cornerRadius(8)
                 }
                 }
                 .frame(maxWidth: .infinity, alignment: .center)
                 .frame(maxWidth: .infinity, alignment: .center)
-                .padding([.top, .horizontal])
+                .padding(.horizontal)
+            }.padding(.horizontal)
+
+            VStack(alignment: .leading, spacing: 10) {
+                Text("Already using Trio and updating from an older version?").bold()
+                BulletPoint(String(localized: "Your therapy settings, pump, and CGM configurations will be carried over."))
+                BulletPoint(
+                    String(
+                        localized: "Your algorithm settings (previously called \"OpenAPS settings\") will be reset to defaults."
+                    )
+                )
+                BulletPoint(String(localized: "We recommend reviewing them carefully — Trio will guide you step-by-step."))
             }.padding(.horizontal)
             }.padding(.horizontal)
 
 
             HStack {
             HStack {

+ 34 - 29
Trio/Sources/Modules/Onboarding/View/OnboardingView+AlgorithmUtil.swift

@@ -163,7 +163,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
         switch self {
         switch self {
         case .autosensMin:
         case .autosensMin:
             return VStack(alignment: .leading, spacing: 8) {
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: 70%").bold()
+                Text("Default: 70%").bold().foregroundStyle(Color.primary)
                 Text(
                 Text(
                     "Autosens Min sets the minimum Autosens Ratio used by Autosens, Dynamic ISF, and Sigmoid Formula."
                     "Autosens Min sets the minimum Autosens Ratio used by Autosens, Dynamic ISF, and Sigmoid Formula."
                 )
                 )
@@ -176,7 +176,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
             }
         case .autosensMax:
         case .autosensMax:
             return VStack(alignment: .leading, spacing: 8) {
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: 120%").bold()
+                Text("Default: 120%").bold().foregroundStyle(Color.primary)
                 Text(
                 Text(
                     "Autosens Max sets the maximum Autosens Ratio used by Autosens, Dynamic ISF, and Sigmoid Formula."
                     "Autosens Max sets the maximum Autosens Ratio used by Autosens, Dynamic ISF, and Sigmoid Formula."
                 )
                 )
@@ -188,20 +188,24 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
                 )
                 )
             }
             }
         case .rewindResetsAutosens:
         case .rewindResetsAutosens:
-            return VStack(alignment: .leading, spacing: 8) {
-                Text(
-                    "This feature resets the Autosens Ratio to neutral when you rewind your pump on the assumption that this corresponds to a site change."
-                )
-                Text(
-                    "Autosens will begin learning sensitivity anew from the time of the rewind, which may take up to 6 hours."
-                )
-                Text(
-                    "Tip: If you usually rewind your pump independently of site changes, you may want to consider disabling this feature."
-                )
+            return VStack(alignment: .leading, spacing: 5) {
+                Text("Default: ON").bold().foregroundStyle(Color.primary)
+                Text("Medtronic Users Only").bold()
+                VStack(alignment: .leading, spacing: 8) {
+                    Text(
+                        "This feature resets the Autosens Ratio to neutral when you rewind your pump on the assumption that this corresponds to a site change."
+                    )
+                    Text(
+                        "Autosens will begin learning sensitivity anew from the time of the rewind, which may take up to 6 hours."
+                    )
+                    Text(
+                        "Tip: If you usually rewind your pump independently of site changes, you may want to consider disabling this feature."
+                    )
+                }
             }
             }
         case .enableSMBAlways:
         case .enableSMBAlways:
             return VStack(alignment: .leading, spacing: 8) {
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                 Text(
                     "When enabled, Super Micro Boluses (SMBs) will always be allowed if dosing calculations determine insulin is needed via the SMB delivery method, except when a high Temp Target is set. Enabling SMB Always will remove redundant \"Enable SMB\" options when this setting is enacted."
                     "When enabled, Super Micro Boluses (SMBs) will always be allowed if dosing calculations determine insulin is needed via the SMB delivery method, except when a high Temp Target is set. Enabling SMB Always will remove redundant \"Enable SMB\" options when this setting is enacted."
                 )
                 )
@@ -211,7 +215,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
             }
         case .enableSMBWithCOB:
         case .enableSMBWithCOB:
             return VStack(alignment: .leading, spacing: 8) {
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                 Text(
                     "When the carb on board (COB) forecast line is active, enabling this feature allows Trio to use Super Micro Boluses (SMB) to deliver the insulin required."
                     "When the carb on board (COB) forecast line is active, enabling this feature allows Trio to use Super Micro Boluses (SMB) to deliver the insulin required."
                 )
                 )
@@ -221,7 +225,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
             }
         case .enableSMBWithTempTarget:
         case .enableSMBWithTempTarget:
             return VStack(alignment: .leading, spacing: 8) {
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                 Text(
                     "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) at times when a manual Temporary Target under \(units == .mgdL ? "100" : 100.formattedAsMmolL) \(units.rawValue) is set."
                     "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) at times when a manual Temporary Target under \(units == .mgdL ? "100" : 100.formattedAsMmolL) \(units.rawValue) is set."
                 )
                 )
@@ -231,7 +235,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
             }
         case .enableSMBAfterCarbs:
         case .enableSMBAfterCarbs:
             return VStack(alignment: .leading, spacing: 8) {
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                 Text(
                     "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) for 6 hours after a carb entry, regardless of whether there are active carbs on board (COB)."
                     "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) for 6 hours after a carb entry, regardless of whether there are active carbs on board (COB)."
                 )
                 )
@@ -241,7 +245,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
             }
         case .enableSMBWithHighGlucoseTarget:
         case .enableSMBWithHighGlucoseTarget:
             return VStack(alignment: .leading, spacing: 8) {
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                 Text(
                     "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) when glucose reading is above the value set as High BG Target."
                     "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) when glucose reading is above the value set as High BG Target."
                 )
                 )
@@ -251,7 +255,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
             }
         case .allowSMBWithHighTempTarget:
         case .allowSMBWithHighTempTarget:
             return VStack(alignment: .leading, spacing: 8) {
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                 Text(
                     "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) when a manual Temporary Target above \(units == .mgdL ? "100" : 100.formattedAsMmolL) \(units.rawValue) is set."
                     "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) when a manual Temporary Target above \(units == .mgdL ? "100" : 100.formattedAsMmolL) \(units.rawValue) is set."
                 )
                 )
@@ -264,7 +268,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
             }
         case .enableUAM:
         case .enableUAM:
             return VStack(alignment: .leading, spacing: 8) {
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                 Text(
                     "Enabling the UAM (Unannounced Meals) feature allows the system to detect and respond to unexpected rises in glucose readings caused by unannounced or miscalculated carbs, meals high in fat or protein, or other factors like adrenaline."
                     "Enabling the UAM (Unannounced Meals) feature allows the system to detect and respond to unexpected rises in glucose readings caused by unannounced or miscalculated carbs, meals high in fat or protein, or other factors like adrenaline."
                 )
                 )
@@ -279,8 +283,8 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             return VStack(spacing: 8) {
             return VStack(spacing: 8) {
                 VStack(alignment: .leading, spacing: 8) {
                 VStack(alignment: .leading, spacing: 8) {
                     VStack(alignment: .leading, spacing: 1) {
                     VStack(alignment: .leading, spacing: 1) {
-                        Text("Default: 30 minutes").bold()
-                        Text("(50% current basal rate)").bold()
+                        Text("Default: 30 minutes").bold().foregroundStyle(Color.primary)
+                        Text("(50% current basal rate)")
                     }
                     }
                     VStack(alignment: .leading, spacing: 8) {
                     VStack(alignment: .leading, spacing: 8) {
                         Text(
                         Text(
@@ -309,9 +313,10 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             return VStack(spacing: 8) {
             return VStack(spacing: 8) {
                 VStack(alignment: .leading, spacing: 8) {
                 VStack(alignment: .leading, spacing: 8) {
                     VStack(alignment: .leading, spacing: 1) {
                     VStack(alignment: .leading, spacing: 1) {
-                        Text("Default: 30 minutes").bold()
-                        Text("(50% current basal rate)").bold()
+                        Text("Default: 30 minutes").bold().foregroundStyle(Color.primary)
+                        Text("(50% current basal rate)")
                     }
                     }
+
                     VStack(alignment: .leading, spacing: 8) {
                     VStack(alignment: .leading, spacing: 8) {
                         Text(
                         Text(
                             "This is a limit on the size of a single UAM SMB. One UAM SMB can only be as large as this many minutes of your current profile basal rate."
                             "This is a limit on the size of a single UAM SMB. One UAM SMB can only be as large as this many minutes of your current profile basal rate."
@@ -336,7 +341,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
             }
         case .maxDeltaGlucoseThreshold:
         case .maxDeltaGlucoseThreshold:
             return VStack(alignment: .leading, spacing: 8) {
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: 20% increase").bold()
+                Text("Default: 20% increase").bold().foregroundStyle(Color.primary)
                 Text(
                 Text(
                     "Maximum allowed positive percent change in glucose level to permit SMBs. If the difference in glucose is greater than this, Trio will disable SMBs."
                     "Maximum allowed positive percent change in glucose level to permit SMBs. If the difference in glucose is greater than this, Trio will disable SMBs."
                 )
                 )
@@ -344,7 +349,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
             }
         case .highTempTargetRaisesSensitivity:
         case .highTempTargetRaisesSensitivity:
             return VStack(alignment: .leading, spacing: 8) {
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                 Text(
                     "When this feature is enabled, manually setting a temporary target above \(units == .mgdL ? "100" : 100.formattedAsMmolL) \(units.rawValue) will decrease the Autosens Ratio used for ISF and basal adjustments, resulting in less insulin delivered overall. This scales with the temporary target set; the higher the temp target, the lower the Autosens Ratio used."
                     "When this feature is enabled, manually setting a temporary target above \(units == .mgdL ? "100" : 100.formattedAsMmolL) \(units.rawValue) will decrease the Autosens Ratio used for ISF and basal adjustments, resulting in less insulin delivered overall. This scales with the temporary target set; the higher the temp target, the lower the Autosens Ratio used."
                 )
                 )
@@ -355,7 +360,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
             }
         case .lowTempTargetLowersSensitivity:
         case .lowTempTargetLowersSensitivity:
             return VStack(alignment: .leading, spacing: 8) {
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                 Text(
                     "When this feature is enabled, setting a temporary target below \(units == .mgdL ? "100" : 100.formattedAsMmolL) \(units.rawValue) will increase the Autosens Ratio used for ISF and basal adjustments, resulting in more insulin delivered overall. This scales with the temporary target set; the lower the Temp Target, the higher the Autosens Ratio used. It requires Algorithm Settings > Autosens > Autosens Max to be set to > 100% to work."
                     "When this feature is enabled, setting a temporary target below \(units == .mgdL ? "100" : 100.formattedAsMmolL) \(units.rawValue) will increase the Autosens Ratio used for ISF and basal adjustments, resulting in more insulin delivered overall. This scales with the temporary target set; the lower the Temp Target, the higher the Autosens Ratio used. It requires Algorithm Settings > Autosens > Autosens Max to be set to > 100% to work."
                 )
                 )
@@ -366,14 +371,14 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
             }
         case .sensitivityRaisesTarget:
         case .sensitivityRaisesTarget:
             return VStack(alignment: .leading, spacing: 8) {
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                 Text(
                     "Enabling this feature causes Trio to automatically raise the targeted glucose if it detects an increase in insulin sensitivity from your baseline."
                     "Enabling this feature causes Trio to automatically raise the targeted glucose if it detects an increase in insulin sensitivity from your baseline."
                 )
                 )
             }
             }
         case .resistanceLowersTarget:
         case .resistanceLowersTarget:
             return VStack(alignment: .leading, spacing: 8) {
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                 Text(
                     "Enabling this feature causes Trio to automatically reduce the targeted glucose if it detects a decrease in sensitivity (resistance) from your baseline."
                     "Enabling this feature causes Trio to automatically reduce the targeted glucose if it detects a decrease in sensitivity (resistance) from your baseline."
                 )
                 )
@@ -383,7 +388,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
                 Text(
                 Text(
                     "Default: \(units == .mgdL ? "160" : 160.formattedAsMmolL) \(units.rawValue)"
                     "Default: \(units == .mgdL ? "160" : 160.formattedAsMmolL) \(units.rawValue)"
                 )
                 )
-                .bold()
+                .bold().foregroundStyle(Color.primary)
                 Text(
                 Text(
                     "The Half Basal Exercise Target allows you to scale down your basal insulin during exercise or scale up your basal insulin when eating soon when a temporary glucose target is set."
                     "The Half Basal Exercise Target allows you to scale down your basal insulin during exercise or scale up your basal insulin when eating soon when a temporary glucose target is set."
                 )
                 )

+ 2 - 2
Trio/Sources/Modules/Onboarding/View/OnboardingView+Util.swift

@@ -62,7 +62,7 @@ enum OnboardingStep: Int, CaseIterable, Identifiable, Equatable {
         case .deliveryLimits:
         case .deliveryLimits:
             return String(localized: "Delivery Limits")
             return String(localized: "Delivery Limits")
         case .algorithmSettings:
         case .algorithmSettings:
-            return String(localized: "Algorithm")
+            return String(localized: "Algorithm Settings")
         case .autosensSettings:
         case .autosensSettings:
             return String(localized: "Autosens")
             return String(localized: "Autosens")
         case .smbSettings:
         case .smbSettings:
@@ -87,7 +87,7 @@ enum OnboardingStep: Int, CaseIterable, Identifiable, Equatable {
             )
             )
         case .overview:
         case .overview:
             return String(
             return String(
-                localized: "Trio's Onboarding consists of several steps. It takes about 5-10 minutes to complete. We'll guide you through each step."
+                localized: "Trio's Onboarding takes about 15-30 minutes to complete. We'll guide you through each step."
             )
             )
         case .diagnostics:
         case .diagnostics:
             return String(
             return String(