@@ -1263,8 +1263,14 @@ final class ElephantAppModel: ObservableObject {
12631263 return UserDefaults . standard. bool ( forKey: key)
12641264 }
12651265
1266+ private static func hasCompletedOnboarding( ) -> Bool {
1267+ UserDefaults . standard. bool ( forKey: onboardingCompleteKey)
1268+ }
1269+
12661270 private static func shouldPresentLaunchLockScreen( ) -> Bool {
1267- !onboardingPreviewMode && storedAppLockPasswordRecord ( ) != nil
1271+ !onboardingPreviewMode
1272+ && hasCompletedOnboarding ( )
1273+ && storedAppLockPasswordRecord ( ) != nil
12681274 }
12691275
12701276 private static func localizedText( _ language: AppLanguage , en: String , zh: String , fr: String , de: String ) -> String {
@@ -1360,10 +1366,15 @@ final class ElephantAppModel: ObservableObject {
13601366 try await refreshDashboard ( )
13611367 corePhase = . ready
13621368 startReadinessPollingIfNeeded ( )
1363- if Self . onboardingPreviewMode || !snapshot. hasElephant || snapshot. providerID. isEmpty {
1369+ let needsOnboarding = Self . onboardingPreviewMode || !snapshot. hasElephant || snapshot. providerID. isEmpty
1370+ if needsOnboarding {
1371+ if !Self. onboardingPreviewMode {
1372+ UserDefaults . standard. set ( false , forKey: Self . onboardingCompleteKey)
1373+ }
13641374 isSleepDisplayPresented = false
13651375 showingOnboarding = true
13661376 } else if hasAppLockPassword {
1377+ UserDefaults . standard. set ( true , forKey: Self . onboardingCompleteKey)
13671378 beginSleepDisplay ( reason: " launch " )
13681379 }
13691380 if UserDefaults . standard. bool ( forKey: Self . onboardingLetterPendingKey) {
@@ -1887,7 +1898,7 @@ final class ElephantAppModel: ObservableObject {
18871898 }
18881899
18891900 func beginSleepDisplay( reason: String = " manual " ) {
1890- guard !showingOnboarding else { return }
1901+ guard Self . hasCompletedOnboarding ( ) , !showingOnboarding else { return }
18911902 speechOutput. stop ( )
18921903 sleepDisplayReason = reason
18931904 sleepUnlockPassword = " "
0 commit comments