Skip to content

feat(members): set a member's emoji, and show it beside their name - #69

Merged
SiteRelEnby merged 2 commits into
mainfrom
feat/member-emoji-on-phone
Sep 2, 2026
Merged

feat(members): set a member's emoji, and show it beside their name#69
SiteRelEnby merged 2 commits into
mainfrom
feat/member-emoji-on-phone

Conversation

@SiteRelEnby

@SiteRelEnby SiteRelEnby commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

The phone could read a member's emoji but never write one, and only ever showed it as a stand-in avatar.

Two consequences: anyone who set both an emoji and an avatar picture never saw the emoji at all, since the picture replaced the only place it appeared. And there was no way to set one on Android in the first place - MemberCreate and MemberUpdate didn't carry the field, despite the server accepting it on both for a long time.

Setting it

An Emoji field in the member editor, next to Display Name, mirroring web's small emoji input.

Capped at the server's limit of 8, counted in code points rather than chars. A single emoji is often several UTF-16 units and a family sequence is seven, so a String.length cap would reject perfectly ordinary input while claiming a limit of 8.

Clearing sends an empty string, not null. The member PATCH is omit-means-unchanged and Moshi drops nulls, so a null would silently leave the old emoji in place - the field would be settable but never unsettable. That's the same trap as #68 in this batch, and the scratchpad note field already solves it the same way.

Showing it

Now matches web and the watch: the emoji sits in front of the name in the members list, the profile title, the fronting cards on Home, the switch sheet, the quick-switch chips, history rows, and the member rows inside a group.

displayNameWithEmoji is deliberately display-only. Sorting, searching and content descriptions keep displayNameOrName, because a prefix there would file the whole roster under one character, stop a name query matching, and make a screen reader announce an emoji before every name. Of the 62 places a member's name is rendered, nine are actual name displays; a diff check confirms no sort or search site changed.

Testing

:app:assemblePlayRelease, :app:assembleOpenRelease, :app:testPlayReleaseUnitTest green. Unit tests cover the emoji reaching the wire on create and update, the empty-string clear, the display property with and without an emoji, and that the plain name and initials stay emoji-free.

Device checklist:

  • Set an emoji on a member, save: it appears before their name in the list and on their profile
  • A member with an emoji and an avatar picture: avatar shows the picture, name still shows the emoji
  • A member with an emoji and no picture: the emoji stands in for the avatar, as before
  • Clear the emoji and save: it goes, and stays gone after reopening
  • Paste a long string of emoji: input stops at 8, save succeeds with no error
  • Paste a family emoji: accepted, not rejected as too long
  • Search for a member by name: still matches, and the roster is still sorted by name not emoji
  • Check Home, the switch sheet, quick-switch chips, history and a group's member list

The phone could read a member's emoji but never write one, and only showed it
as a stand-in avatar. So it was invisible to anyone who had also set an avatar
picture, and unreachable entirely unless they had gone to web to set it.

Adds an Emoji field to the member editor, next to Display Name, and threads it
through MemberCreate and MemberUpdate, which did not carry the field at all
even though the server has accepted it on both for a long time.

Input is capped at the server's 8, counted in code points rather than chars: a
single emoji is often several UTF-16 units and a family sequence is seven, so
counting chars would reject ordinary input.

Clearing sends an empty string rather than null. The member PATCH is
omit-means-unchanged and Moshi drops nulls, so a null would silently leave the
old emoji in place and the field could be set but never unset. The scratchpad
note already does the same thing for the same reason.

Display now matches web and the watch: the emoji sits in front of the name in
the members list, the profile title, the fronting cards on Home, the switch
sheet, the quick-switch chips, history rows, and the member rows inside a
group. Sorting, searching and content descriptions keep the plain name, since
a prefix there would file the roster under one character, break name search,
and make a screen reader read an emoji before every name.
@SiteRelEnby
SiteRelEnby merged commit b8bceb3 into main Sep 2, 2026
1 check passed
@SiteRelEnby
SiteRelEnby deleted the feat/member-emoji-on-phone branch September 2, 2026 00:22
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