Skip to content

Repeater nicknames for Top Heard and the Apple surfaces - #36

Merged
MrAlders0n merged 11 commits into
devfrom
feat/repeater-nicknames
Oct 18, 2026
Merged

MrAlders0n merged 11 commits into
devfrom
feat/repeater-nicknames

Conversation

@MrAlders0n

@MrAlders0n MrAlders0n commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Lets users give repeaters their own short names, so Top Heard can read "Mell 12.3" instead of "5007 12.3". This closes MeshMapper/MeshMapper_Project#557 (requested by F4VSJ, who keeps a paper list of hex IDs and names in the car).

  • Top Heard overlay: the nickname replaces the hex ID, in normal and larger sizes.
  • Live Activity, CarPlay, Apple Watch, Siri: the nickname takes priority over the server name in the existing name slot. On the Live Activity it still follows "Repeater Names on Live Activity". It also names the Trace target in the session phase text ("Tracing Mell"), which was never behind that toggle.
  • Not changed: log chips, ping popups, map markers and the Shortcuts repeater catalogue stay as they are.

How matching works

  • A nickname is keyed by the repeater's full 64-hex public key. It only shows when the heard ID resolves to exactly one catalogue repeater, using the same identity-first, unique-only rule the Live Activity already used for server names.
  • An ambiguous ID (for example a 1-byte hash shared by two repeaters) keeps its hex, so a wrong name never appears.
  • That resolution now lives in one shared function, ExternalSurfaceGeoBuilder.resolveOverlayRow.
  • Only repeaters with a full key can take a nickname. This is the same gate as Manage.

Storage

  • Local to the phone, in the user_preferences Hive box under repeater_nicknames, as an untyped map. No new @HiveType and no server change.
  • Nicknames are global to the phone. They are never scoped to a zone or cleared by zone change, catalogue reload, disconnect, log clear or session end, so they are still there after leaving a region and coming back.
  • Each entry stores a snapshot of the server name and hex at save time, so the Settings list can show repeaters from other regions.
  • Pre-existing caveat: _openBoxSafely deletes the whole user_preferences box if it fails to open within 5 s. That would drop nicknames along with every other preference.

UI

  • Map pill: a small tinted tag after the repeater name. It uses the same fill, border and radius as the status-bar chips.
  • Repeater sheet: a Nickname button beside Manage, the same height and shape. It reads "Nickname" until one is set, then the nickname itself. Without a full key there is no button, and Manage keeps the full width. This was picked from rendered mockups over a header tag.
  • Edit dialog: hex badge and server name, an 8-character field with a counter, and Remove / Cancel / Save. Unchanged results are skipped.
  • Settings > Map > Repeater Nicknames: a list that reads like the paper list (hex badge, nickname, server name). It has add via the repeater picker (which only offers repeaters with a full key), edit, and remove with Undo.
  • Checked with real fonts at 320 and 360 pt: the dialog keeps Remove, Cancel and Save on one row, and the Manage hint is one full-width line under the two buttons. All new UI takes its colours from the app's colour scheme.
  • Dark mode lightens the tag text for contrast. Screen readers announce the Nickname button as "Add nickname" or "Edit nickname Mell".

Testing

  • flutter analyze: no issues.
  • flutter test: all 2490 pass, 1 skipped.
  • New tests:
    • the nickname store: normalise, sanitize, grapheme cap, damaged entries
    • labelFor and resolveOverlayRow: unique, shared hash, identity disambiguation, empty hexId
    • watch buildHeard and Siri buildRecentHeard with nicknames
    • dialog results and semantics
    • the Settings list
  • The UI was rendered to light and dark PNGs and reviewed before commit.
  • Still to check on a phone:
    • Top Heard during a drive
    • a shared 1-byte ID still showing hex
    • the Live Activity and CarPlay name slot
    • the watch heard list
    • Siri
    • persistence after relaunch and after a zone change

Wiki: MeshMapper/MeshMapper_Wiki#40

@MrAlders0n
MrAlders0n merged commit ff18ad8 into dev Oct 18, 2026
1 of 2 checks passed
@MrAlders0n
MrAlders0n deleted the feat/repeater-nicknames branch October 18, 2026 11:44
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.

[Feature]: Human readable name

1 participant