chore(ui): tear out the v1 UI behind the newUI flag - #1290
Merged
Conversation
bmc08gt
force-pushed
the
chore/tear-out-v1-ui
branch
from
August 26, 2026 16:31
f2399d4 to
bffe77d
Compare
`FeatureFlag.NewUi` launched, so every `isNewUi` branch had exactly one live
side. This removes the flag and collapses those branches, then deletes the v1
surfaces that are stranded once the branch is gone.
Removed
- `FeatureFlag.NewUi` and `FeatureFlag.NavBar` (the v1 nav-bar config flag),
plus the Labs "Nav Bar" settings screen that edited it.
- The v1 scanner chrome: `DecorView`, `ScannerDecorItem`,
`ScannerNavigationBar`, `LongPressDraggable`, `NavBarConfig`,
`GiveButtonLabel`.
- `apps/flipcash/features/home` — the v1 home host, unreferenced once the nav
bar is hoisted to the app root. Dropped from `settings.gradle.kts`.
- The v1 balance surface (`BalanceScreen`, `BalanceScreenContent`,
`CashReservesRow`) and the v1 currency-info sections (`TokenBalance`,
`TokenDetails`), superseded by the wallet deck and `CurrencyInfoContentV2`.
- `CurrencyCreatorUpsellCard` — the creator promo lives on the wallet now.
UI tests
The Maestro suite still drove v1 affordances (a "Tips"/"Discover"/"Cash" tab
row, a `menu_button`, a swipe-down sheet dismissal), so it is retargeted to the
v2 tab model rather than left to fail:
- `NavigationBar` tabs are tagged `nav_scanner` / `nav_wallet` / `nav_chats` /
`nav_tipcard`; `helpers/close_open_sheet.yaml` unwinds to the scanner tab.
- `SwapStep.Entry` is explicitly tagged `swap_screen` (the derived id would be
`entry_screen`); `buy.yaml` / `sell.yaml` already anchored on `swap_screen`.
- `CurrencyInfoExpansion` carries the `token_info_screen` anchor too, since in
v2 a wallet card expands as an overlay instead of pushing the screen.
- The chats list is tagged `chat_list`.
- `buy.yaml`/`sell.yaml` follow v2 swap semantics ("Get" on a currency you do
not hold, "Convert" in place of "Sell"), give flows enter via
Wallet → currency → Give, and `BaselineProfileGenerator` journeys switch tabs
instead of tapping v1 labels.
… title (#1301) Tearing out the v1 UI removed the Sell button from the token screen, which was the only place a SwapPurpose.Sell could be constructed. The v2 action row offers Give, Convert, and Withdraw, so nothing can reach the success title as a sell any more. The title's `else` arm existed to name the reserve for that case. Make the two reachable purposes explicit and let the fallback go unnamed rather than claim a destination it can no longer have; the suffix was already optional. title_cashReserves had no other reference, so it goes with it. SwapPurpose.Sell itself stays: it is unreachable but still referenced by SwapViewModel, AppRoute, and the sell receipt screen, so removing the type is a larger change than this one. canSell stays too — Convert reads it.
Every flow started from `scanner_screen`, which is no longer where login lands (`homeRoute = AppRoute.Sheets.Wallet`), and the entry points they tapped moved with the tab rework: - Add Money and Withdraw Money are wallet action tiles now, at the bottom of a scrollable list, so each entry needs a `scrollUntilVisible` — as do Discover Currencies and Create a Currency, which were already tiles. - Log Out moved from My Account to Advanced; App Settings is gone entirely (`navigate_to_app_settings.yaml` and its screenshot leg with it). - The Add Money sheet is titled "Add Money With", and Withdraw opens on the currency picker because it carries no preselected mint. - The You tab leads with the tip card, so its list rows sit below the fold. Three flows were pinned to positions in live data. `buy.yaml` assumed leaderboard row 0 offers "Get", which it only does for a currency the account does not already hold, so it now walks the first four rows. `blocking.yaml` and `tip_chat.yaml` took chat row 0, which is the account's own self-tip chat, and now select the participant by name. `vanity_deeplink_self.yaml` cleared app state to force a cold start, which wiped the account too and only ever reached the login screen; it stops the app instead. `login.yaml` now clears state so it starts logged out, and `share_cashlink.yaml` waits for the confirm prompt rather than tapping into its animation.
bmc08gt
force-pushed
the
chore/tear-out-v1-ui
branch
from
August 26, 2026 17:46
bffe77d to
f308fd9
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.
Follow-up to #1286, which flipped
FeatureFlag.NewUito launched. With the flagpermanently on, every
isNewUibranch had exactly one live side — this removes theflag and collapses those branches, then deletes the v1 surfaces that are stranded
once the branch is gone.
Removed
FeatureFlag.NewUiandFeatureFlag.NavBar(the v1 nav-bar config flag),plus the Labs "Nav Bar" settings screen that edited it.
DecorView,ScannerDecorItem,ScannerNavigationBar,LongPressDraggable,NavBarConfig,GiveButtonLabel. The v2 nav bar is a singlepersistent overlay hoisted to the app root; none of this had a caller left.
apps/flipcash/features/home— the v1 home host. Dropped fromsettings.gradle.kts.BalanceScreen,BalanceScreenContent,CashReservesRow)and the v1 currency-info sections (
TokenBalance,TokenDetails), superseded by thewallet card deck and
CurrencyInfoContentV2.CurrencyCreatorUpsellCard— the creator promo is a wallet action tile now.Net: 114 files, +826 / −3969.
UI tests
The Maestro suite and the macrobenchmark still drove v1 affordances — a
"Tips"/"Discover"/"Cash" tab row, a
menu_button, a swipe-down sheet dismissal — sothey are retargeted to the v2 tab model rather than left to rot:
NavigationBartabs are taggednav_scanner/nav_wallet/nav_chats/nav_tipcard, andhelpers/close_open_sheet.yamlunwinds to the scanner tab(tabs are replaced on one root back stack, so Back never unwinds between them).
SwapStep.Entryis explicitly taggedswap_screen.buy.yaml/sell.yamlalreadyanchored on that id, but nothing ever emitted it — the derived id is
entry_screen.CurrencyInfoExpansioncarries thetoken_info_screenanchor too: in v2 a wallet cardexpands as an overlay rather than pushing
AppRoute.Token.Info, so the flows wouldotherwise lose their anchor on the most common path into currency info.
chat_list.buy.yaml/sell.yamlfollow v2 swap semantics: there is no "Sell" (liquidating is aConvert into Dollars), "Buy" is "Get" and is only offered on a currency you do not
hold, and the funding currency is picked inline rather than as a pushed step.
currency info, not the scanner.
BaselineProfileGeneratorjourneys switch tabs by resource id instead of tapping v1labels;
sendChatJourney(which entered an unbuilt module via a "Send" tab) becomes achats-tab journey.
Running the suite end-to-end then turned up entry points that had moved with the tab
rework rather than with this teardown:
scanner_screen, which is no longer where login lands(
homeRoute = AppRoute.Sheets.Wallet).scrollable list, so each entry needs a
scrollUntilVisible— as do DiscoverCurrencies and Create a Currency, which were already tiles.
(
navigate_to_app_settings.yamland its screenshot leg with it).buy.yamlassumed leaderboard row 0offers "Get", which it only does for a currency the account does not already hold;
blocking.yamlandtip_chat.yamltook chat row 0, which is the account's ownself-tip chat. They select by name now.