Skip to content

Keep the Import Wallet Next button clear of the keyboard - #6161

Open
j0ntz wants to merge 2 commits into
developfrom
jon/import-wallet-keyboard
Open

Keep the Import Wallet Next button clear of the keyboard#6161
j0ntz wants to merge 2 commits into
developfrom
jon/import-wallet-keyboard

Conversation

@j0ntz

@j0ntz j0ntz commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Description

Asana task

The Import Wallet scene rendered everything, including the Next button, inside a
scroll view that did not react to the keyboard. Opening the keyboard to type a
seed hid the button behind it, along with the per-asset Import Options inputs
(the Zcash / Pirate Chain birthday height). A wrapped 12- or 24-word phrase or a
short device made it worse.

The scene now shrinks to the space above the keyboard (SceneWrapper avoidKeyboard, the pattern ~20 other scenes already use, backed by
react-native-keyboard-controller) and its content lives in a real
ScrollView. Because the keyboard is part of the layout, the scroll viewport
ends above it, so scrolling can actually reach the bottom of the scene; on the
unchanged build the viewport's bottom edge sits underneath the keyboard and no
amount of scrolling reveals Next.

Two things decide the rest of the layout:

  • The seed field never collapses. FilledTextInput hardcodes
    flexGrow: 1 / flexShrink: 1 on its containers when multiline, and a
    ScrollView lays its content out against the scroll viewport, so the seed box
    would shrink to whatever room the keyboard leaves rather than sizing to its
    text. A plain non-shrinking View around the field in this scene is enough to
    stop that: the field then sizes to the phrase and the scene scrolls. No change
    to FilledTextInput itself, so TextInputModal's fullHeight multiline mode
    and SignMessageScene's numberOfLines={4} keep the fill behavior they want.
  • Next is reached by scrolling. Showing the whole word phrase matters more
    than Next being visible without scrolling, so SceneButtons stays inside the
    scroll content rather than pinned as a sibling.

The key logo's fixed 2 rem margins drop to 1 rem, and the container gets
flex: 1 so the content actually scrolls.

The maestro import flows previously dismissed the keyboard before tapping Next.
Both copies (maestro/common/import-wallets.yaml,
maestro/07-wallets/C000029a-migrate-wallets.yaml) now drop the keyboard and
scroll Next into view, since a 24-word phrase can push it below the fold.

One deviation from the task text: the task asked for the logo spacing to flex
and grow when there is room. Implementing that with flexGrow on the scroll
content made the multiline seed input compete for the same free space, so the
spacing is a fixed 1 rem minimum instead.

Asana: https://app.asana.com/1/9976422036640/project/1213880789473005/task/1217525813318788

CHANGELOG

Does this branch warrant an entry to the CHANGELOG?

  • Yes
  • No

Dependencies

none

Requirements

If you have made any visual changes to the GUI. Make sure you have:

  • Tested on iOS device
  • Tested on Android device
  • Tested on small-screen device (iPod Touch)
  • Tested on large-screen device (tablet)

iOS, iPhone 16 Pro Max simulator: a real 24-word BIP39 phrase typed with the
keyboard up, in both the plain BTC configuration and the BTC + ZEC one (which
adds the Import Options heading and the required Zcash birthday-height input).
The whole phrase stays visible in both, and scrolling with the keyboard up
reaches the birthday input and Next. The BTC import was driven through to the
Create Wallets completion scene ("BTC / My Bitcoin", green check).

iOS, iPhone 13 mini simulator: the same scene with the phrase entered and the
keyboard up. All six wrapped lines stay visible, and scrolled to the end Next
sits fully above the keyboard. Those two frames are marked with an axe in the
evidence comment: they were captured with the seed pre-filled and a one-off
scroll, because the harness only drives this session's slot simulator. The
layout in them is unforced and the local hacks were reverted.

Android: not exercised in this pass. The change is shared JS and the manifest
already uses adjustResize.

Convert the component to the React.FC form the lint rule expects.
@j0ntz
j0ntz force-pushed the jon/import-wallet-keyboard branch from 003c75c to 7e779e8 Compare August 17, 2026 21:39
@j0ntz
j0ntz marked this pull request as ready for review August 17, 2026 21:39
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@cursor cursor Bot 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.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 7e779e8. Configure here.

Comment thread src/components/scenes/CreateWalletImportScene.tsx
@j0ntz
j0ntz force-pushed the jon/import-wallet-keyboard branch from 8f92bd2 to f5b6a1f Compare August 17, 2026 21:51
The scene rendered its content, including the Next button, inside a scroll
view that did not react to the keyboard, so opening the keyboard to type a
seed hid the button behind it. Shrink the scene to the space above the
keyboard, keep the button pinned below the scrolling content, and let the
key logo flex instead of holding a fixed 2 rem of margin.

Drop the keyboard-dismiss steps the maestro import flows needed to reach the
button.
@j0ntz
j0ntz force-pushed the jon/import-wallet-keyboard branch from f5b6a1f to dbf030c Compare August 24, 2026 19:23
@j0ntz

j0ntz commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

📸🪓 Test evidence (followup: seed field must not collapse)

🪓 Hack-forced evidence: the two iPhone 13 mini frames were captured with the seed text pre-filled + autoFocus, and the scrolled one with a one-off scrollToEnd, because the maestro gate only drives this session's slot sim (16 Pro Max); the layout itself is unforced and the hacks were reverted. Temporary uncommitted edit, reverted before commit; the marked frames prove the rendering, not the trigger.

btc zec seed typed

btc zec seed typed

btc zec next scrolled

btc zec next scrolled

btc only seed typed

btc only seed typed

btc only next scrolled

btc only next scrolled

btc only imported

btc only imported

🪓 HACK-FORCED: mini btc seed

🪓 HACK-FORCED: mini btc seed

🪓 HACK-FORCED: mini btc next scrolled

🪓 HACK-FORCED: mini btc next scrolled

Captured by the agent's in-app test run (build-and-test).

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.

1 participant