[MOB-3544] Onboarding product tour#996
Conversation
* [MOB-3897] Create WelcomeView using SwiftUI and replace old Welcome * [MOB-3897] Cleanup WelcomeTour classes and assets * [MOB-3897] Fix video player * [MOB-3897] Animated transition from Launch Screen * [MOB-3897] Add some todos * [MOB-3897] Implement exit animation * [MOB-3897] Animate browser toolbars after welcome screen * [MOB-3897] Adjust logo color and animation * [MOB-3897] Adjust video frame * [MOB-3897] Simplify unnecessary extension * [MOB-3897] Add experiment unleash flag * [MOB-3897] Add fade transition to welcome screen * [MOB-3897] Adjust toolbars animation * [MOB-3897] Add analytics events * [MOB-3897] Make sure onboarding gets presented on iPad * [MOB-3897] Adjust spacings and offsets * [MOB-3897] Use dynamic welcome text height * [MOB-3897] Adjust top offset on iPad * [MOB-3897] Add line break and adjust margin * [MOB-3897] Match NTP background on fade transition dismissal * [MOB-3897] Make sure initial logo matches launch screen * [MOB-3897] Add gradients behind content for visibility * [MOB-3897] Fix fade transition * [MOB-3897] Move video player to separate file * [MOB-3897] Wait for video to be ready and support reduced motion * [MOB-3897] Use Task instead of Dispatch * [MOB-3897] Fix AnalyticsSpyTests * [MOB-3897] Add text strings * [MOB-3897] Handle retriggering onAppear * [MOB-3897] Fix tests mock * [MOB-3897] Remove spy tests for now * [MOB-3897] Add Ecosia comments * [MOB-3897] Wait for feature flags before presenting welcome screen * [MOB-3897] [MOB-3903] Do not show APN consent during experiment * [MOB-3897] Move onboarding into Ecosia framework * [MOB-3897] Fix MockWelcomeDelegate
* [MOB-3900] Implement ProductTourManager that controls NTP state * [MOB-3900] Update product tour based on search * [MOB-3900] Adjust queries cell UI * [MOB-3900] Add localised search suggestions * [MOB-3900] Fix and refactor flow layout using swift ui * [MOB-3900] Extend localised search suggestions * [MOB-3900] Adjust UI * [MOB-3900] Handle actions * [MOB-3900] Track analytics events * [MOB-3900] Temporarily deploy on this branch * [MOB-3900] Add localised strings * [MOB-3900] Dynamically get width to compute rows * [MOB-3900] Remove unnecessary height calculation * [MOB-3900] Adjust TODO * [MOB-3900] Improve search vertical event handling * [MOB-3900] Move tour completion to webview did finish * [MOB-3900] Revert CI deployment on feature branch * [MOB-3900] Clean up code * [MOB-3900] Implement ProductTourManagerTests * [MOB-3900] Copilot review adjustments * [MOB-3900] Use locale mapping for search suggestions * [MOB-3900] Fix locale identifier * [MOB-3900] Move whole cell to SwiftUI
* [MOB-3904] Spotlight toast initial implementation * [MOB-3904] Fix UnsafeRawPointer warning * [MOB-3904] Update buttons config * [MOB-3904] Clean up ProductTourSpotlightCoordinator * [MOB-3904] Fix toast positioning above toolbar * [MOB-3904] Animate toast transition between steps * [MOB-3904] Handle toast gesture for dismissing * [MOB-3904] Fix toast bottom positioning * [MOB-3904] Fix Spotlight dismissal on URL bar interaction * [MOB-3904] Add analytics to spotlight * [MOB-3904] Reintroduce swiftpm Package.resolved * [MOB-3904] Adjust before and after image * [MOB-3904] Fix backgroundFeatured on dark theme * [MOB-3904] Allow web view interaction clicks without dismissing spotlight * [MOB-3904] Revert: dismiss spotlight on web view clicks * [MOB-3904] Cleanup leftover * [MOB-3904] Adjust animation to push out previous step * [MOB-3904] Adjust enter and exit animations * [MOB-3904] Fix coordinator retention * [MOB-3904] Don't recreate spotlight on theme change * [MOB-3904] Remove unused import * [MOB-3904] Prevent retain cycle for bottomContentView * [MOB-3904] [TO REVERT] Temporarily deploy to Firebase * [MOB-3904] Add suffix to spotlight methods to indicate condition * [MOB-3904] Revert "[MOB-3904] [TO REVERT] Temporarily deploy to Firebase" This reverts commit 3f184cc.
* [MOB-3905] Refactor tour manager to use milestone and add new protection spotlight * [MOB-3905] Open helpscout links on read more * [MOB-3905] Refactor coordinator with configurations for reusability * [MOB-3905] Add read more button icon * [MOB-3905] Right align buttons * [MOB-3905] [TO REVERT] Temporarily deploy to Firebase * [MOB-3905] Rename navigation handling methods * [MOB-3905] Add product tour state condition to spotlight setup * [MOB-3905] Rename Onboarding folder to ProductTour * [MOB-3905] Test ProductTourSpotlightCoordinator * [MOB-3905] Revert "[MOB-3905] [TO REVERT] Temporarily deploy to Firebase" This reverts commit 1c070af.
7a1510a to
4073444
Compare
* [MOB-4081] Add sign in button and trigger login flow * [MOB-4081] Handle Account origin on login and use for product tour state * [MOB-4081] Update tests * [MOB-4081] Treat new account if created on the same day * [MOB-4081] Center experiment condition on ProductTourManager * [MOB-4081] React NTP based on tour login state * [MOB-4081] Add state info to debug setting * [MOB-4081] Adjust button icon and add bottom gradient * [MOB-4081] Remove done TODO * [MOB-4081] Hold NTP state while sign in flow is unresolved * [MOB-4081] Differentiate welcome click actions * [MOB-4081] Fix sign in flow active on early exits * [MOB-4081] Make onSignIn non-optional * [MOB-4081] Introduce sign in flow events * [MOB-4081] Adjust comment * [MOB-4081] Reuse welcome sign in logic * [MOB-4081] Make custom claim namespace clearer
There was a problem hiding this comment.
Pull request overview
Integrates the Ecosia “Onboarding Product Tour” experience into the Firefox iOS fork, adding the product tour state machine, new onboarding UI (welcome + NTP first-search card + spotlights), and wiring sign-in initiation from onboarding into the existing auth flow.
Changes:
- Adds a new
ProductTourManager(milestones + observer events) and an Unleash-backed experiment toggle. - Introduces new onboarding UI components (Welcome SwiftUI hosting VC, first-search NTP card, spotlight coordinator) and hooks them into
LaunchCoordinator/SceneCoordinator/BrowserCoordinator. - Updates analytics, auth state propagation (account origin), accessibility identifiers, themes, and associated tests/snapshots.
Reviewed changes
Copilot reviewed 95 out of 133 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| firefox-ios/firefox-ios-tests/Tests/ClientTests/Mocks/MockLaunchCoordinatorDelegate.swift | Adds new delegate method stub |
| firefox-ios/EcosiaTests/UI/ProductTour/ProductTourSpotlightCoordinatorTests.swift | Adds spotlight coordinator unit tests |
| firefox-ios/EcosiaTests/SnapshotTests/Onboarding/OnboardingTests.swift | Updates onboarding snapshot to new welcome VC |
| firefox-ios/EcosiaTests/Mocks/MockWelcomeDelegate.swift | Updates mock to new welcome delegate API |
| firefox-ios/EcosiaTests/Analytics/AnalyticsSpyTests.swift | Updates analytics spy for new onboarding events |
| firefox-ios/EcosiaTests/Account/Auth/AuthTests.swift | Adds account-origin test coverage |
| firefox-ios/Ecosia/UI/ProductTour/WelcomeViewController.swift | New UIKit host for SwiftUI welcome |
| firefox-ios/Ecosia/UI/ProductTour/WelcomeVideoPlayer.swift | SwiftUI video-backed background component |
| firefox-ios/Ecosia/UI/ProductTour/WelcomeNavigation.swift | New navigation controller w/ fade dismissal |
| firefox-ios/Ecosia/UI/ProductTour/ProductTourManager.swift | New product tour state + persistence |
| firefox-ios/Ecosia/UI/ProductTour/FadeTransitionDelegate.swift | Fade transition implementation |
| firefox-ios/Ecosia/UI/EcosiaAccessibilityIdentifiers.swift | Moves Ecosia a11y IDs into Ecosia module |
| firefox-ios/Ecosia/UI/Components/EcosiaButtonStyle.swift | New reusable SwiftUI button style |
| firefox-ios/Ecosia/UI/Common.xcassets/sign-in.imageset/sign-in.pdf | Adds sign-in asset |
| firefox-ios/Ecosia/UI/Common.xcassets/sign-in.imageset/Contents.json | Registers sign-in asset |
| firefox-ios/Ecosia/UI/Common.xcassets/forest.imageset/Contents.json | Adds/updates forest fallback image set |
| firefox-ios/Ecosia/UI/Account/EcosiaAuthUIStateProvider.swift | Adjusts seed refresh timing |
| firefox-ios/Ecosia/L10N/en.lproj/Ecosia.strings | Removes obsolete onboarding strings |
| firefox-ios/Ecosia/L10N/String.swift | Adds product tour + spotlight strings/keys |
| firefox-ios/Ecosia/Extensions/Task+Sleep.swift | Adds Task sleep compatibility helper |
| firefox-ios/Ecosia/Experiments/Unleash/OnboardingProductTourExperiment.swift | Adds experiment wrapper |
| firefox-ios/Ecosia/Core/URL+Extensions.swift | Adds isBrowser() helper used by tour |
| firefox-ios/Ecosia/Core/MMP/MMP.swift | Removes old onboarding MMP events |
| firefox-ios/Ecosia/Core/Locale+Extensions.swift | Makes regionIdentifier public; adds languageIdentifier |
| firefox-ios/Ecosia/Core/FeatureManagement/Unleash/Unleash.Model.swift | Adds onboarding toggle name |
| firefox-ios/Ecosia/Core/Environment/URLProvider.swift | Adds localized support/help URLs |
| firefox-ios/Ecosia/Braze/APNConsent.swift | Skips push consent during onboarding |
| firefox-ios/Ecosia/Analytics/Analytics.swift | Adds product tour analytics events + context |
| firefox-ios/Ecosia/Analytics/Analytics.Values.swift | Updates analytics labels/properties for tour |
| firefox-ios/Ecosia/Account/Auth/EcosiaBrowserWindowAuthManager.swift | Propagates accountOrigin in auth state |
| firefox-ios/Ecosia/Account/Auth/EcosiaAuthenticationService.swift | Returns AccountOrigin from login |
| firefox-ios/Ecosia/Account/Auth/Credentials+AccountOrigin.swift | Parses Auth0 claim to derive origin |
| firefox-ios/Ecosia/Account/Auth/AuthStateAction.swift | Stores accountOrigin in window state |
| firefox-ios/Client/Frontend/Toolbar+URLBar/TabToolbarHelper.swift | Uses new Ecosia a11y IDs |
| firefox-ios/Client/Frontend/Toolbar+URLBar/TabToolbar.swift | Uses new Ecosia a11y IDs |
| firefox-ios/Client/Frontend/Home/LegacyHomepageViewController.swift | Wires first-search VM delegate |
| firefox-ios/Client/Frontend/Home/HomepageViewModel.swift | Adds first-search VM + tour section logic |
| firefox-ios/Client/Frontend/Browser/BrowserViewController/Views/BrowserViewController.swift | Retains spotlight coordinator + theme updates |
| firefox-ios/Client/Frontend/Browser/BrowserViewController/Extensions/BrowserViewController+WebViewDelegates.swift | Delegates navigation tracking to helper |
| firefox-ios/Client/Ecosia/UI/WhatsNew/WhatsNewViewController.swift | Updates “Got it” localization key |
| firefox-ios/Client/Ecosia/UI/Theme/EcosiaLightTheme.swift | Adds new semantic colors |
| firefox-ios/Client/Ecosia/UI/Theme/EcosiaDarkTheme.swift | Adds new semantic colors |
| firefox-ios/Client/Ecosia/UI/ProductTour/ProductTourSpotlightCoordinator.swift | Implements spotlight flow + tracking |
| firefox-ios/Client/Ecosia/UI/ProductTour/BrowserViewController+WelcomeTransition.swift | Adds welcome → browser toolbar animation |
| firefox-ios/Client/Ecosia/UI/ProductTour/BrowserViewController+ProductTourSpotlight.swift | Integrates spotlight coordinator into BVC |
| firefox-ios/Client/Ecosia/UI/Onboarding/WelcomeTourTransparent.swift | Removes legacy welcome tour UI |
| firefox-ios/Client/Ecosia/UI/Onboarding/WelcomeTourRow.swift | Removes legacy welcome tour UI |
| firefox-ios/Client/Ecosia/UI/Onboarding/WelcomeTourProfit.swift | Removes legacy welcome tour UI |
| firefox-ios/Client/Ecosia/UI/Onboarding/WelcomeTourGreen.swift | Removes legacy welcome tour UI |
| firefox-ios/Client/Ecosia/UI/Onboarding/WelcomeTourAction.swift | Removes legacy welcome tour UI |
| firefox-ios/Client/Ecosia/UI/Onboarding/WelcomeTour.swift | Removes legacy welcome tour controller |
| firefox-ios/Client/Ecosia/UI/Onboarding/WelcomeTour.Step.swift | Removes legacy tour step model |
| firefox-ios/Client/Ecosia/UI/Onboarding/WelcomeNavigation.swift | Removes legacy onboarding navigation |
| firefox-ios/Client/Ecosia/UI/Onboarding/Welcome.swift | Removes legacy welcome screen |
| firefox-ios/Client/Ecosia/UI/NTP/Logo/NTPLogoCell.swift | Uses new Ecosia a11y IDs |
| firefox-ios/Client/Ecosia/UI/NTP/Header/NTPHeaderViewModel.swift | Hides header during tour when logged out |
| firefox-ios/Client/Ecosia/UI/NTP/FirstSearch/SearchSuggestionFlowLayout.swift | Adds pill flow layout |
| firefox-ios/Client/Ecosia/UI/NTP/FirstSearch/NTPFirstSearchViewModel.swift | Adds first-search card VM + analytics |
| firefox-ios/Client/Ecosia/UI/NTP/FirstSearch/NTPFirstSearchView.swift | Adds SwiftUI first-search card view |
| firefox-ios/Client/Ecosia/UI/NTP/FirstSearch/NTPFirstSearchCell.swift | Adds UIKit cell hosting SwiftUI |
| firefox-ios/Client/Ecosia/UI/NTP/FirstSearch/LocalizedSearchSuggestions.swift | Adds locale-based query suggestions |
| firefox-ios/Client/Ecosia/UI/NTP/CircleButton.swift | Uses new Ecosia a11y IDs |
| firefox-ios/Client/Ecosia/UI/LaunchScreen/EcosiaLaunchScreenView.swift | Simplifies nib loading |
| firefox-ios/Client/Ecosia/UI/LaunchScreen/EcosiaLaunchScreen.xib | Launch screen layout/tooling update |
| firefox-ios/Client/Ecosia/UI/EcosiaFindInPageBar.swift | Uses new Ecosia a11y IDs |
| firefox-ios/Client/Ecosia/UI/Ecosia.xcassets/tour/tourSearch.imageset/Contents.json | Removes obsolete onboarding assets |
| firefox-ios/Client/Ecosia/UI/Ecosia.xcassets/tour/tourGreen.imageset/Contents.json | Removes obsolete onboarding assets |
| firefox-ios/Client/Ecosia/UI/Ecosia.xcassets/tour/tour4.imageset/Contents.json | Removes obsolete onboarding assets |
| firefox-ios/Client/Ecosia/UI/Ecosia.xcassets/tour/tour2.imageset/Contents.json | Removes obsolete onboarding assets |
| firefox-ios/Client/Ecosia/UI/Ecosia.xcassets/tour/tour1.imageset/Contents.json | Removes obsolete onboarding assets |
| firefox-ios/Client/Ecosia/UI/Ecosia.xcassets/tour/Contents.json | Removes obsolete onboarding assets |
| firefox-ios/Client/Ecosia/UI/Ecosia.xcassets/spotlightPlanetProfits.imageset/Contents.json | Adds spotlight image assets |
| firefox-ios/Client/Ecosia/UI/Ecosia.xcassets/spotlightCleanEnergy.imageset/Contents.json | Adds spotlight image assets |
| firefox-ios/Client/Ecosia/UI/Ecosia.xcassets/plantedSeedling.imageset/Contents.json | Updates planted seedling asset filenames |
| firefox-ios/Client/Ecosia/UI/Ecosia.xcassets/openLink.imageset/tab-open.pdf | Adds open-link icon asset |
| firefox-ios/Client/Ecosia/UI/Ecosia.xcassets/openLink.imageset/Contents.json | Updates open-link asset registration |
| firefox-ios/Client/Ecosia/UI/Ecosia.xcassets/onboardingWaves.imageset/Contents.json | Removes obsolete onboarding asset config |
| firefox-ios/Client/Ecosia/Settings/EcosiaDebugSettings.swift | Adds onboarding reset + Unleash reset setting |
| firefox-ios/Client/Ecosia/Frontend/Home/EcosiaHomepageSectionType.swift | Adds first-search section + product-tour filtering |
| firefox-ios/Client/Ecosia/Extensions/Task+Sleep.swift | Adds Task sleep helper (Client target) |
| firefox-ios/Client/Ecosia/Extensions/HomepageViewController+Ecosia.swift | Handles first-search VM delegate action |
| firefox-ios/Client/Ecosia/Extensions/BrowserViewController+EcosiaNavigationHandling.swift | Adds navigation completion hooks for tour |
| firefox-ios/Client/Ecosia/Extensions/AppSettingsTableViewController+Ecosia.swift | Registers new debug settings |
| firefox-ios/Client/Ecosia/Account/Auth/EcosiaAuth.swift | Adds shared welcome sign-in entry point |
| firefox-ios/Client/Coordinators/Scene/SceneCoordinator.swift | Adds welcome transition + sign-in handling |
| firefox-ios/Client/Coordinators/Launch/LaunchCoordinator.swift | Presents new welcome + sign-in callback |
| firefox-ios/Client/Coordinators/Browser/BrowserCoordinator.swift | Adds welcome transition + sign-in handling |
| firefox-ios/Client/Assets/Images.xcassets/ecosiaHomeHeaderLogoText.imageset/ecosia-logo.pdf | Updates header logo asset |
| firefox-ios/Client/Assets/Images.xcassets/ecosiaHomeHeaderLogoText.imageset/ecosia-logo-dark.pdf | Updates header logo asset |
| firefox-ios/Client/Assets/Images.xcassets/ecosiaHomeHeaderLogoText.imageset/Contents.json | Updates header logo asset mapping |
| firefox-ios/Client/Application/AppDelegate.swift | Adds feature flag init dependency + signals event |
| firefox-ios/Client/Application/AccessibilityIdentifiers.swift | Removes Ecosia-specific IDs from Client |
| BrowserKit/Sources/Common/Theming/EcosiaThemeColourPalette.swift | Extends theme semantic colors protocol |
| .github/workflows/merge_tests.yml | Adjusts PR branch triggers |
| .circleci/config.yml | Adjusts CircleCI branch filters |
You can also share your feedback on Copilot code review. Take the survey.
|
@copilot open a new pull request to apply changes based on the comments in this thread. Also please verify the failing |
|
@lucaschifino I've opened a new pull request, #1078, to work on those changes. Once the pull request is ready, I'll request review from you. |
* Initial plan * Address PR review comments: fix NTPFirstSearchCell, remove dead code, fix CI configs, fix ProductTourManager, fix SearchSuggestionFlowLayout, update failing test Co-authored-by: lucaschifino <19517744+lucaschifino@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: lucaschifino <19517744+lucaschifino@users.noreply.github.com>
| // MARK: Number of sections | ||
|
|
||
| func testNumberOfSection_withoutUpdatingData_has4Sections() { | ||
| func testNumberOfSection_withoutUpdatingData_has5Sections() { |
There was a problem hiding this comment.
Apparently the "flaky" tests were actually right 🤷
It seems we were not including the new header on the tests. Probably an issue since we removed the feature flag condition from that?
Anyway should be fixed by this 👍
|
@ecosia/ios Can I get a last sanity check review on the big feature branch? All sub-PRs for this were already reviewed, so this does not need to be very thorough. The unreviewed stuff will be rebases, and QA and CI fixes. |
d4r1091
left a comment
There was a problem hiding this comment.
The fact that we reviewed most of the code already, worked indeed in speeding up this one. 🙏 👏 🚀.
Can't wait to have it released!
* [MOB-3897] Welcome screen for product tour (#979) * [MOB-3897] Create WelcomeView using SwiftUI and replace old Welcome * [MOB-3897] Cleanup WelcomeTour classes and assets * [MOB-3897] Fix video player * [MOB-3897] Animated transition from Launch Screen * [MOB-3897] Add some todos * [MOB-3897] Implement exit animation * [MOB-3897] Animate browser toolbars after welcome screen * [MOB-3897] Adjust logo color and animation * [MOB-3897] Adjust video frame * [MOB-3897] Simplify unnecessary extension * [MOB-3897] Add experiment unleash flag * [MOB-3897] Add fade transition to welcome screen * [MOB-3897] Adjust toolbars animation * [MOB-3897] Add analytics events * [MOB-3897] Make sure onboarding gets presented on iPad * [MOB-3897] Adjust spacings and offsets * [MOB-3897] Use dynamic welcome text height * [MOB-3897] Adjust top offset on iPad * [MOB-3897] Add line break and adjust margin * [MOB-3897] Match NTP background on fade transition dismissal * [MOB-3897] Make sure initial logo matches launch screen * [MOB-3897] Add gradients behind content for visibility * [MOB-3897] Fix fade transition * [MOB-3897] Move video player to separate file * [MOB-3897] Wait for video to be ready and support reduced motion * [MOB-3897] Use Task instead of Dispatch * [MOB-3897] Fix AnalyticsSpyTests * [MOB-3897] Add text strings * [MOB-3897] Handle retriggering onAppear * [MOB-3897] Fix tests mock * [MOB-3897] Remove spy tests for now * [MOB-3897] Add Ecosia comments * [MOB-3897] Wait for feature flags before presenting welcome screen * [MOB-3897] [MOB-3903] Do not show APN consent during experiment * [MOB-3897] Move onboarding into Ecosia framework * [MOB-3897] Fix MockWelcomeDelegate * [MOB-3544] Fix rebase issues * [MOB-3544] Adjust logo image asset * [MOB-3544] Fix swiftlint * [MOB-3544] Update Welcome background video and remove loop * [MOB-3544] Fix swiftlint * [MOB-3544] Temporarily deploy feature branch to Firebase * [MOB-3544] Adjust welcome animation and remove unnecessary gradient * [MOB-3544] Temporarily run merge tests on PRs to this feature branch * [MOB-3900] Product tour first search NTP (#998) * [MOB-3900] Implement ProductTourManager that controls NTP state * [MOB-3900] Update product tour based on search * [MOB-3900] Adjust queries cell UI * [MOB-3900] Add localised search suggestions * [MOB-3900] Fix and refactor flow layout using swift ui * [MOB-3900] Extend localised search suggestions * [MOB-3900] Adjust UI * [MOB-3900] Handle actions * [MOB-3900] Track analytics events * [MOB-3900] Temporarily deploy on this branch * [MOB-3900] Add localised strings * [MOB-3900] Dynamically get width to compute rows * [MOB-3900] Remove unnecessary height calculation * [MOB-3900] Adjust TODO * [MOB-3900] Improve search vertical event handling * [MOB-3900] Move tour completion to webview did finish * [MOB-3900] Revert CI deployment on feature branch * [MOB-3900] Clean up code * [MOB-3900] Implement ProductTourManagerTests * [MOB-3900] Copilot review adjustments * [MOB-3900] Use locale mapping for search suggestions * [MOB-3900] Fix locale identifier * [MOB-3900] Move whole cell to SwiftUI * [MOB-3544] Send language region to first search suggestion analytics event * [MOB-3544] Fix close button color * [MOB-3544] [MOB-3900] Add highlight button state * [MOB-3544] Create reusable EcosiaButtonStyle with highlight state * [MOB-3544] Fix outlined pill button background * [MOB-3904] Product Tour SERP Spotlight (#1061) * [MOB-3904] Spotlight toast initial implementation * [MOB-3904] Fix UnsafeRawPointer warning * [MOB-3904] Update buttons config * [MOB-3904] Clean up ProductTourSpotlightCoordinator * [MOB-3904] Fix toast positioning above toolbar * [MOB-3904] Animate toast transition between steps * [MOB-3904] Handle toast gesture for dismissing * [MOB-3904] Fix toast bottom positioning * [MOB-3904] Fix Spotlight dismissal on URL bar interaction * [MOB-3904] Add analytics to spotlight * [MOB-3904] Reintroduce swiftpm Package.resolved * [MOB-3904] Adjust before and after image * [MOB-3904] Fix backgroundFeatured on dark theme * [MOB-3904] Allow web view interaction clicks without dismissing spotlight * [MOB-3904] Revert: dismiss spotlight on web view clicks * [MOB-3904] Cleanup leftover * [MOB-3904] Adjust animation to push out previous step * [MOB-3904] Adjust enter and exit animations * [MOB-3904] Fix coordinator retention * [MOB-3904] Don't recreate spotlight on theme change * [MOB-3904] Remove unused import * [MOB-3904] Prevent retain cycle for bottomContentView * [MOB-3904] [TO REVERT] Temporarily deploy to Firebase * [MOB-3904] Add suffix to spotlight methods to indicate condition * [MOB-3904] Revert "[MOB-3904] [TO REVERT] Temporarily deploy to Firebase" This reverts commit 3f184cc. * [MOB-3905] Product Tour tracking protection Spotlight (#1068) * [MOB-3905] Refactor tour manager to use milestone and add new protection spotlight * [MOB-3905] Open helpscout links on read more * [MOB-3905] Refactor coordinator with configurations for reusability * [MOB-3905] Add read more button icon * [MOB-3905] Right align buttons * [MOB-3905] [TO REVERT] Temporarily deploy to Firebase * [MOB-3905] Rename navigation handling methods * [MOB-3905] Add product tour state condition to spotlight setup * [MOB-3905] Rename Onboarding folder to ProductTour * [MOB-3905] Test ProductTourSpotlightCoordinator * [MOB-3905] Revert "[MOB-3905] [TO REVERT] Temporarily deploy to Firebase" This reverts commit 1c070af. * [MOB-3544] Set max spotlight width and adjust image view ratio * [MOB-3544] Fix pixel rounding shift during step transition * [MOB-3544] Open spotlight url on safari web view instead of new tab * [MOB-3544] Fix debug settings compilation errors and duplications * [MOB-3544] Adjust spolight spacings and fonts * [MOB-3544] Adjust spotlight width behaviour to be consistent * [MOB-3544] Include gradient overlay behind spotlight * [MOB-3544] Add onboarding product tour ab test context * [MOB-3544] Use subhedline for buttons * [MOB-4081] Product tour login flow (#1074) * [MOB-4081] Add sign in button and trigger login flow * [MOB-4081] Handle Account origin on login and use for product tour state * [MOB-4081] Update tests * [MOB-4081] Treat new account if created on the same day * [MOB-4081] Center experiment condition on ProductTourManager * [MOB-4081] React NTP based on tour login state * [MOB-4081] Add state info to debug setting * [MOB-4081] Adjust button icon and add bottom gradient * [MOB-4081] Remove done TODO * [MOB-4081] Hold NTP state while sign in flow is unresolved * [MOB-4081] Differentiate welcome click actions * [MOB-4081] Fix sign in flow active on early exits * [MOB-4081] Make onSignIn non-optional * [MOB-4081] Introduce sign in flow events * [MOB-4081] Adjust comment * [MOB-4081] Reuse welcome sign in logic * [MOB-4081] Make custom claim namespace clearer * [MOB-3544] Include experiment check on debug setting * [MOB-3902] Remove refresh seed on initialize state provider (#1077) * [MOB-3544] Address onboarding product tour PR review feedback (#1078) * Initial plan * Address PR review comments: fix NTPFirstSearchCell, remove dead code, fix CI configs, fix ProductTourManager, fix SearchSuggestionFlowLayout, update failing test Co-authored-by: lucaschifino <19517744+lucaschifino@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: lucaschifino <19517744+lucaschifino@users.noreply.github.com> --------- Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: lucaschifino <19517744+lucaschifino@users.noreply.github.com> # Conflicts: # firefox-ios/Client.xcodeproj/project.pbxproj # firefox-ios/Client/Application/AccessibilityIdentifiers.swift # firefox-ios/Client/Application/AppDelegate.swift # firefox-ios/Client/Coordinators/Browser/BrowserCoordinator.swift # firefox-ios/Client/Coordinators/Launch/LaunchCoordinator.swift # firefox-ios/Client/Ecosia/Extensions/AppSettingsTableViewController+Ecosia.swift # firefox-ios/Client/Ecosia/Frontend/Home/EcosiaHomepageSectionType.swift # firefox-ios/Client/Ecosia/Settings/EcosiaDebugSettings.swift # firefox-ios/Client/Ecosia/UI/LaunchScreen/EcosiaLaunchScreenView.swift # firefox-ios/Client/Ecosia/UI/Onboarding/Welcome.swift # firefox-ios/Client/Ecosia/UI/Onboarding/WelcomeTour.swift # firefox-ios/Client/Ecosia/UI/Onboarding/WelcomeTourAction.swift # firefox-ios/Client/Frontend/Browser/BrowserViewController/Extensions/BrowserViewController+WebViewDelegates.swift # firefox-ios/Client/Frontend/Browser/BrowserViewController/Views/BrowserViewController.swift # firefox-ios/Client/Frontend/Home/HomepageViewModel.swift # firefox-ios/Client/Frontend/Home/LegacyHomepageViewController.swift # firefox-ios/Client/Frontend/Toolbar+URLBar/TabToolbar.swift # firefox-ios/Client/Frontend/Toolbar+URLBar/TabToolbarHelper.swift # firefox-ios/Ecosia/Account/Auth/EcosiaAuthenticationService.swift # firefox-ios/Ecosia/Braze/APNConsent.swift # firefox-ios/Ecosia/Core/MMP/MMP.swift # firefox-ios/EcosiaTests/EcosiaHomeViewModelTests.swift
MOB-3544
Context
Lightweight Onboarding Product Tour - This is the feature branch that groups whole implementation.
Approach
All big sub-PRs have been reviewed separately. Besides those, this branch has had QA and CI fixes.