Jelajahi Sumber

Split up Algorithm Settings overview with substeps; add important notes

Deniz Cengiz 1 tahun lalu
induk
melakukan
a68a7682c0

+ 8 - 4
Trio.xcodeproj/project.pbxproj

@@ -564,7 +564,7 @@
 		DD498F2D2D692BEA00AAEA30 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 8A9134292D63D9A1007F8874 /* Localizable.xcstrings */; };
 		DD4A00212DAEEED800AB7387 /* OnboardingView+AlgorithmUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD4A00202DAEEEC400AB7387 /* OnboardingView+AlgorithmUtil.swift */; };
 		DD4A00242DAEF5E400AB7387 /* AlgorithmSettingsSubstepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD4A00232DAEF5DC00AB7387 /* AlgorithmSettingsSubstepView.swift */; };
-		DD4AFFF12DADB59100AB7387 /* AlgorithmSettingsStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD4AFFF02DADB59100AB7387 /* AlgorithmSettingsStepView.swift */; };
+		DD4AFFF12DADB59100AB7387 /* AlgorithmSettingsContentsStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD4AFFF02DADB59100AB7387 /* AlgorithmSettingsContentsStepView.swift */; };
 		DD4C57A82D73ADEA001BFF2C /* RestartLiveActivityIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD4C57A72D73ADEA001BFF2C /* RestartLiveActivityIntent.swift */; };
 		DD4C57AA2D73B3E2001BFF2C /* RestartLiveActivityIntentRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD4C57A92D73B3D9001BFF2C /* RestartLiveActivityIntentRequest.swift */; };
 		DD4C581F2D73C43D001BFF2C /* LoopStatsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD4C581E2D73C43D001BFF2C /* LoopStatsView.swift */; };
@@ -577,6 +577,7 @@
 		DD68889D2C386E17006E3C44 /* NightscoutExercise.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD68889C2C386E17006E3C44 /* NightscoutExercise.swift */; };
 		DD6A4E7E2DBEBF0F008C4B26 /* StartupReturningUserStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD6A4E7D2DBEBF0F008C4B26 /* StartupReturningUserStepView.swift */; };
 		DD6A4E802DBEC3EE008C4B26 /* StartupForceCloseWarningStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD6A4E7F2DBEC3EE008C4B26 /* StartupForceCloseWarningStepView.swift */; };
+		DD6A4E842DBEDD39008C4B26 /* AlgorithmSettingsImportantNotesStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD6A4E832DBEDD39008C4B26 /* AlgorithmSettingsImportantNotesStepView.swift */; };
 		DD6B7CB22C7B6F0800B75029 /* Rounding.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD6B7CB12C7B6F0800B75029 /* Rounding.swift */; };
 		DD6B7CB42C7B71F700B75029 /* ForecastDisplayType.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD6B7CB32C7B71F700B75029 /* ForecastDisplayType.swift */; };
 		DD6D67E42C9C253500660C9B /* ColorSchemeOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD6D67E32C9C253500660C9B /* ColorSchemeOption.swift */; };
@@ -1365,7 +1366,7 @@
 		DD3F1F8F2D9E153A00DCE7B3 /* NightscoutImportStepView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NightscoutImportStepView.swift; sourceTree = "<group>"; };
 		DD4A00202DAEEEC400AB7387 /* OnboardingView+AlgorithmUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OnboardingView+AlgorithmUtil.swift"; sourceTree = "<group>"; };
 		DD4A00232DAEF5DC00AB7387 /* AlgorithmSettingsSubstepView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlgorithmSettingsSubstepView.swift; sourceTree = "<group>"; };
-		DD4AFFF02DADB59100AB7387 /* AlgorithmSettingsStepView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlgorithmSettingsStepView.swift; sourceTree = "<group>"; };
+		DD4AFFF02DADB59100AB7387 /* AlgorithmSettingsContentsStepView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlgorithmSettingsContentsStepView.swift; sourceTree = "<group>"; };
 		DD4C57A72D73ADEA001BFF2C /* RestartLiveActivityIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestartLiveActivityIntent.swift; sourceTree = "<group>"; };
 		DD4C57A92D73B3D9001BFF2C /* RestartLiveActivityIntentRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestartLiveActivityIntentRequest.swift; sourceTree = "<group>"; };
 		DD4C581E2D73C43D001BFF2C /* LoopStatsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopStatsView.swift; sourceTree = "<group>"; };
@@ -1378,6 +1379,7 @@
 		DD68889C2C386E17006E3C44 /* NightscoutExercise.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NightscoutExercise.swift; sourceTree = "<group>"; };
 		DD6A4E7D2DBEBF0F008C4B26 /* StartupReturningUserStepView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartupReturningUserStepView.swift; sourceTree = "<group>"; };
 		DD6A4E7F2DBEC3EE008C4B26 /* StartupForceCloseWarningStepView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartupForceCloseWarningStepView.swift; sourceTree = "<group>"; };
+		DD6A4E832DBEDD39008C4B26 /* AlgorithmSettingsImportantNotesStepView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlgorithmSettingsImportantNotesStepView.swift; sourceTree = "<group>"; };
 		DD6B7CB12C7B6F0800B75029 /* Rounding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Rounding.swift; sourceTree = "<group>"; };
 		DD6B7CB32C7B71F700B75029 /* ForecastDisplayType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastDisplayType.swift; sourceTree = "<group>"; };
 		DD6D67E32C9C253500660C9B /* ColorSchemeOption.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorSchemeOption.swift; sourceTree = "<group>"; };
@@ -3273,8 +3275,9 @@
 		DD4A00222DAEF5CD00AB7387 /* AlgorithmSettings */ = {
 			isa = PBXGroup;
 			children = (
+				DD6A4E832DBEDD39008C4B26 /* AlgorithmSettingsImportantNotesStepView.swift */,
 				DD4A00232DAEF5DC00AB7387 /* AlgorithmSettingsSubstepView.swift */,
-				DD4AFFF02DADB59100AB7387 /* AlgorithmSettingsStepView.swift */,
+				DD4AFFF02DADB59100AB7387 /* AlgorithmSettingsContentsStepView.swift */,
 			);
 			path = AlgorithmSettings;
 			sourceTree = "<group>";
@@ -4268,6 +4271,7 @@
 				190EBCC429FF136900BA767D /* UserInterfaceSettingsDataFlow.swift in Sources */,
 				CE3EEF9A2D463717001944DD /* CustomCGMOptionsView.swift in Sources */,
 				5A2325582BFCC168003518CA /* NightscoutConnectView.swift in Sources */,
+				DD6A4E842DBEDD39008C4B26 /* AlgorithmSettingsImportantNotesStepView.swift in Sources */,
 				3811DEB025C9D88300A708ED /* BaseKeychain.swift in Sources */,
 				110AEDE42C5193D200615CC9 /* BolusIntentRequest.swift in Sources */,
 				3811DE4325C9D4A100A708ED /* SettingsProvider.swift in Sources */,
@@ -4402,7 +4406,7 @@
 				58A3D5442C96DE11003F90FC /* TempTargetStored+Helper.swift in Sources */,
 				DD6B7CB42C7B71F700B75029 /* ForecastDisplayType.swift in Sources */,
 				BD47FD172D88AAF50043966B /* CompletedStepView.swift in Sources */,
-				DD4AFFF12DADB59100AB7387 /* AlgorithmSettingsStepView.swift in Sources */,
+				DD4AFFF12DADB59100AB7387 /* AlgorithmSettingsContentsStepView.swift in Sources */,
 				DDEBB05C2D89E9050032305D /* TimeInRangeType.swift in Sources */,
 				DD5DC9F32CF3D9DD00AB8703 /* AdjustmentsStateModel+TempTargets.swift in Sources */,
 				BD47FDDB2D8B659B0043966B /* BasalProfileStepView.swift in Sources */,

+ 22 - 3
Trio/Sources/Localizations/Main/Localizable.xcstrings

@@ -2687,6 +2687,9 @@
         }
       }
     },
+    " of usage data and is not yet configurable." : {
+
+    },
     " SMB" : {
       "comment" : "Super Micro Bolus indicator in delete alert",
       "localizations" : {
@@ -19479,6 +19482,9 @@
         }
       }
     },
+    "7 days" : {
+
+    },
     "10-90" : {
       "localizations" : {
         "bg" : {
@@ -21796,6 +21802,7 @@
       }
     },
     "A few important notes:" : {
+      "extractionState" : "stale",
       "localizations" : {
         "bg" : {
           "stringUnit" : {
@@ -21895,6 +21902,9 @@
         }
       }
     },
+    "A few important notes…" : {
+
+    },
     "A generated unique identifier (a random code like \"A7B2C9D3\" that doesn't identify you personally)" : {
       "localizations" : {
         "bg" : {
@@ -46682,9 +46692,6 @@
         }
       }
     },
-    "Be aware" : {
-
-    },
     "Be warned of connectivity or looping issues." : {
       "localizations" : {
         "bg" : {
@@ -84936,7 +84943,11 @@
         }
       }
     },
+    "Dynamic ISF requires at least " : {
+
+    },
     "Dynamic ISF requires at least 7 days of usage data and is not yet configurable." : {
+      "extractionState" : "stale",
       "localizations" : {
         "bg" : {
           "stringUnit" : {
@@ -95120,7 +95131,11 @@
         }
       }
     },
+    "Even if you’re an updating user, you’ll be guided through the algorithm settings configuration step-by-step." : {
+
+    },
     "Even if you’re an updating user, you’ll be guided through this step-by-step." : {
+      "extractionState" : "stale",
       "localizations" : {
         "bg" : {
           "stringUnit" : {
@@ -109747,6 +109762,7 @@
       }
     },
     "Got it! I'm ready to continue." : {
+      "extractionState" : "stale",
       "localizations" : {
         "bg" : {
           "stringUnit" : {
@@ -189865,6 +189881,9 @@
         }
       }
     },
+    "Some helpful reminders:" : {
+
+    },
     "Some other cloud" : {
       "localizations" : {
         "bg" : {

+ 1 - 7
Trio/Sources/Modules/Onboarding/OnboardingStateModel.swift

@@ -23,10 +23,6 @@ extension Onboarding {
         var diagnosticsSharingOption: DiagnosticsSharingOption = .enabled
         var hasAcceptedPrivacyPolicy: Bool = false
 
-        // MARK: - Important Startup Notes
-
-        var hasReadImportantStartupNotes: Bool = false
-
         // MARK: - Nightscout Setup
 
         var nightscoutSetupOption: NightscoutSetupOption = .noSelection
@@ -102,9 +98,7 @@ extension Onboarding {
         var maxCOB: Decimal = 120
         var minimumSafetyThreshold: Decimal = 60
 
-        // MARK: - Algorithm Settings Defaults & State
-
-        var hasReadAlgorithmSetupInformation: Bool = false
+        // MARK: - Algorithm Settings Defaults
 
         // Autosens Settings
         var autosensMin: Decimal = 0.7

+ 30 - 6
Trio/Sources/Modules/Onboarding/View/OnboardingRootView.swift

@@ -15,6 +15,7 @@ extension Onboarding {
         @State private var currentStartupSubstep: StartupSubstep = .startupGuide
         @State private var currentNightscoutSubstep: NightscoutSubstep = .setupSelection
         @State private var currentDeliverySubstep: DeliveryLimitSubstep = .maxIOB
+        @State private var currentAlgorithmSettingsOverviewSubstep: AlgorithmSettingsOverviewSubstep = .contents
         @State private var currentAutosensSubstep: AutosensSettingsSubstep = .autosensMin
         @State private var currentSMBSubstep: SMBSettingsSubstep = .enableSMBAlways
         @State private var currentTargetBehaviorSubstep: TargetBehaviorSubstep = .highTempTargetRaisesSensitivity
@@ -66,8 +67,6 @@ extension Onboarding {
 
         // Next button conditional
         private var shouldDisableNextButton: Bool {
-//            (currentStep == .startupGuide && !state.hasReadImportantStartupNotes)
-//                ||
             (currentStep == .diagnostics && state.diagnosticsSharingOption == .enabled && !state.hasAcceptedPrivacyPolicy)
                 ||
                 (currentStep == .nightscout && didSelectNightscoutSetupOption)
@@ -75,8 +74,6 @@ extension Onboarding {
                 (currentStep == .nightscout && hasValidNightscoutConnection)
                 ||
                 (currentStep == .nightscout && didSelectNightscoutImportOption)
-//                ||
-//                (currentStep == .algorithmSettings && !state.hasReadAlgorithmSetupInformation)
         }
 
         var body: some View {
@@ -100,6 +97,7 @@ extension Onboarding {
                                     switch currentStep {
                                     case .deliveryLimits: return currentDeliverySubstep.rawValue
                                     case .nightscout: return currentNightscoutSubstep.rawValue
+                                    case .algorithmSettings: return currentAlgorithmSettingsOverviewSubstep.rawValue
                                     case .autosensSettings: return currentAutosensSubstep.rawValue
                                     case .smbSettings: return currentSMBSubstep.rawValue
                                     case .targetBehavior: return currentTargetBehaviorSubstep.rawValue
@@ -109,6 +107,7 @@ extension Onboarding {
                                 stepsWithSubsteps: [
                                     .nightscout: NightscoutSubstep.allCases.count,
                                     .deliveryLimits: DeliveryLimitSubstep.allCases.count,
+                                    .algorithmSettings: AlgorithmSettingsOverviewSubstep.allCases.count,
                                     .autosensSettings: state.filteredAutosensSettingsSubsteps.count,
                                     .smbSettings: SMBSettingsSubstep.allCases.count,
                                     .targetBehavior: TargetBehaviorSubstep.allCases.count
@@ -126,6 +125,7 @@ extension Onboarding {
                             currentStartupSubstep: $currentStartupSubstep,
                             currentNightscoutSubstep: $currentNightscoutSubstep,
                             currentDeliverySubstep: $currentDeliverySubstep,
+                            currentAlgorithmSettingsOverviewSubstep: $currentAlgorithmSettingsOverviewSubstep,
                             currentAutosensSubstep: $currentAutosensSubstep,
                             currentSMBSubstep: $currentSMBSubstep,
                             currentTargetBehaviorSubstep: $currentTargetBehaviorSubstep,
@@ -140,6 +140,7 @@ extension Onboarding {
                             currentStartupSubstep: $currentStartupSubstep,
                             currentNightscoutSubstep: $currentNightscoutSubstep,
                             currentDeliverySubstep: $currentDeliverySubstep,
+                            currentAlgorithmSettingsOverviewSubstep: $currentAlgorithmSettingsOverviewSubstep,
                             currentAutosensSubstep: $currentAutosensSubstep,
                             currentSMBSubstep: $currentSMBSubstep,
                             currentTargetBehaviorSubstep: $currentTargetBehaviorSubstep,
@@ -273,6 +274,7 @@ struct OnboardingStepContent: View {
     @Binding var currentStartupSubstep: StartupSubstep
     @Binding var currentNightscoutSubstep: NightscoutSubstep
     @Binding var currentDeliverySubstep: DeliveryLimitSubstep
+    @Binding var currentAlgorithmSettingsOverviewSubstep: AlgorithmSettingsOverviewSubstep
     @Binding var currentAutosensSubstep: AutosensSettingsSubstep
     @Binding var currentSMBSubstep: SMBSettingsSubstep
     @Binding var currentTargetBehaviorSubstep: TargetBehaviorSubstep
@@ -366,7 +368,12 @@ struct OnboardingStepContent: View {
                         case .deliveryLimits:
                             DeliveryLimitsStepView(state: state, substep: currentDeliverySubstep)
                         case .algorithmSettings:
-                            AlgorithmSettingsStepView(state: state)
+                            switch currentAlgorithmSettingsOverviewSubstep {
+                            case .contents:
+                                AlgorithmSettingsContentsStepView(state: state)
+                            case .importantNotes:
+                                AlgorithmSettingsImportantNotesStepView(state: state)
+                            }
                         case .autosensSettings:
                             AlgorithmSettingsSubstepView(state: state, substep: currentAutosensSubstep)
                         case .smbSettings:
@@ -399,6 +406,7 @@ struct OnboardingStepContent: View {
             .onChange(of: currentStartupSubstep) { _, _ in scrollProxy.scrollTo("top", anchor: .top) }
             .onChange(of: currentNightscoutSubstep) { _, _ in scrollProxy.scrollTo("top", anchor: .top) }
             .onChange(of: currentDeliverySubstep) { _, _ in scrollProxy.scrollTo("top", anchor: .top) }
+            .onChange(of: currentAlgorithmSettingsOverviewSubstep) { _, _ in scrollProxy.scrollTo("top", anchor: .top) }
             .onChange(of: currentAutosensSubstep) { _, _ in scrollProxy.scrollTo("top", anchor: .top) }
             .onChange(of: currentSMBSubstep) { _, _ in scrollProxy.scrollTo("top", anchor: .top) }
             .onChange(of: currentTargetBehaviorSubstep) { _, _ in scrollProxy.scrollTo("top", anchor: .top) }
@@ -417,6 +425,7 @@ struct OnboardingNavigationButtons: View {
     @Binding var currentStartupSubstep: StartupSubstep
     @Binding var currentNightscoutSubstep: NightscoutSubstep
     @Binding var currentDeliverySubstep: DeliveryLimitSubstep
+    @Binding var currentAlgorithmSettingsOverviewSubstep: AlgorithmSettingsOverviewSubstep
     @Binding var currentAutosensSubstep: AutosensSettingsSubstep
     @Binding var currentSMBSubstep: SMBSettingsSubstep
     @Binding var currentTargetBehaviorSubstep: TargetBehaviorSubstep
@@ -504,7 +513,12 @@ struct OnboardingNavigationButtons: View {
             }
 
         case .algorithmSettings:
-            if let previous = currentStep.previous {
+            if let previousSub = AlgorithmSettingsOverviewSubstep(
+                rawValue: currentAlgorithmSettingsOverviewSubstep
+                    .rawValue - 1
+            ) {
+                currentAlgorithmSettingsOverviewSubstep = previousSub
+            } else if let previous = currentStep.previous {
                 currentStep = previous
                 currentDeliverySubstep = .minimumSafetyThreshold
                 currentAutosensSubstep = .autosensMin
@@ -522,6 +536,8 @@ struct OnboardingNavigationButtons: View {
             }
 
         case .smbSettings:
+            currentAlgorithmSettingsOverviewSubstep = .importantNotes
+
             if let previous = SMBSettingsSubstep(rawValue: currentSMBSubstep.rawValue - 1) {
                 /// If user has activated setting `.enableSMBAlways`, when navigating backwards
                 /// skip other redundant "Enable SMB"-settings and go straight to `enableSMBAlways`
@@ -609,6 +625,14 @@ struct OnboardingNavigationButtons: View {
                 currentDeliverySubstep = .maxIOB
             }
 
+        case .algorithmSettings:
+            if let next = AlgorithmSettingsOverviewSubstep(rawValue: currentAlgorithmSettingsOverviewSubstep.rawValue + 1) {
+                currentAlgorithmSettingsOverviewSubstep = next
+            } else if let nextStep = currentStep.next {
+                currentStep = nextStep
+                currentAlgorithmSettingsOverviewSubstep = .contents
+            }
+
         case .autosensSettings:
             let steps = state.filteredAutosensSettingsSubsteps
             if let current = steps.firstIndex(of: currentAutosensSubstep),

+ 63 - 0
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/AlgorithmSettings/AlgorithmSettingsContentsStepView.swift

@@ -0,0 +1,63 @@
+//
+//  AlgorithmSettingsContentsStepView.swift
+//  Trio
+//
+//  Created by Cengiz Deniz on 14.04.25
+//
+import SwiftUI
+
+struct AlgorithmSettingsContentsStepView: View {
+    @Bindable var state: Onboarding.StateModel
+
+    var body: some View {
+        VStack(alignment: .leading, spacing: 20) {
+            Text("Configure the algorithm…")
+                .padding(.horizontal)
+                .font(.title3)
+                .bold()
+
+            VStack(alignment: .leading, spacing: 10) {
+                HStack(alignment: .top, spacing: 10) {
+                    Image(systemName: "exclamationmark.triangle.fill").foregroundStyle(Color.bgDarkBlue, Color.orange)
+                        .symbolRenderingMode(.palette)
+                    Text("Important").foregroundStyle(Color.orange)
+                }.bold()
+
+                Text("Our strong recommendation is to ")
+                    + Text("leave everything on default").bold()
+                    + Text(" as a beginner.")
+            }
+            .frame(maxWidth: .infinity)
+            .padding()
+            .background(Color.chart.opacity(0.65))
+            .overlay(
+                RoundedRectangle(cornerRadius: 10)
+                    .stroke(Color.orange, lineWidth: 2)
+            )
+            .cornerRadius(10)
+
+            VStack(alignment: .leading, spacing: 20) {
+                Text(
+                    "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)
+
+                VStack(alignment: .leading, spacing: 10) {
+                    Text("In the next few steps, you’ll configure your algorithm settings for")
+                        .font(.headline)
+                        .padding(.bottom, 4)
+                        .multilineTextAlignment(.leading)
+
+                    BulletPoint(String(localized: "Autosens"))
+                    BulletPoint(String(localized: "Super Micro Bolus (SMB)"))
+                    BulletPoint(String(localized: "Target Behavior"))
+                }
+
+                Text("Only adjust these settings if you’re an advanced or returning user who knows what they’re doing.")
+                    .multilineTextAlignment(.leading)
+            }
+            .padding()
+            .background(Color.chart.opacity(0.65))
+            .cornerRadius(10)
+        }
+    }
+}

+ 62 - 0
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/AlgorithmSettings/AlgorithmSettingsImportantNotesStepView.swift

@@ -0,0 +1,62 @@
+//
+//  AlgorithmSettingsImportantNotesStepView.swift
+//  Trio
+//
+//  Created by Cengiz Deniz on 14.04.25
+//
+import SwiftUI
+
+struct AlgorithmSettingsImportantNotesStepView: View {
+    @Bindable var state: Onboarding.StateModel
+
+    var body: some View {
+        VStack(alignment: .leading, spacing: 20) {
+            Text("A few important notes…")
+                .padding(.horizontal)
+                .font(.title3)
+                .bold()
+
+            VStack(alignment: .leading, spacing: 10) {
+                HStack(alignment: .top, spacing: 10) {
+                    Image(systemName: "exclamationmark.triangle.fill").foregroundStyle(Color.bgDarkBlue, Color.orange)
+                        .symbolRenderingMode(.palette)
+                    Text("Important").foregroundStyle(Color.orange)
+                }.bold()
+
+                Text("Dynamic ISF requires at least ") + Text("7 days")
+                    .bold() + Text(" of usage data and is not yet configurable.")
+            }
+            .frame(maxWidth: .infinity)
+            .padding()
+            .background(Color.chart.opacity(0.65))
+            .overlay(
+                RoundedRectangle(cornerRadius: 10)
+                    .stroke(Color.orange, lineWidth: 2)
+            )
+            .cornerRadius(10)
+
+            VStack(alignment: .leading, spacing: 10) {
+                Text("Some helpful reminders:")
+                    .font(.headline)
+                    .padding(.bottom, 4)
+                    .multilineTextAlignment(.leading)
+
+                BulletPoint(
+                    String(
+                        localized: "Even if you’re an updating user, you’ll be guided through the algorithm settings configuration step-by-step."
+                    )
+                )
+                BulletPoint(String(localized: "All additional \"advanced settings\" have been reset."))
+                BulletPoint(
+                    String(localized: "The duration of insulin action (DIA) is now locked to Trio’s new default of 10 hours.")
+                )
+                BulletPoint(
+                    String(localized: "We strongly recommend not changing DIA — it’s essential to stable and safe operation.")
+                )
+            }
+            .padding()
+            .background(Color.chart.opacity(0.65))
+            .cornerRadius(10)
+        }
+    }
+}

+ 0 - 70
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/AlgorithmSettings/AlgorithmSettingsStepView.swift

@@ -1,70 +0,0 @@
-//
-//  AlgorithmSettingsStepView.swift
-//  Trio
-//
-//  Created by Cengiz Deniz on 14.04.25
-//
-import SwiftUI
-
-struct AlgorithmSettingsStepView: View {
-    @Bindable var state: Onboarding.StateModel
-
-    @State private var shouldDisplayPicker: Bool = false
-    @State private var decimalPlaceholder: Decimal = 0.0
-    @State private var booleanPlaceholder: Bool = false
-
-    private let settingsProvider = PickerSettingsProvider.shared
-
-    var body: some View {
-        VStack(alignment: .leading, spacing: 20) {
-            Text("Configure the algorithm…")
-                .padding(.horizontal)
-                .font(.title3)
-                .bold()
-
-            VStack(alignment: .leading, spacing: 10) {
-                Text(
-                    "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("leave everything on default").bold()
-                    + Text(" as a beginner.")
-
-                Text("Only adjust these settings if you’re an advanced or returning user who knows what they’re doing.")
-                    .multilineTextAlignment(.leading)
-            }
-            .padding(.horizontal)
-
-            VStack(alignment: .leading, spacing: 10) {
-                Text("A few important notes:")
-                    .font(.headline)
-                    .padding(.bottom, 4)
-
-                BulletPoint(String(localized: "Dynamic ISF requires at least 7 days of usage data and is not yet configurable."))
-                BulletPoint(String(localized: "Even if you’re an updating user, you’ll be guided through this step-by-step."))
-                BulletPoint(String(localized: "All additional \"advanced settings\" have been reset."))
-                BulletPoint(
-                    String(localized: "The duration of insulin action (DIA) is now locked to Trio’s new default of 10 hours.")
-                )
-                BulletPoint(
-                    String(localized: "We strongly recommend not changing DIA — it’s essential to stable and safe operation.")
-                )
-            }
-            .padding(.horizontal)
-
-            Divider()
-
-            Toggle(isOn: $state.hasReadAlgorithmSetupInformation) {
-                Text("Got it! I'm ready to continue.").padding(.leading, 6).bold()
-            }
-            .toggleStyle(CheckboxToggleStyle(tint: Color.blue))
-            .padding(.horizontal)
-        }
-    }
-}

+ 3 - 19
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/StartupGuide/StartupReturningUserStepView.swift

@@ -39,27 +39,11 @@ struct StartupReturningUserStepView: View {
                     .stroke(Color.orange, lineWidth: 2)
             )
             .cornerRadius(10)
-//
-//            VStack(alignment: .leading, spacing: 10) {
-//                HStack(alignment: .top, spacing: 10) {
-//                    Image(systemName: "exclamationmark.triangle.fill").foregroundStyle(Color.bgDarkBlue, Color.orange)
-//                        .symbolRenderingMode(.palette)
-//                    Text("Important").foregroundStyle(Color.orange)
-//                }.bold()
-//
-//                Text("Your algorithm settings (previously called \"OpenAPS settings\") are reset to defaults.")
-//            }
-//            .frame(maxWidth: .infinity)
-//            .padding()
-//            .background(Color.chart.opacity(0.65))
-//            .overlay(
-//                RoundedRectangle(cornerRadius: 10)
-//                    .stroke(Color.orange, lineWidth: 2)
-//            )
-//            .cornerRadius(10)
 
             VStack(alignment: .leading, spacing: 10) {
-                Text("Here's what you can expect to be preserved:").bold()
+                Text("Here's what you can expect to be preserved:")
+                    .font(.headline)
+                    .padding(.bottom, 4)
 
                 BulletPoint(String(localized: "Your pump and CGM configurations are retained and fully functional."))
                 BulletPoint(

+ 7 - 0
Trio/Sources/Modules/Onboarding/View/OnboardingView+AlgorithmUtil.swift

@@ -68,6 +68,13 @@ extension View {
     }
 }
 
+enum AlgorithmSettingsOverviewSubstep: Int, CaseIterable, Identifiable {
+    case contents
+    case importantNotes
+
+    var id: Int { rawValue }
+}
+
 enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
     case autosensMin
     case autosensMax