feat(new-ui): v2 tab-bar UI — nav bar, wallet screen, token cards - #1209
Merged
Conversation
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.
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
force-pushed
the
feat/new-ui-v2-pr
branch
from
August 10, 2026 20:32
e01fbd4 to
59a5f41
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The app-wide v2 UI behind
FeatureFlag.NewUi(default on), moving from a sheet-centric model to a tab-bar-centric one.Builds on the two merged refactors it depends on: #1207 (AppBar back-vs-close) and #1208 (fiat appreciation formatting).
Navigation / chrome
NavDisplay, noHomeScreen.AppNavigationBar+NavigationBarv2 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).NavBarConfigsplit to a dedicated v2 instance (NavBarButton.v2Order) soFeatureFlag.NavBarcan retire with v1;NavBarRoutesmaps buttons ↔ routes.MainRootisNewUi). The decision is made at the route layer — noProvideNewUicomposition local.Wallet
WalletScreenrenders full-screen in v2 (still a sheet in v1) via the navigation method — no new routes.TokenCard(bill-customization colors, gold USDF) and a stickyTokenCardStackthat collapses into a deck on scroll. Balance usesAnimatedNumberText(animates on change + autosizes).OnboardingFunnelwired to deterministic milestones (has-added-money / has-tipped) via DAOEXISTSqueries rather than balance-derived state.Fixes bundled in
Unknownauth state from committing login and landing an authenticated user on the login screen on relaunch (AuthManager+MainRoot).proceed(), which is a no-op for the non-linear verification flow; now navigates to the phone step explicitly.Testing
:apps:flipcash:app:assembleDebuggreen.