[PM-37284] fix: Show Upgraded to Premium card across all Send view states#6947
[PM-37284] fix: Show Upgraded to Premium card across all Send view states#6947SaintPatrck wants to merge 5 commits into
Conversation
…ates The Send tab's "Upgraded to Premium" celebration card was only rendered inside the Content branch's LazyColumn, so users in Empty, Loading, or Error view states never saw it. Hoist the card to the scaffold body above the viewState branching so eligibility is the only gate.
The hoist fix in 44e8f32d5 shipped with an Empty-state render assertion, but the bug was viewState-routing across all four branches. Add parallel Loading and Error assertions so a future regression of the scaffold-body placement is caught no matter which non-Content state is active.
…osable The inline BitwardenActionCard block in SendScreen's scaffold body diverged from the codebase convention where action cards are wrapped in a private composable owned by the screen file (see VaultContent's private ActionCard at VaultContent.kt:545-608). Extracting keeps the SendScreen body focused on layout structure and makes the card independently composable for future preview/test work.
Bitwarden Claude Code ReviewOverall Assessment: APPROVE Reviewed the hoisting of the "Upgraded to Premium" action card out of Code Review DetailsNo findings to report. The fix is well-scoped, the extracted composable follows the screen-owned action-card convention, and the new tests prevent regression of the Empty-state card display while documenting the intentional decision to keep Loading and Error states as non-scrolling placeholders without the card. |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #6947 +/- ##
==========================================
- Coverage 86.30% 85.11% -1.20%
==========================================
Files 873 1049 +176
Lines 63220 66194 +2974
Branches 9165 9277 +112
==========================================
+ Hits 54563 56341 +1778
- Misses 5508 6685 +1177
- Partials 3149 3168 +19
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Hosting the card in the scaffold-body Column pinned it above the scrollable list and centered illustration, breaking the visual continuity the design intends. Move card rendering into each scrollable container — first LazyColumn item in SendContent and first child of SendEmpty's verticalScroll Column — so the card flows with the rest of the view. Loading and Error remain full- screen non-scrolling placeholders and no longer host the card.
🎟️ Tracking
PM-37284
📔 Objective
The Send tab's "Upgraded to Premium" celebration card was rendered as the first item of the
Contentbranch'sLazyColumn, so users whose Send tab was inEmpty,Loading, orErrorview state never saw the card even when they were eligible. Eligibility was the intended gate; viewState was incidentally gating it.Move card rendering into each scrollable container — first
LazyColumnitem inSendContentand first child ofSendEmpty'sverticalScrollColumn — so the card surfaces in both states that have a scrollable surface and flows with the rest of the view (a scaffold-body hoist pinned the card aboveSendEmpty's centered illustration and broke the intended visual continuity).LoadingandErrorremain full-screen non-scrolling placeholders and do not host the card. Extract the inlineBitwardenActionCardblock into a privateUpgradedToPremiumActionCardcomposable to match the screen-owned action-card convention used inVaultContent.kt.📸 Screenshots