feat(you): add Change Display Name to My Account - #621
Merged
Conversation
Node 9277:121893 opens My Account with a Change Display Name row. It lands straight on the profile-setup name step, which now takes what a saved name leads to: setup carries on to the tip card, a lone edit returns to the settings list. The step reads its text from an environment-held state that setup owns at its sheet root so the photo step can read the name back; a lone edit has no following step, so it owns that state itself, seeded with the name already on the profile. Mirrors the Android row (code-android-app#1299).
bmc08gt
force-pushed
the
feat/change-display-name
branch
from
August 21, 2026 20:07
45c84fd to
3003813
Compare
bmc08gt
added a commit
that referenced
this pull request
Aug 21, 2026
* feat(you): build out the You tab's tip card The tab shipped as a card and two settings rows. This fills in the rest of the page (node 9276:4634): the copyable public link, Share and Download, and a card that expands in place — everything below it slides out, the tab bar goes with it, and the card grows about its own centre into the middle of the screen. Expansion lives on the page rather than the app-root bill overlay, so the card never leaves the tab; `Session.presentOwnTipcard` and its test go with the overlay route. Download exports the code as a real file. Both formats draw the same figure at 1024pt on the app's background: the SVG comes from the shared Kotlin renderer in `SharedCoreKit` (`KikCode.svg`), the PNG from the `CodeView` the app already draws, so exporting one and then the other gives you the same code twice. The file goes to the share sheet, which is where iOS keeps "Save to Files". Settings picked up the loose ends: Beta Features absorbed the developer-only Beta Flags screen (one screen, two sections, gated on the version easter egg) rather than keeping a second entry point that opened an empty list. * fix(you): present the export share sheet after the picker closes The download sheet handed the file to `ShareSheet` from its own tap handler, while the picker was still on screen. `ShareSheet` presents on the top-most view controller, which at that moment is the picker being dismissed — so the share sheet had a fair chance of never appearing. Holds the tapped format and exports on the sheet's `onDismiss` instead, when there is a settled controller to present on. * fix(settings): always offer the Beta Features row The row was hidden when no flag was visible, on the reasoning that it would open an empty screen. The screen has an empty state for exactly that case, so the row stays put and `hasVisibleOptions` now only decides which of the two the screen draws. * test(you): add Maestro flows for the tip card export and Beta Features Drives what the unit tests can't reach: the download picker's hand-off to the system share sheet, which is a UIKit presentation the export path gets wrong easily, and the Beta Features row's presence in Advanced. Run one with: maestro --device <udid> test .maestro/you-tab-download.yaml * test(settings): add a Maestro flow for the Beta Features empty state * feat(you): add Change Display Name to My Account (#621) Node 9277:121893 opens My Account with a Change Display Name row. It lands straight on the profile-setup name step, which now takes what a saved name leads to: setup carries on to the tip card, a lone edit returns to the settings list. The step reads its text from an environment-held state that setup owns at its sheet root so the photo step can read the name back; a lone edit has no following step, so it owns that state itself, seeded with the name already on the profile. Mirrors the Android row (code-android-app#1299). * refactor(bill): draw codes from the shared geometry CodeView carried its own copy of the ring layout, the bit packing, and the badge, all of which already exist in shared-core and now come back as CGPaths through SharedCoreKit. Deleting the copy is what keeps a code on screen, an exported PNG, an exported SVG, and Android drawing one figure rather than four that happen to agree today.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Node 9277:121893 opens My Account with a Change Display Name row; this adds it, above Blocked.
The row pushes a new
.changeDisplayNamedestination that lands straight on the profile-setup name step — the same screen the tip-card flow uses, matching the Android row, which reuses the UpdateProfile flow's name step alone.ProfileNameScreennow takes what a saved name leads to:.tipcard(setup carries on to the card, unchanged) or.back(a lone edit returns to the settings list).ProfileCreationState, which setup owns at its sheet root so the photo step can read the name back. A lone edit has no following step, soChangeDisplayNameScreenowns that state itself, seeded with the name already on the profile — the same prefill Android's name step does.Based on #618; mirrors code-payments/code-android-app#1299.