Skip to content

fix: slide between usdt receive pages - #1588

Open
ovitrif wants to merge 8 commits into
fix/usdt-wallet-layout-stabilityfrom
fix/usdt-receive-edit-transition
Open

ovitrif wants to merge 8 commits into
fix/usdt-wallet-layout-stabilityfrom
fix/usdt-receive-edit-transition

Conversation

@ovitrif

@ovitrif ovitrif commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #1586
Twin: synonymdev/bitkit-ios#1018
Stacked on #1565

Description

  • Fixes USDT receive pages swapping in at once: the address, network, amount and fee pages now slide like the Bitcoin receive flow, because UsdtDepositReceiveScreen switched pages through local state with no animation while the Bitcoin tabs navigate between NavHost destinations.
  • Adds the four default screen transitions as plain values in Transitions.kt, so the NavHost lambdas and the USDT pages share one motion spec.
  • Moves the USDT page padding inside each opaque Gray7 page, so the slide spans the full sheet width and the outgoing page stays hidden behind the incoming one.
  • Stacked on fix: stabilize usdt wallet and payment layouts #1565 (and fix: improve usdt payment feedback and layout #1564 below it): both edit the USDT tab row and content call that wrapping the pages re-indents, so this builds on them instead of conflicting. Merge after fix: stabilize usdt wallet and payment layouts #1565.
  • Going back draws the outgoing page on top as it slides out to the right, as NavHost does. Continue from the fee page back to the QR uses the same back motion.
  • Animates a snapshot of each page (its deposit state and amount), so a page sliding out keeps showing what it showed: the deposit QR and Copy text, the fee details, the typed amount.
  • Ignores taps on a page while it slides out, so a quick Continue or Back cannot change pages from stale state.

Out of Scope

Design

Figma: USDT receive, from docs/screens-map.md. Motion follows the existing receive sheet transitions; the frames do not specify it.

Preview

Savings Edit for reference, then USDT Edit and Back, then Network and Back (regtest, 2x; recorded before the rebase onto #1565, whose changes do not touch the page switch):

usdt-edit-after-2x.mp4

Before: the recording in #1586.

QA Notes

Journeys

  • updated usdt-receive-amount-and-units.xml — USDT Edit slides the Amount screen in from the right and Back slides it out over the QR

Manual Tests

N/A

Automated Checks

N/A

@ovitrif ovitrif self-assigned this Oct 19, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-19T17:45:09.610734Z 755e403 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@ovitrif
ovitrif requested review from a team, ben-kaufman and pwltr and removed request for a team October 19, 2026 17:42
@greptile-apps

greptile-apps Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 4/5

[Low impact] The visible change stays within the USDT receive flow.

This appears safe to merge, with a non-blocking visual issue when going back from Fees.

Findings

  1. P2 Fees disappear before sliding away ▶

Summary

This PR adds sliding transitions between the USDT receive pages.

  • USDT receive pages slide between the address, network, amount, and fee screens.

Reviews (1) · Last reviewed commit: "test: check usdt receive edit slides in ..." · Reviewed by Greptile

Comment thread app/src/main/java/to/bitkit/ui/screens/wallets/usdt/UsdtDepositReceiveScreen.kt Outdated

@talosmachina talosmachina left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No findings. Moves the USDT receive pages into an AnimatedContent keyed on ReceivePage, reusing the NavHost slide specs now exposed as plain values in Transitions.kt, with the horizontal padding moved inside each opaque page. Reviewed 755e403, full tier, reasoned from the code; not built by me, so CI is the gate.

What I checked, and 4 candidates I ruled out

Read in full: UsdtDepositReceiveScreen.kt, UsdtDepositViewModel.kt, Transitions.kt, the USDT branch of ReceiveQrScreen.kt
Call sites traced: UsdtDepositReceiveScreen (only ReceiveQrScreen, so the removed outer padding has no other host), the four default*Trans lambdas (now thin wrappers over the same specs, motion unchanged)
CI at review time: lint, detekt and build-local green; build and the local e2e shards still running

Ruled out

  • Direction from enum order: ADDRESS < NETWORKS < AMOUNT < FEES gives push on Network, Edit and the address arriving, pop on every Back and on Continue from FEES, which matches the description.
  • Stale page in back: the lambda reads the delegated state at call time, so a back tap on the outgoing page during the 300 ms slide still acts on the current page.
  • Layout change from the moved padding: NetworkSelector and FillHeight take their weight from the new inner Column, which is fillMaxSize inside a weight(1f) AnimatedContent, the same space the old parent Column gave them.
  • Outgoing FEES page empties on Back: back calls selectNetwork, which nulls address, so the sliding-out FEES page draws no body for the length of the slide. It only shows during the 300 ms animation and changes no state, so it is below the bar for a finding.

Merge confidence: 4/5, no findings, but build and e2e were still running at review time and nothing here built the branch; the updated journey is the check for the motion.

@ovitrif
ovitrif force-pushed the fix/usdt-receive-edit-transition branch from 755e403 to 042f3a2 Compare October 19, 2026 17:49
@ovitrif
ovitrif changed the base branch from master to fix/usdt-wallet-layout-stability October 19, 2026 17:49
@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Regtest APK

Built from e10ba24 (run).

Download bitkit-dev-debug universal APK (expires in 30 days).

@pwltr pwltr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 7ea16b2; no additional findings from my review. Greptile’s finding is addressed in source, and CI is green. I have not independently run the device animation journey.

@jvsena42 jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code scan: no HIGH/MEDIUM. One LOW (journey parity) is inline.

Checked and clean: once each transition finishes, the address, QR and amount are correct.

  • Edit then Back keeps the committed amount.
  • Continue from Fees keeps state.address.
  • The network-change paths are unchanged.
  • The journey's slide text matches the push and pop specs, including targetContentZIndex = -1f.

To confirm on device, not posted as a finding yet: during the 300 ms slide, the outgoing page renders from live state, not a snapshot. Tapping Edit on a non-Arbitrum deposit QR runs selectNetwork, which clears address. The outgoing page could then briefly draw the Arbitrum wallet QR (the wallet.address / wallet.receiveUri fallbacks) under the deposit network's label. Likewise, Back from Amount could snap the outgoing amount back to the old value mid-slide. The FEES page already got a remember { state.address } patch for the same class. I'll frame-step a screen recording before calling it a finding. If it shows, the fix is to animate a per-page snapshot (AnimatedContent(targetState = PageState(page, state, amount, draftAmount), contentKey = { it.page })).

Device gate (partial): not run yet. Pending: usdt-receive-amount-and-units.xml including the new slide step, a frame-stepped recording of Edit and Back on a deposit-network QR, and gfxinfo across the transition. The device result will follow.

Comment thread journeys/usdt-receive-amount-and-units.xml

@jvsena42 jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Delta at f473355: no issues found.

  • a08ca54 (blocking USDT wallet tap passthrough) is the same commit I reviewed on #1565: blockPointerInputPassthrough() observes without consuming, as on Savings and Spending.
  • c176c06 adds one line to journeys/README.md noting that the USDT receive slide step waits on iOS.

My code scan at 7ea16b2 stands. The open device question from it is still unverified: whether the outgoing page draws the Arbitrum wallet QR under a deposit network's label during the slide.

⚠️ Device gate: not run — this PR has merge conflicts with its base (fix/usdt-wallet-layout-stability), so I'm skipping the device tests until it's rebased. Pending after the rebase:

  • usdt-receive-amount-and-units.xml, including the slide step;
  • a frame-stepped recording of Edit and Back on a deposit-network QR;
  • gfxinfo across the transition.

…' into fix/usdt-receive-edit-transition

# Conflicts:
#	app/src/main/java/to/bitkit/ui/screens/wallets/usdt/UsdtDepositReceiveScreen.kt
@ovitrif

ovitrif commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator Author

@jvsena42 the conflict with the base is resolved in ef3c039: merged fix/usdt-wallet-layout-stability in, with its swipe-to-change-tab wrapper and clearError rename kept inside each animated page (swipe stays on the address page only). Compile, detekt, Android Lint and unit tests pass, so the device run is unblocked.

@jvsena42 jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Delta at ef3c039: the merge of the base (aba8c0f) resolves cleanly. The base's swipeToChangeTab wrapper and the clearAmountError → clearError rename now sit inside each animated page, with no other content change. The PR diff matches a08ca54..f473355.

This also settles the device question from my earlier reviews. During the Edit slide, the outgoing page shows the Arbitrum wallet QR and Copy target under the deposit network's label. One LOW, inline with a failing androidTest. It's visual only: a scan or copy in that window gets the user's own Arbitrum receive address, which still pays Arbitrum.

Device gate (partial): ef3c039 — not run yet. Pending: usdt-receive-amount-and-units.xml Edit/Back on a BNB deposit QR, frame-stepped, after a fix.

Device results will follow in a separate review.

@jvsena42 jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code scan of ef3c039..4844170: one LOW inline, verified with a failing androidTest.

  • AnimatedContent now animates a per-page snapshot (ShownPage(page, state, amount), contentKey = { it.page }). An outgoing Address page keeps its deposit address, URI, label and Copy target, and an outgoing Amount page keeps its digits, so both cases from my earlier outgoing-page thread are fixed by trace. That thread came from a failing androidTest, so I'm leaving it open until that test passes at this head.
  • The Fees body that vanished on Back stays fixed by the snapshot.
  • Cancel and Back paths traced for both the incoming page and taps on the outgoing page: Edit, Back from Amount (deposit network and Arbitrum), Continue from Amount, Back and Continue from Fees, network pick and Back, Back on Address, Back during a running slide. Only Continue on the outgoing Fees page ends in a wrong state.
  • No iOS twin: synonymdev/bitkit-ios#1018 is still open, and iOS has no transition there.

Device gate (partial): 4844170 — not run yet; pending usdt-receive-amount-and-units.xml step 4, a frame-stepped Edit and Back on a BNB deposit QR against the Figma frame (49861-374947, 300 ms FastOutSlowIn reused from the receive sheet), the androidTest from the earlier thread, and dumpsys gfxinfo across the transitions. Device results will follow in a separate review.

Comment thread app/src/main/java/to/bitkit/ui/screens/wallets/usdt/UsdtDepositReceiveScreen.kt Outdated

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug: receive usdt edit sheet screen has no transitions

4 participants