Skip to content

feat(new-ui): v2 tab-bar UI — nav bar, wallet screen, token cards - #1209

Merged
bmc08gt merged 2 commits into
code/cashfrom
feat/new-ui-v2-pr
Aug 10, 2026
Merged

feat(new-ui): v2 tab-bar UI — nav bar, wallet screen, token cards#1209
bmc08gt merged 2 commits into
code/cashfrom
feat/new-ui-v2-pr

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

What

The app-wide v2 UI behind FeatureFlag.NewUi (default on), moving from a sheet-centric model to a tab-bar-centric one.

iOS parity: iOS will mirror this UI. The structure here (route-layer decision, hoisted tab bar, single NavDisplay, wallet-first launch) is intended as the reference for that work.

Builds on the two merged refactors it depends on: #1207 (AppBar back-vs-close) and #1208 (fiat appreciation formatting).

Navigation / chrome

  • Hoist the tab bar to app-root chrome — single NavDisplay, no HomeScreen. AppNavigationBar + NavigationBar v2 with a sliding selected indicator, route-driven selection, crossfade tab transitions, and a bottom inset (LocalTabBarPadding) provided to screens. The bar hides behind bottom-sheet modals (e.g. deposit options).
  • NavBarConfig split to a dedicated v2 instance (NavBarButton.v2Order) so FeatureFlag.NavBar can retire with v1; NavBarRoutes maps buttons ↔ routes.
  • New UI launches on the Wallet tab; v1 keeps Scanner (MainRoot isNewUi). The decision is made at the route layer — no ProvideNewUi composition local.

Wallet

  • WalletScreen renders full-screen in v2 (still a sheet in v1) via the navigation method — no new routes.
  • Reusable per-token TokenCard (bill-customization colors, gold USDF) and a sticky TokenCardStack that collapses into a deck on scroll. Balance uses AnimatedNumberText (animates on change + autosizes).
  • OnboardingFunnel wired to deterministic milestones (has-added-money / has-tipped) via DAO EXISTS queries rather than balance-derived state.

Fixes bundled in

  • Auth: stop a transient Unknown auth state from committing login and landing an authenticated user on the login screen on relaunch (AuthManager + MainRoot).
  • Verification: the Intro's Next advanced via proceed(), which is a no-op for the non-linear verification flow; now navigates to the phone step explicitly.

Testing

  • :apps:flipcash:app:assembleDebug green.
  • On-device: tab switching, wallet-first launch, card-stack scroll/collapse, onboarding funnel, verification intro → phone → email.

Expose whether a user has ever added money or scanned/sent a tip via
DAO EXISTS queries rather than deriving from current balance:

- ChatMessageDao.hasEverTipped(selfIdHex): outgoing TIPPED chat messages
  only (sender == self).
- MessageDao.hasEverAddedMoney(): completed DepositedCrypto / BoughtToken
  activity.
- Surfaced through the datasources and the chat/activity-feed
  coordinators for the wallet onboarding funnel.
@github-actions github-actions Bot added type: feature New functionality area: auth Login, session, access keys, identity area: scanner QR/Kikcode scanning, camera area: build-system Gradle, convention plugins, build-logic area: tokens Token accounts, balances, token info area: onboarding and removed type: feature New functionality labels Aug 10, 2026
The app-wide v2 UI behind FeatureFlag.NewUi (default on), moving from a
sheet-centric model to a tab-bar-centric one. iOS will mirror this, so
the structure here is the reference.

Navigation / chrome:
- Hoist the tab bar to app-root chrome (single NavDisplay, no HomeScreen):
  AppNavigationBar + NavigationBar v2 with a sliding selected indicator,
  route-driven selection, crossfade tab transitions, and a bottom-inset
  (LocalTabBarPadding) provided to screens. Bar hides behind bottom-sheet
  modals (e.g. deposit options).
- NavBarConfig split to a dedicated v2 instance (NavBarButton.v2Order) so
  FeatureFlag.NavBar can retire with v1; NavBarRoutes maps buttons <-> routes.
- New UI launches on the Wallet tab; v1 keeps Scanner (MainRoot isNewUi).

Wallet:
- WalletScreen renders full-screen in v2 (still a sheet in v1) via the
  navigation method, not new routes.
- Reusable per-token TokenCard (bill-customization colors, gold USDF) and
  a sticky TokenCardStack that collapses into a deck on scroll. Balance
  uses AnimatedNumberText (animates + autosizes). OnboardingFunnel wired to
  the deterministic milestones.

Fixes bundled in:
- Auth: stop a transient Unknown state committing login and landing an
  authenticated user on the login screen on relaunch (AuthManager + MainRoot).
- Verification: the Intro's Next advanced via proceed() which is a no-op for
  the non-linear flow; navigate to the phone step explicitly.
@bmc08gt
bmc08gt force-pushed the feat/new-ui-v2-pr branch from e01fbd4 to 59a5f41 Compare August 10, 2026 20:32
@github-actions github-actions Bot added the type: feature New functionality label Aug 10, 2026
@bmc08gt
bmc08gt merged commit 5747764 into code/cash Aug 10, 2026
2 checks passed
@bmc08gt
bmc08gt deleted the feat/new-ui-v2-pr branch August 10, 2026 20:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: auth Login, session, access keys, identity area: build-system Gradle, convention plugins, build-logic area: onboarding area: scanner QR/Kikcode scanning, camera area: tokens Token accounts, balances, token info type: feature New functionality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant