chore(ui): remove the newUI beta flag and delete the v1 shell - #619
Merged
Conversation
This was referenced Aug 21, 2026
bmc08gt
force-pushed
the
chore/remove-newui-beta-flag
branch
from
August 26, 2026 16:55
1224b6e to
636d9d6
Compare
The tab-bar UI shipped to everyone in #613, so `BetaFlags.Option.newUI` had no readers left that could return false. Collapse every branch it gated and delete the v1 surfaces it was the last route to. Deleted: `BalanceScreen`, `ScanTopBar`/`ScanBottomBar`, the Currency Sell flow (Convert replaces it and calls the same `Session.sell` machinery underneath), `CurrencyInfoHeaderSection`/`CurrencyInfoFooter`, and `CurrencyCreationPromoCard`. Extracted rather than dropped: `ExchangedBalance` and `BalanceHeaderButton` out of `BalanceScreen`, and `RootSheetHost` out of `ScanScreen`. Router: `Stack.isTabHosted` replaces the runtime-registered `AppRouter.tabStacks` set. The old set was published by `HomeTabView`'s `onAppear`, so a deep link arriving before that view appeared fell through to the sheet lookup and was dropped — `.balance` has no sheet of its own. Making it a static fact on the stack fixes the cold-start case, and `AppRouterCrossStackTests` pins it against `HomeTab.pushStack`. `Availability` stays as-is; it is the mechanism for the next rollout, not part of this flag. Also picks up three symbols stranded by the deletions: `Session.canUseTips` (body was `true`), `Image.Symbol.hamburger` with its imageset, and the wallet leg of the token-info funnel. The last one is rewired rather than removed — the tab-bar wallet expands the card in place instead of pushing a screen, so `WalletScreen` now emits `openedFromWallet` on tap and `openedFromDeeplink` on a deep-linked open.
Removing the newUI beta flag deleted the Currency Sell flow, which held the only `swapType: .sell` call site. Convert replaces it and carries its own case, so nothing constructs a sell any more. Drop the case from SwapType and the arms it fed in title, subtitle, navigationTitle, and trackTransaction. Convert keeps reporting through Analytics.tokenSell — it still disposes of the source token — so only the unreachable path goes. The tests asserting a fourth case and the "Selling" title go with it.
bmc08gt
force-pushed
the
chore/remove-newui-beta-flag
branch
from
August 26, 2026 17:26
636d9d6 to
8c54637
Compare
bmc08gt
added a commit
that referenced
this pull request
Aug 28, 2026
…694) The launch screen is a fullScreenCover over the creation wizard, and its `dismissParentContainer` was wired to `router.dismissSheet()`. The creation flow is pushed onto the Wallet tab's stack, so there is no sheet to pop and that call returns early — both exits from CurrencyLaunchProcessingScreen, the finished handoff and the failure dismissal, did nothing. The screen hides the back button and disables interactive dismiss, so a user whose launch bill was claimed by someone else was left in the wizard with only its back chevron and force-quit the app. Pop the wizard's owning stack to root instead, matching the convert flow. The stack is named rather than resolved through `popToRoot()`'s topmost lookup, since HomeTabView clears `activeTabStack` while the cover is up. The wiring was correct when it landed in #213, where `.balance` was sheet-hosted and dismissing the sheet tore down the whole flow; #619 made `.balance` tab-hosted and this call site was missed.
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.
The tab-bar UI shipped to everyone in #613, so
BetaFlags.Option.newUIhad no readers left that could returnfalse. This collapses every branch it gated and deletes the v1 surfaces it was the last route to. Mirrors the decisions in the Android teardown (code-payments/code-android-app#1290).Availabilitystays as-is — it's the mechanism for the next rollout, not part of this flag.BetaFlags.Optionis down to.vibrateOnScanand.enableCoinbase; the now-empty.publicBetalist renders itsContentUnavailableViewand needed no change.Deleted
BalanceScreen— the v1 wallet, superseded byWalletScreenin the Wallet tabScanTopBar/ScanBottomBar— the scanner-first chrome the tab bar replacesCurrencySellAmountScreen,CurrencySellConfirmationScreen, and their view models). Convert replaces it and calls the sameSession.sellmachinery underneath, so nothing below the UI layer went away.CurrencyInfoHeaderSection/CurrencyInfoFooter— the v1 Currency Info header and Buy/Sell footer, replaced byCurrencyInfoContentV2's tilesCurrencyCreationPromoCardExtracted rather than dropped
ExchangedBalanceandBalanceHeaderButton, out ofBalanceScreenRootSheetHost, out ofScanScreenThese account for most of the additions — they're re-homed code, not new logic.
Router
Stack.isTabHostedreplaces the runtime-registeredAppRouter.tabStacksset.The old set was published by
HomeTabView'sonAppear. A deep link arriving before that view appeared therefore fell through to the sheet lookup and was silently dropped, because.balancehas no sheet of its own. Making it a static fact on the stack fixes the cold-start case, andAppRouterCrossStackTests.tabHostedStacks_matchHomeTabspins it againstHomeTab.pushStackso the two can't drift.SheetPresentationloses.balanceand.discover, both of which are now tab-reached.Stranded symbols
A reference-count sweep against
mainfound three symbols whose last consumer was v1 code:Session.canUseTips— body wastrue; only caller was the v1 scanner bottom bar. Removed.Image.Symbol.hamburger— only used byScanTopBar. Removed with its imageset.Analytics.TokenInfoEvent.openedFromWallet— rewired, not removed. This is the wallet → token-info funnel step, and the tab-bar shell had quietly stopped emitting it because the v2 wallet expands the card in place rather than pushing a screen.WalletScreennow fires it fromopenCard.openedFromDeeplinkhad the same gap, soopenCardImmediately— reached only fromDeepLinkController— fires that one.Tests
CurrencySellConfirmationViewModelTestsis ported toConvertConfirmationViewModelTests, keeping the sell money-math coverage on the flow that replaced it. The router suites are rewritten for the new stack shape.No XCUITest changes here. The suite's tab-bar rewrite landed separately in #659, which this branch is rebased onto:
skipPendingTabBarRewriteis gone from the tree, and the Buy regressions left without an entry point — an owned currency offers Give / Convert / Withdraw, not Buy — were replaced there by Convert-flow equivalents.Open product question
Settings is reachable only from the You tab, which renders only for an account with a tippable profile. An account without one appears to have no route to Settings. Flagging rather than fixing, since the answer is a product call.