Skip to content

Linearize Send Flow#856

Open
leofelix077 wants to merge 33 commits into
mainfrom
lf-linearize-send-flow
Open

Linearize Send Flow#856
leofelix077 wants to merge 33 commits into
mainfrom
lf-linearize-send-flow

Conversation

@leofelix077
Copy link
Copy Markdown
Collaborator

@leofelix077 leofelix077 commented May 6, 2026

Closes #809

iOS Build 1.18.26 (1778530225)

This PR linearizes the mobile Send flow so the user moves more cleanly from recipient selection to amount entry to review/processing, with less back-and-forth navigation.
It also tightens recipient handling, keyboard behavior, and state handoff across the send screens so the flow is more reliable
The new coverage now includes scenarios like searching/pasting recipients, choosing from recents or my wallets, and switching between token and collectible send paths.
It also covers amount entry and formatting, review sheet behavior, and navigation/state transitions when moving between recipient, amount, and review screens.

Side adjustments: Added a small change to code-style. as there was a misleading rule previously

the code-style tried to enforce e.g.
<Button onPress={() => void handleAsyncAction(id)} />, conflicting with the eslint rule that disables no-floating-promises

handleAsyncAction (no void and no explicit await) is a valid construct in the codebase


General smoke test for android, with some input validations

android-smoke-test.mov

Normal send flow, changing inputs, keyboard typing, deleting, and auto focus
Swapping from fiat to token
Input cursor and highlight while typing
Send flow with recents and account names
Send collectible flow

ScreenRecording_05-11-2026.18-16-37_1.mov

Sending to unknown address and recents

ScreenRecording_05-11-2026.18-51-31_1.MP4

PR structure

  • This PR does not mix refactoring changes with feature changes (break it down into smaller PRs if not).
  • This PR has reasonably narrow scope (break it down into smaller PRs if not).
  • This PR includes relevant before and after screenshots/videos highlighting these changes.
  • I took the time to review my own PR.

Testing

  • These changes have been tested and confirmed to work as intended on Android.
  • These changes have been tested and confirmed to work as intended on iOS.
  • These changes have been tested and confirmed to work as intended on small iOS screens.
  • These changes have been tested and confirmed to work as intended on small Android screens.
  • I have tried to break these changes while extensively testing them.
  • This PR adds tests for the new functionality or fixes.

Release

  • This is not a breaking change.
  • This PR updates existing JSDocs when applicable.
  • This PR adds JSDocs to new functionalities.
  • I've checked with the product team if we should add metrics to these changes.
  • I've shared relevant before and after screenshots/videos highlighting these changes with the design team and they've approved the changes.

@leofelix077 leofelix077 self-assigned this May 6, 2026
Copilot AI review requested due to automatic review settings May 6, 2026 22:06
@leofelix077 leofelix077 added the don't review yet Work in Progress / Draft PR / Code Review adjustments being worked on label May 6, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Comment thread src/components/screens/SendScreen/screens/TransactionTokenScreen.tsx Outdated
Comment thread src/config/routes.ts Outdated
Comment thread src/components/screens/SendScreen/screens/TransactionAmountScreen.tsx Outdated
Comment thread src/components/screens/SendScreen/screens/TransactionAmountScreen.tsx Outdated
Comment thread src/components/screens/SendScreen/SendSearchContacts.tsx
Comment thread src/components/TokensCollectiblesInline.tsx
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 18, 2026

iOS Simulator preview build is ready: https://github.com/stellar/freighter-mobile/releases/tag/untagged-68b5d7334bde2bf9ebd0 (SDF collaborators only — install instructions in the release description)

@leofelix077
Copy link
Copy Markdown
Collaborator Author

@CassioMG for the long list of tokens / collectibles it should be fixed now

but for the crash, I never seen it happen (nor @sdfcharles. he also tested on the device). I'm wondering what makes your address be empty / undefined to make it crash. the e2e tests were also passing

I pushed changes to safeguard the address truncation, but might need your help to take a look again. If it's not something corrupted or stale on your storage (as iOS doesn't clear all data through reinstalls). If you can test it again and let me know. thanks in advance. If it keeps happening would be good to have a dump of your local auth duck (or a slice of it) to check what kind of data and format you are having, to understand the crash better

Screenshot 2026-05-19 at 10 03 53 Screenshot 2026-05-19 at 10 03 58

@CassioMG
Copy link
Copy Markdown
Contributor

@leofelix077 FYI, I think the crash was related to my local env, after doing another fresh install it worked

@CassioMG
Copy link
Copy Markdown
Contributor

CassioMG commented May 25, 2026

@leofelix077 thanks for fixing the bug related to the long list of tokens/collectibles.

I've found a few more issues while testing:

1 - Duplicate token amount lines appearing while editing the dollar amount. This seems the same issue we've found on extension a few days ago. What appears to happen here is that the "token available balance" value which usually appears aligned on the right side (right below the dropdown) is conflicting with the "token amount to send" value which usually appears aligned on the left side. This probably only happens for big string amounts. I'd suggest applying some UI constraints here to prevent this from happening, or keep things flexible, but ensure that:

  • the "token available balance" always appear below the dropdown in all cases instead of jumping to the other side
  • the "refresh-cw-03" icon always appear right next to the "amount to send" value instead of breaking the line which results in the icon being placed on the left side of the "token available balance"
double-amount-lines-1 double-amount-lines-2

2 - It seems the keyboard doesn't always get dismissed when you tap on "Review send". This results in a bug where the user can't see or scroll the full content of the review bottom-sheet. It appears this bug is triggered when you edit something on transaction settings and then tap on "Review send" (first video). Another thing I've noticed is that once this bug is "activated" it always happens, for all tokens, not mattering if you are starting the send flow from the Home Send button or the Token Details screen (quick AQUA sample on the second video). It seems you have to switch tabs to History or Discover screen and only then go back to Home tab to "clear out" this bug otherwise you'll always see this issue on the "Review send" step.

keyboard-not-dismissed-1-720p.mov
keyboard-not-dismissed-2-720p.mov

3 - All screens with an "X" button should slide from the bottom. E.g. in the second 8 on the video below it navigates to a "X" screen which slides from the right instead of sliding from the bottom. Then when you tap the "X" button it slides down as expected so it appears we only need to fix the navigation when entering on the screen. This happens on both Send token and Send collectible flows.

x-should-slide-from-bottom.mov

4 - Some UI tweaks when comparing with Figma:

  • The bottom margin of the Headers on the addresses lists (e.g. "Suggestions", "Recents", My Wallets") seems a little tight
  • The bottom of the address list is being cut (probably safe-area related)
  • The title of the Send amount screen should be "Send" instead of "Sending". Same title copy fix needs to be applied for Collectibles.
send-screen-title bottom-is-cut-and-tight-margins

5 - When you start a "Send Collectible" flow and use the QR Scan to input the address you land on the Send token amount screen with XLM selected instead of the Send collectible review screen

qr-scan-removing-nft-720p.mov

Comment thread docs/best-practices/code-style.md
Comment thread src/components/layout/ScrollableKeyboardView.tsx
Comment thread src/i18n/locales/en/translations.json Outdated
Comment thread src/i18n/locales/pt/translations.json Outdated
(`eslint.config.mjs`) — this is a reviewer-enforced convention, not a
linter-enforced rule.

**Async event handlers**: When a component prop expects a `void`-returning
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Added this small change to code-style. as there was a misleading rule previously

the code-style tried to enforce

<Button onPress={() => void handleAsyncAction(id)} />, conflicting with the eslint rule that disables no-floating-promises

handleAsyncAction (no void and no explicit await) is a valid construct in the codebase

@leofelix077
Copy link
Copy Markdown
Collaborator Author

leofelix077 commented May 26, 2026

@CassioMG Applied the small UI tweaks to match closer the figma designs latest version, the keyboard dismiss, and fixing the navigation when scanning QR code on collectibles

regarding the first point, I'm not sure what you mean. I also left a comment on the extension PR regarding it

IMG_5446 IMG_5447 IMG_5448
ScreenRecording_05-26-2026.17-50-32_1.MP4
Screen.Recording.2026-05-26.at.18.01.51.mov
Screen.Recording.2026-05-26.at.18.02.49.mov

@leofelix077
Copy link
Copy Markdown
Collaborator Author

leofelix077 commented May 29, 2026

UI Has also been adjusted to have the total balance above the token dropdown. Thread is centralized on the extension thread stellar/freighter#2764 (comment)

e.g.

Simulator Screenshot - iPhone 17 Pro - 2026-05-28 at 13 22 28 Simulator Screenshot - iPhone 17 Pro - 2026-05-28 at 13 22 48

Comment thread src/components/screens/SendScreen/screens/TransactionAmountScreen.tsx Outdated
@CassioMG
Copy link
Copy Markdown
Contributor

CassioMG commented May 29, 2026

@leofelix077 thanks for making the last UI changes/fixes. It appears there is bug related to the Send (federation) flow where the memo type is always being reset on the SendAmount rendering. The fix seems simple but I left the AI verbose description there which I think could be helpful for the agent to get the whole context/severity of it. Could you also please double check to see if there isn't any other part broken related to the Send-federation flow? Thanks

Comment thread src/components/screens/SendScreen/components/HighlightedAmountDisplay.tsx Outdated
@CassioMG
Copy link
Copy Markdown
Contributor

@leofelix077 I'm still seeing the bug in which the keyboard doesn't get dismissed after saving a memo on settings:

ScreenRecording_05-29-2026.16-46-00_1.mov

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

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Linearize Send flow from Home screen

3 participants