Skip to content

fix: usdt confirm details fit above swipe to pay - #1637

Merged
ovitrif merged 4 commits into
masterfrom
fix/confirm-details-fit
Oct 21, 2026
Merged

ovitrif merged 4 commits into
masterfrom
fix/confirm-details-fit

Conversation

@ovitrif

@ovitrif ovitrif commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #1628
Twin: synonymdev/bitkit-ios#1062

This PR makes the expanded USDT confirm fit the longest set of details (contact, address and invoice note on a Paykit request): the fee hint now scrolls with the details under Hide Details, and Swipe To Pay stays pinned.

Description

  • Moves the fee hint ("All fees are paid in USDT. Final fee may be lower.") from the pinned area above Swipe To Pay into the scrolling details, right under Hide Details, so the two never collide.
  • Keeps the hint at the bottom of the details area when everything fits, as before, and lets it follow Hide Details when the details overflow and scroll; Swipe To Pay stays pinned either way.
  • Keeps Swipe To Pay clear of the navigation bar on the Paykit request review: its sheet now pads the bottom by the navigation bar plus 16 dp, as the USDT wallet's own send sheet does.
  • Adds that check to usdt-send-review-and-details.xml, and a crowded-details step to paykit-quoted-usdt.xml that uses the local USDT fixture for quotes.

Out of Scope

  • UsdtSendContent.kt collapsed confirm, Amount and submitted states: unchanged.

Design

Bitkit - Refactor v63 › Send (USDT) › Confirm Details USDT. The frame shows a direct send without the Contact and Invoice Note rows; this PR keeps its order (details, Hide Details, fee hint, Swipe To Pay) and makes it scroll when a Paykit request adds those rows.

Preview

Before, 3.0.1 (contact and address masked):

After, regtest with a local test hook supplying the quote, contact and invoice note, shown in the USDT wallet's send sheet (the Paykit request review shares this layout and, since 3bfde44, the same bottom padding): details open, then scrolled to the fee hint:

Details open Scrolled to fee hint

a1637-details-2x.mp4

After, a plain send whose details fit, next to the Figma frame: the hint stays at the bottom and a gentle drag moves nothing:

Figma App

QA Notes

Journeys

  • updated usdt-send-review-and-details.xml — the fee hint sits below Hide Details and scrolls with the details, with Swipe To Pay pinned
  • updated paykit-quoted-usdt.xml — a USDT request with contact and a long invoice note: details scroll past Hide Details to the fee note, with Swipe To Pay pinned

Manual Tests

  • Open a Paykit request paid in USDT with an invoice note, continue to review and tap Show Details → Contact, Address and Invoice Note scroll with Hide Details and the fee hint above a pinned Swipe To Pay, nothing overlaps — an incoming Payment Request needs the fixture issuer from journeys/README.md plus a USDT quote, which needs the local USDT fixture

Automated Checks

N/A

@ovitrif ovitrif self-assigned this Oct 20, 2026
@ovitrif ovitrif changed the title fix: fit usdt confirm details above a pinned swipe fix: usdt confirm details fit above swipe to pay Oct 20, 2026
@ovitrif
ovitrif marked this pull request as ready for review October 20, 2026 23:52
@ovitrif
ovitrif requested review from a team, ben-kaufman and coreyphillips and removed request for a team October 20, 2026 23:52
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 20, 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-20T23:54:41.284780Z 638ab48 Draft marked ready
ℹ️ 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 commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator Author

QA on an Android 16 emulator (1080×2400, 420 dpi), regtest debug build of this branch with a local-only hook that supplies the quote, contact and invoice note:

  • Payment Request confirm with Contact, Address and Invoice Note: Show Details lays out every row; the content scrolls, the Hide Details pill and the fee hint follow it 52 px apart, and Swipe To Pay stays pinned 43 px above the navigation bar.
  • Plain send whose details fit: the fee hint sits at the bottom above Swipe To Pay as before, and gentle drags up and down move nothing (frames taken mid-drag are identical).
  • testDevDebugUnitTest, lintDevDebug and detekt pass.

@greptile-apps

greptile-apps Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 4/5

[Low impact] The change is limited to the expanded USDT send confirmation layout.

The PR appears safe to merge, with a non-blocking gap in the journey’s overflow check.

Findings

  1. P2 Crowded review goes untested ▶

Summary

Moves the expanded USDT fee hint into the scrolling details while keeping Swipe To Pay outside that area.

  • The USDT fee hint scrolls with expanded details above Swipe To Pay.

Reviews (1) · Last reviewed commit: "fix: fit usdt confirm details above a pi..." · Reviewed by Greptile

Comment thread journeys/usdt-send-review-and-details.xml
@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Regtest APK

Built from fc46b47 (run).

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

@ovitrif

ovitrif commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator Author

Pushed c6068a1: journeys/paykit-quoted-usdt.xml gains a step for a USDT request whose details overflow, with a contact and a long invoice note. It checks that the fee note scrolls with Hide Details and Swipe To Pay stays pinned. The step in usdt-send-review-and-details.xml runs on a plain send whose details may fit, so this one covers the overlap this PR fixes. It answers the Greptile finding. The Journeys list in the description now names both files. No app code changed. The same step is on the iOS twin, synonymdev/bitkit-ios#1062.

@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 at c6068a1: no issues found.

  • Layout: the fee note sits after a flexible spacer inside the min-height scroll column. When the details fit, it sits at the bottom; when they overflow, it follows Hide Details. Swipe to pay stays pinned outside the scroll.
  • Show/Hide: each toggle scrolls back to the top, so the amount header is visible.
  • Reachability: amount, Pay from, Network, Payment, Fee, Address, Contact and Note all stay reachable by scrolling. Nothing is clipped.
  • Parity: same structure, journey text and changelog sentence as synonymdev/bitkit-ios#1062.
  • Journeys: usdt-send-review-and-details.xml and paykit-quoted-usdt.xml updated. The new Paykit step covers Greptile's resolved thread.

Device gate (partial): c6068a1 — not run yet. Pending: a Paykit USDT request with a contact and a wrapped note → Show Details → scroll and Hide Details, with no overlap and Swipe pinned. Then a plain send on a short screen with large text (iPhone SE with the largest Dynamic Type on iOS).

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.

Device gate (partial): c6068a1 — not run. The USDT fixture went down (Docker stopped on a full disk) before this PR's turn on the Android lane, and the pass is paused. Pending:

  • Show Details overflow, with Swipe pinned and the header visible after each toggle;
  • font scale 1.3 on a short display;
  • usdt-send-review-and-details.xml and paykit-quoted-usdt.xml.

The iOS twin's layout checks passed on synonymdev/bitkit-ios#1062.

@coreyphillips coreyphillips 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.

Two independent reviews.

needs changing before merge

  • Paykit USDT review still draws Swipe To Pay under the navigation bar (app/src/main/java/to/bitkit/ui/screens/wallets/usdt/PaykitUsdtReview.kt:92). On the Paykit request route this PR targets, Swipe To Pay still sits under the navigation bar. That fails the issue's later requirement (stay pinned and clear of the navigation bar) and the new paykit-quoted-usdt.xml step that asserts it. The route is SendSheet SendRoute.UsdtReview → PaykitUsdtReview → UsdtPaymentContent → UsdtConfirmation → SwipeToConfirm. None of these applies a bottom inset: - PaykitUsdtReview.kt:92 is only Modifier.sheetHeight().background(Colors.Gray7). - SheetHost is a BottomSheetScaffold with no inset, and SheetHeight.kt:23 says the bottom safe area belongs in the sheet content. - The app is edge to edge (targetSdk 36, EdgeToEdge.kt). The direct USDT host does pad it, at UsdtWalletScreen.kt:234 (navigationBarsPadding().imePadding().padding(bottom = 16.dp)). So does SendConfirmScreen.kt:262. The Out of Scope note credits #1572, but that merge (4ec9966) only touched ForgotPinSheet and the unavailable state of SubscriptionSheet. The 3.0.1 screenshot in #1628 is this route, opened over Subscriptions, and it shows the swipe under the gesture handle. The PR's after screenshots don't show this route. They sit over the USDT wallet screen with a 16dp gap above the handle, which matches the padded UsdtWalletScreen host. Only PaykitUsdtReview passes a contact and a note, so those shots came from the test hook running in the padded host. I confirmed this by tracing the code and git history. I did not run it on a device. Suggested fix: add .navigationBarsPadding() and the same 16dp bottom padding to the Column at PaykitUsdtReview.kt:92, matching the direct host.

worth doing, does not block

  • New Paykit journey step needs a USDT quote the journey environment lacks (journeys/paykit-quoted-usdt.xml:21). The new step in paykit-quoted-usdt.xml has to reach a successful USDT quote on a Paykit request. That conflicts with the journey's own description, which says funded Arbitrum review is a manual test in docs/usdt-qa.md and that a Bitcoin regtest balance does not fund USDT. The Capabilities table in journeys/README.md lists controlled USDT quotes as absent from the standard environment and says to report such steps as blocked. The step doesn't name the local USDT fixture it needs, so a runner without it only reaches a quote failure. docs/usdt-qa.md (Paykit quoted reviews and history, line 109) already has the matching check: open an unpaid USDT request, continue to review, and verify Contact, address and invoice note in the details. Either move the overlap check there, or name the fixture in the step or the description. The iOS twin merged with identical prose, so any change has to land in both repos.
  • Expanded-details test still expects the fee hint to stay visible (app/src/main/java/to/bitkit/ui/screens/wallets/usdt/UsdtSendContent.kt:583). Running bridgeAmountsAndNetworksAreInExpandedDetails can now fail at the fee-note assertion in UsdtPaymentContentTest.kt:156. Its 360 by 600 dp fixture scrolls only to Polygon, leaving the relocated hint below the viewport. The assertion needs its own performScrollTo(). Device execution was unavailable, so I could not confirm the failure.

nits

  • Changelog fragment reads circularly (changelog.d/next/1628.fixed.md:1). "The USDT payment details now fit the longest set of details" describes the details in terms of themselves. A user-facing sentence would name what changed. For example: "On the expanded USDT payment review, the fee note no longer crowds Hide Details, and long details scroll above a pinned Swipe To Pay." The iOS fragment has the same text, so keep the two in step.

@ovitrif

ovitrif commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator Author

@coreyphillips all four are in 3bfde44.

Paykit USDT review still draws Swipe To Pay under the navigation bar

Right, #1572 never covered this route. PaykitUsdtReview now pads its column with navigationBarsPadding() plus 16 dp at the bottom, as the USDT wallet's own send sheet does. I removed the wrong Out of Scope credit, listed the fix in the description, and captioned the Preview: those shots come from the USDT wallet's send sheet, which shares this layout. I haven't driven the Paykit route on a device; it needs a USDT request from a contact with a USDT endpoint.

New Paykit journey step needs a USDT quote the journey environment lacks

The step now starts "Using the local USDT fixture for quotes", which the Capabilities table lists. The iOS text is updated to match in synonymdev/bitkit-ios#1082.

Expanded-details test still expects the fee hint to stay visible

bridgeAmountsAndNetworksAreInExpandedDetails now scrolls to the fee hint before it asserts it. The instrumented tests compile; I haven't run them on a device.

Changelog fragment reads circularly

It now reads "On the expanded USDT payment review, the fee note no longer crowds Hide Details, and long details scroll above Swipe To Pay, which stays clear of the navigation bar." The iOS fragment, without the navigation bar part, is in synonymdev/bitkit-ios#1082.

@ovitrif
ovitrif requested a review from pwltr October 21, 2026 14:26
@ovitrif

ovitrif commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator Author

Pushed fc46b47: the USDT-only contact's Amount step in paykit-quoted-usdt.xml now expects the balance, chips and keypad at the bottom above Continue, as on direct USDT Send. #1636 moved the free space between the amount and the balance, so the old line no longer held. The iOS file gets the same words in synonymdev/bitkit-ios#1082 (review). Journey text only.

@coreyphillips coreyphillips 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.

Rechecked after 2 new commits (3bfde44, fc46b47). Nothing blocking remains.

addressed

  • Paykit USDT review still draws Swipe To Pay under the navigation bar (app/src/main/java/to/bitkit/ui/screens/wallets/usdt/PaykitUsdtReview.kt:92). Fixed: PaykitUsdtReview.kt:93-95 now chains .navigationBarsPadding().padding(bottom = 16.dp) after sheetHeight(). That matches the direct host at UsdtWalletScreen.kt:233-235 and the sibling SendSheet screens such as SendConfirmScreen.kt:262. I checked the inset can't be applied twice: SheetHost (a BottomSheetScaffold) and the SendSheet wrapper (sheetHeight() plus imePadding() only) apply no navigation-bar inset. I confirmed this from the code, not on a device.
  • New Paykit journey step needs a USDT quote the journey environment lacks (journeys/paykit-quoted-usdt.xml:21). Fixed: paykit-quoted-usdt.xml:21 now opens with "Using the local USDT fixture for quotes". That is the setup named in the Capabilities row at journeys/README.md:127, which tells a runner without it to report the step as blocked. The iOS follow-up, bitkit-ios#1082, carries the same text: its diff shows the same post-image blob, c27e2b767.
  • Changelog fragment reads circularly (changelog.d/next/1628.fixed.md:1). Fixed: changelog.d/next/1628.fixed.md now says the fee note no longer crowds Hide Details, and that long details scroll above a Swipe To Pay kept clear of the navigation bar. That is one user-facing sentence naming what changed. The iOS fragment in #1082 matches, minus the navigation-bar clause.
  • Expanded-details test still expects the fee hint to stay visible (app/src/main/java/to/bitkit/ui/screens/wallets/usdt/UsdtSendContent.kt:583). Fixed: UsdtPaymentContentTest.kt:156 now calls performScrollTo() on the fee note before assertIsDisplayed(). The note sits inside the verticalScroll column at UsdtSendContent.kt:581-584, so the scroll brings it into the viewport. The later performScrollTo() on UsdtReviewDetails at line 159 still reaches the toggle. I read this but could not run it; instrumented tests need a device and the build needs GitHub Packages credentials.

@ovitrif
ovitrif enabled auto-merge October 21, 2026 14:46
@ovitrif
ovitrif merged commit 13720db into master Oct 21, 2026
21 checks passed
@ovitrif
ovitrif deleted the fix/confirm-details-fit branch October 21, 2026 15:09
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: hide details is crowded by the fee hint on payment request confirm

3 participants