Skip to content

feat(profile): name a tip DM counterpart by handle - #734

Merged
bmc08gt merged 1 commit into
mainfrom
feat/profile-handle
Sep 8, 2026
Merged

feat(profile): name a tip DM counterpart by handle#734
bmc08gt merged 1 commit into
mainfrom
feat/profile-handle

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

The profile screen reached from a chat header showed a display name and a join date. Android's ProfileHeader also carries the counterpart's public @handle (node 9443:8928), so iOS was missing an identity line the other platform has had.

What changed

  • The @handle sits under the name, above the join date, in .appTextSmall / .textSecondary. Name, handle and join date group at 5pt — Android's grid.x1 — rather than the screen's uniform 16pt.
  • UserProfileViewModel now follows Android's nameOrHandle: an account that never set a display name is titled by its handle instead of the generic "Flipcash User", and the handle line then drops out so it isn't read twice. Android guards that line the same way; on iOS the guard could not have fired before, because there was no handle fallback to collide with.
  • CounterpartSeed carried an already-resolved displayName, which hid whether the counterpart had a name at all. It now carries the raw optional and the view model resolves the title. ConversationMember's proto init leaves displayName empty for a name-less account, so the handle titles the screen straight from the seed rather than after the profile fetch lands.

The avatar-to-name gap stays at the screen's existing 16pt. Android uses grid.x2 (10dp) there, but matching it would move a line that was already in place rather than fit the new one in.

The profile screen reached from a chat header showed a display name and a
join date, where Android's ProfileHeader also carries the counterpart's
public @handle (node 9443:8928). Add that line, and with it Android's
nameOrHandle rule: an account that never set a display name is titled by
its handle rather than the generic "Flipcash User", and the handle line
then drops out so it isn't read twice.

CounterpartSeed carried an already-resolved displayName, which hid
whether the counterpart had a name at all. It now carries the raw
optional and the view model resolves the title. ConversationMember's
proto init leaves displayName empty for a name-less account, so the
handle titles the screen straight from the seed rather than after the
profile fetch lands.
@bmc08gt bmc08gt self-assigned this Sep 8, 2026
@bmc08gt
bmc08gt merged commit c88b5b5 into main Sep 8, 2026
1 check passed
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