[PM-36623] feat: premium upgrade complete navigation#2639
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #2639 +/- ##
==========================================
- Coverage 87.35% 86.31% -1.04%
==========================================
Files 1919 2141 +222
Lines 171017 185558 +14541
==========================================
+ Hits 149394 160170 +10776
- Misses 21623 25388 +3765 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
…rd on pending dismiss
There was a problem hiding this comment.
Pull request overview
Implements the post-checkout navigation flow for Premium upgrade by moving checkout UI feedback (loading/confirmation) into PremiumUpgradeProcessor and updating billing navigation behavior after the “upgrade complete” screen closes, while simplifying vault processors’ handling of checkout status updates.
Changes:
PremiumUpgradeProcessornow shows loading overlays during price fetch / syncing and navigates toPremiumUpgradeCompleteon confirmed checkout.BillingCoordinatoradds context-aware close behavior afterPremiumUpgradeComplete(dismiss modal flow vs. pop upgrade + push plan).- Vault processors/tests updated to stop dismissing/navigating on
.confirmed/.syncing, and to dismiss the premium upgrade action card on.pending.
Reviewed changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| BitwardenShared/UI/Vault/Vault/VaultList/VaultListProcessorTests.swift | Updates expectations for new post-checkout responsibilities (no dismiss on confirmed/syncing; pending dismisses action card). |
| BitwardenShared/UI/Vault/Vault/VaultList/VaultListProcessor.swift | Removes confirmed/syncing dismiss behavior; keeps background refresh and dismisses action card on pending. |
| BitwardenShared/UI/Vault/Vault/VaultItemSelection/VaultItemSelectionProcessorTests.swift | Aligns tests with new ownership of overlays/navigation for syncing/confirmed. |
| BitwardenShared/UI/Vault/Vault/VaultItemSelection/VaultItemSelectionProcessor.swift | Stops dismissing/hiding overlays on confirmed/syncing (handled by upgrade processor). |
| BitwardenShared/UI/Vault/Vault/VaultGroup/VaultGroupProcessorTests.swift | Updates checkout-status tests and verifies banner-dismiss persistence on pending. |
| BitwardenShared/UI/Vault/Vault/VaultGroup/VaultGroupProcessor.swift | Removes confirmed/syncing dismiss behavior; persists banner-dismiss on pending; refreshes in background on confirmed. |
| BitwardenShared/UI/Billing/PremiumUpgrade/PremiumUpgradeProcessorTests.swift | Adds coverage for syncing/confirmed/pending behavior after checkout and for loading overlay during price fetch. |
| BitwardenShared/UI/Billing/PremiumUpgrade/PremiumUpgradeProcessor.swift | Adds loading overlay during price fetch; handles syncing/confirmed/pending post-checkout UI + navigation. |
| BitwardenShared/UI/Billing/PremiumPlan/PremiumPlanProcessor.swift | Changes loading overlay copy to “Loading subscription…”. |
| BitwardenShared/UI/Billing/BillingCoordinatorTests.swift | Adds/updates tests for dismissal behavior using completion handlers after upgrade complete. |
| BitwardenShared/UI/Billing/BillingCoordinator.swift | Implements completion-driven close behavior after PremiumUpgradeComplete based on presentation context. |
| BitwardenShared/Core/Billing/Models/Enum/BillingError.swift | Removes unused LocalizedError conformance / errorDescription. |
| BitwardenResources/Localizations/en.lproj/Localizable.strings | Adds LoadingSubscription localization key (English). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| "MasterPasswordPolicyValidationMessage" = "Password does not meet organization requirements. Please check the policy information and try again."; | ||
| "Loading" = "Loading"; | ||
| "LoadingSubscription" = "Loading subscription..."; |
| "MasterPasswordPolicyValidationTitle" = "Invalid password"; | ||
| "MasterPasswordPolicyValidationMessage" = "Password does not meet organization requirements. Please check the policy information and try again."; | ||
| "Loading" = "Loading"; | ||
| "LoadingSubscription" = "Loading subscription..."; |
There was a problem hiding this comment.
It's not so important, but in other cases Bitwarden use …, not 3 dots ... in strings
🎟️ Tracking
https://bitwarden.atlassian.net/browse/PM-36623
📔 Objective
Implements the post-checkout navigation flow for premium upgrade:
PremiumUpgradeProcessornow owns all checkout UI feedback: shows a loading overlay on.syncingand navigates toPremiumUpgradeCompleteon.confirmedBillingCoordinatorhandles two post-complete paths: vault context (modal) dismisses the entire billing nav controller; settings context (pushed) silently pops the upgrade screen and pushesPremiumPlanViewVaultList,VaultGroup,VaultItemSelection) simplified — no longer manage dismiss/overlay on.confirmed/.syncing; background state refresh still runs on.confirmed.pendingcheckout statusloadingSubscriptionlocalization key; shows "Loading subscription…" overlay inPremiumPlanProcessorand a generic loading overlay inPremiumUpgradeProcessorduring price fetch to avoid UI glitcherrorDescriptionfromBillingError