Skip to content

[Bug]: Contact USDT confirmation swipe overlaps Android system navigation #1523

Description

@piotr-iohk

What happened?

When paying a contact using USDT, the confirmation screen places the swipe-to-pay control behind the Samsung three-button navigation bar. Recents, Home and Back render over the swipe control. The reporter does not see this overlap for Bitcoin or Lightning confirmation.

Expected behavior

The entire swipe control should sit above system navigation and remain unobstructed, consistently with Bitcoin and Lightning.

Steps to Reproduce

  1. Use Android with three-button system navigation enabled.
  2. Open Send → Contacts and choose a contact accepting USDT.
  3. Select USDT, enter an amount and proceed to confirmation.
  4. Observe system navigation buttons overlapping the swipe-to-pay control. No payment is necessary to reproduce the layout defect.

Logs / Screenshots / Recordings

Samsung system navigation overlaps contact USDT swipe-to-pay

Bitkit Version

3.0.0 RC2 (193), mainnet; release revision 19449fb0d729f51b9875eee2f66acfc0671e11da.

Device / OS

Samsung Galaxy S22 (SM-S901B), Android 16. Recipient for contact-payment tests: iPhone 13, iOS Bitkit 3.0.0 (200).

Reproducibility

Observed in the attached contact-USDT confirmation; repeatability across other devices and navigation modes has not been measured.

Additional context

Confirmed source cause: PaykitUsdtReview.kt:92 wraps confirmation content with sheetHeight().background(...) but does not apply bottom navigation-bar insets. The enclosing Send sheet does not supply that padding. SendConfirmScreen.kt:264 applies navigationBarsPadding() for Bitcoin/Lightning. The direct USDT wallet modal also applies navigation-bar padding; the contact-USDT path omits it.

Suggested fix: apply bottom system-navigation insets at the appropriate contact-USDT confirmation container, without double-padding other payment paths. Verify with three-button navigation and gesture navigation, including a smaller screen. Separate from the intermittent contact payment-option availability issue.

Related contact-payment reports

Activity

  1. added theissue type on Oct 16, 2026
  2. added this to the 3.0.5 milestone on Oct 16, 2026
  3. piotr-iohk commented on Oct 16, 2026

    @piotr-iohk
    CollaboratorAuthor

    Additional affected flow reported during RC2 testing: the payment-request payment confirmation sheet also shows swipe-to-pay underneath Samsung's three-button navigation bar. This is a reporter observation; there is no new screenshot for that occurrence. The original contact-USDT screenshot above remains the visual evidence. The asset used in the newly reported payment-request occurrence was not separately recorded.

    I traced the payment-request and subscription paths at the shipped RC2 revision 19449fb0d729f51b9875eee2f66acfc0671e11da:

    • USDT payment requests share the confirmed source cause. Incoming requests enter the contact-payment flow through finishIncomingPaymentRequestPreparation. reviewPaykitAmount routes USDT to SendRoute.UsdtReview, whose destination renders PaykitUsdtReview. Its container uses sheetHeight().background(...) without navigationBarsPadding(), including when isPaymentRequest is true.
    • Subscription USDT payments are exposed through the same shared route. The send state identifies recurring requests from their billing period, while the USDT review routing is shared. This is a source-level finding, not a device reproduction of a subscription overlap.
    • The dedicated subscription subscribe/cancel/delete swipe sheets are different. SubscriptionReview applies navigation-bar padding at line 800; SubscriptionCancel does so at line 991. They do not share this missing-inset cause.
    • BTC/Lightning request confirmation is also different: SendConfirmScreen already applies navigationBarsPadding(). Do not generalize this root cause to every request asset; if the new observation was BTC/Lightning, that specific path still needs runtime investigation.

    Please include direct contact USDT, one-time request payments using USDT, and recurring/subscription payments using USDT in the fix/retest scope. Verify three-button and gesture navigation without double-padding the already protected BTC/Lightning and dedicated subscription sheets. No new builds or payments were performed for this follow-up.

  4. piotr-iohk commented on Oct 16, 2026

    @piotr-iohk
    CollaboratorAuthor

    Historical overlap report: Android #1404 — Paykit payment-request sheet clips and does not open automatically. It included a cramped/partially covered swipe control on the same Samsung S22, so it is relevant prior evidence.

    History assessment: a later USDT-path layout defect, not evidence that the #1405 fix was reverted.

    Therefore the confirmed USDT overlap is best classified as a new path missing the earlier layout protection, rather than the original BTC/Lightning fix being undone. This does not prove that every original #1404 layout case was validated on every device. No historical device retest was performed here.

    For the newly reported payment-request occurrence, the payment asset was not recorded. If it was USDT, it follows the shared defective path described above. If it was BTC/Lightning, investigate that separately as a possible remaining/regressed #1404 case; the missing-USDT-inset explanation would not cover it. Subscription USDT payment remains source-confirmed exposure, not a runtime reproduction.

  5. piotr-iohk commented on Oct 16, 2026

    @piotr-iohk
    CollaboratorAuthor

    Another affected flow: Cross-network deposits in received USDT activity details

    On the same Samsung Galaxy S22 (Android 16, RC2 3.0.0 build 193), open a received USDT transaction and show its details. The bottom Cross-network deposits button (Wpłaty z innych sieci in Polish) sits behind Android's three-button system navigation. The screenshot shows iOS on the left and Android on the right; Recents/Home/Back overlap the Android button.

    Received USDT details: Android navigation overlaps Cross-network deposits; iOS comparison on left

    Confirmed source cause at RC2 19449fb0d729f51b9875eee2f66acfc0671e11da:

    • UsdtActivityDetail uses a full-size root Column with no navigation-bar inset.
    • Its fixed bottom action container uses only Modifier.padding(16.dp). The UsdtDepositHistory button is rendered inside it when details are shown for an eligible incoming transfer. Fixed padding does not reserve the system navigation-bar area.
    • The wallet transaction-detail route renders this component directly, without supplying the missing bottom inset. PaykitUsdtReview also reuses this detail component.

    This is the same missing-system-inset class, but a separate container from the swipe confirmation in PaykitUsdtReview. A fix only on the swipe screen will not cover this activity-details footer.

    Add received-USDT activity details → Cross-network deposits to this issue's fix and verification scope, alongside contact/request/subscription USDT confirmation. Reserve bottom system-navigation space at the appropriate detail container; verify both three-button and gesture navigation without double-padding other hosts. No new transfer is required to reproduce: use an existing received transaction. Screenshot is reporter evidence; source path inspected, no new device run performed by the agent.

  6. ovitrif commented on Oct 20, 2026

    @ovitrif
    Collaborator

    @ben-kaufman the same navigation-bar overlap shows on the "USDT Sent" success sheet on Bitkit Android 3.0.1 (195): its Details and Close buttons sit under the gesture bar. #1564 fixes the Swipe To Pay bar on the USDT payment review, but doesn't touch the success sheet (it looks like UsdtSendContent.kt), and #1572 only covers the Forgot PIN and subscription-unavailable sheets. Could #1564 cover the success sheet too?

    USDT Sent success sheet, Details and Close under the gesture bar:

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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions