Skip to content

Commit

Permalink
Always start onboarding from the beginning when shown (#2117)
Browse files Browse the repository at this point in the history
Task/Issue URL: https://app.asana.com/0/1177771139624306/1206434679656281/f

Description:
Simplify OnboardingViewModel by removing restart() function.
Also make isOnboardingFinished a static property.
  • Loading branch information
ayoy authored Jan 25, 2024
1 parent abe0591 commit b7f0b7a
Show file tree
Hide file tree
Showing 8 changed files with 11 additions and 28 deletions.
2 changes: 1 addition & 1 deletion DuckDuckGo/HomePage/Model/HomePageContinueSetUpModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ extension HomePage.Models {
#if DEBUG
isFirstSession = false
#endif
if OnboardingViewModel().onboardingFinished {
if OnboardingViewModel.isOnboardingFinished {
isFirstSession = false
}
}
Expand Down
2 changes: 1 addition & 1 deletion DuckDuckGo/HomePage/View/HomePageViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ final class HomePageViewController: NSViewController {
override func viewWillAppear() {
super.viewWillAppear()
if !PixelExperiment.isExperimentInstalled {
if onboardingViewModel.onboardingFinished && Pixel.isNewUser {
if OnboardingViewModel.isOnboardingFinished && Pixel.isNewUser {
Pixel.fire(.newTabInitial(), limitTo: .initial)
}
}
Expand Down
2 changes: 1 addition & 1 deletion DuckDuckGo/MainWindow/MainWindowController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ final class MainWindowController: NSWindowController {
#if DEBUG
return false
#else
let onboardingIsComplete = OnboardingViewModel().onboardingFinished || LocalStatisticsStore().waitlistUnlocked
let onboardingIsComplete = OnboardingViewModel.isOnboardingFinished || LocalStatisticsStore().waitlistUnlocked
return !onboardingIsComplete
#endif
}
Expand Down
17 changes: 5 additions & 12 deletions DuckDuckGo/Onboarding/ViewModel/OnboardingViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,12 @@ final class OnboardingViewModel: ObservableObject {
}

@UserDefaultsWrapper(key: .onboardingFinished, defaultValue: false)
private(set) var onboardingFinished: Bool
private(set) static var isOnboardingFinished: Bool

weak var delegate: OnboardingDelegate?

init(
delegate: OnboardingDelegate? = nil) {
init(delegate: OnboardingDelegate? = nil) {
self.delegate = delegate
self.state = onboardingFinished ? .startBrowsing : .startFlow
}

func onSplashFinished() {
Expand All @@ -84,14 +82,14 @@ final class OnboardingViewModel: ObservableObject {
func onSetDefaultPressed() {
delegate?.onboardingDidRequestSetDefault { [weak self] in
self?.state = .startBrowsing
self?.onboardingFinished = true
Self.isOnboardingFinished = true
self?.delegate?.onboardingHasFinished()
}
}

func onSetDefaultSkipped() {
state = .startBrowsing
onboardingFinished = true
Self.isOnboardingFinished = true
delegate?.onboardingHasFinished()
}

Expand All @@ -100,17 +98,12 @@ final class OnboardingViewModel: ObservableObject {
}

func onboardingReshown() {
if onboardingFinished {
if Self.isOnboardingFinished {
typingDisabled = true
delegate?.onboardingHasFinished()
} else {
state = .startFlow
}
}

func restart() {
onboardingFinished = false
state = .startFlow
}

}
2 changes: 1 addition & 1 deletion DuckDuckGo/Statistics/Experiment/PixelExperiment.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ enum PixelExperiment: String, CaseIterable {

static var isNoCardsExperimentOn: Bool {
// This is to avoid the cohort is assigned before the user actually sees the new tab page (after the onboarding has been completed)
if isExperimentInstalled && !OnboardingViewModel().onboardingFinished {
if isExperimentInstalled && !OnboardingViewModel.isOnboardingFinished {
return true
}
// Cohort are assigned the first time it's called
Expand Down
3 changes: 0 additions & 3 deletions DuckDuckGo/Tab/Model/Tab.swift
Original file line number Diff line number Diff line change
Expand Up @@ -635,9 +635,6 @@ protocol NewWindowPolicyDecisionMaker {

@discardableResult
func setUrl(_ url: URL?, source: TabContent.URLSource) -> ExpectedNavigation? {
if url == .welcome {
OnboardingViewModel().restart()
}
return self.setContent(.contentFromURL(url, source: source))
}

Expand Down
2 changes: 1 addition & 1 deletion DuckDuckGo/Tab/View/BrowserTabViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -501,7 +501,7 @@ final class BrowserTabViewController: NSViewController {

case .onboarding:
removeAllTabContent()
if !OnboardingViewModel().onboardingFinished {
if !OnboardingViewModel.isOnboardingFinished {
requestDisableUI()
}
showTransientTabContentController(OnboardingViewController.create(withDelegate: self))
Expand Down
9 changes: 1 addition & 8 deletions UnitTests/Onboarding/OnboardingTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -87,15 +87,8 @@ class OnboardingTests: XCTestCase {
XCTAssertTrue(onboardingFinished)
}

func testWhenOnboardingFinishedThenInitialStateIsStartBrowsing() {
func testThatOnboardingFinishedDoesNotInfluenceInitialState() {
onboardingFinished = true
let model = OnboardingViewModel()
XCTAssertEqual(model.state, .startBrowsing)
}

func testWhenOnboardingRestartedThenInitialStateIsStartFlow() {
OnboardingViewModel().restart()

let model = OnboardingViewModel()
XCTAssertEqual(model.state, .startFlow)
}
Expand Down

0 comments on commit b7f0b7a

Please sign in to comment.