Skip to content

Top Heard: repeater names and a longer list - #39

Merged
MrAlders0n merged 8 commits into
devfrom
feat/top-heard-names-rows
Oct 19, 2026
Merged

MrAlders0n merged 8 commits into
devfrom
feat/top-heard-names-rows

Conversation

@MrAlders0n

@MrAlders0n MrAlders0n commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Two Discord requests that followed the repeater nicknames (#36):

  • Repeater names in Top Heard (aigars.lv, Raven). A row with no nickname can show the repeater's server name instead of its hex ID. Before this, only the Live Activity, CarPlay, watch and Siri showed names, so Android users and the in-app box never did.
  • A longer Top Heard list (louie). The in-app box can show 3 to 8 rows.

What changed

  • Settings > Map > Markers. The settings are renamed to match the box's own "Top Heard" header. The three sub-settings only appear while Top Heard on Map is on.

    Setting Notes
    Top Heard on Map was "Top Repeaters on Map"
    Top Heard Rows new; picker for 3 to 8 rows, default 3
    Repeater Names in Top Heard new switch, off by default
    Larger Top Heard Overlay was "Larger Top 3 Overlay"
    Repeater Nicknames unchanged
  • Label order. Nickname, then server name (when the switch is on), then hex.

    • Server names are cut to 8 characters plus "…", the same cap as nicknames ("SE-JKP-N…", "Capitol…").
    • Whitespace runs and newlines are collapsed, and zero-width characters are stripped, before counting.
    • Long names that share a prefix, like louie's SE-JKP-…, are what nicknames are for.
  • When the hex stays. The existing unique-match rule still applies: an ID that matches more than one repeater keeps its hex. So do Unknown names, names flagged hidden (🚫), and names that are blank or only invisible characters.

  • Row count is for the in-app box only.

    • The stored list now holds up to 8 rows, so changing the setting redraws at once without waiting for a ping.
    • The Live Activity, Dynamic Island, CarPlay and Apple Watch still take the first 3 ping rows plus RX.
  • Watch payload guard. ExternalSurfaceGeoBuilder.buildHeard now trims ping rows to make room for the RX row instead of cutting RX off at the 4-row wire cap. The provider already passes only 3 rows; this is a backstop.

  • "HEARD NOW n" fix. An RX repeater was counted twice when the ping had also heard it but ranked it below the 3 rows the Live Activity shows. Example: the ping hears 5, the RX repeater is the 4th of them, and the card read 6. The app now keeps the full set of repeaters the ping heard, so the RX repeater adds 1 only when the ping didn't hear it. This was a pre-existing bug, and fixing it needed the longer stored list.

  • No changes to the server, Swift code or wire format.

  • Preferences. Two JSON preference fields, topHeardRows and topHeardShowNames. Bad stored values fall back to the defaults, and older stored preferences load with the defaults.

  • Docs. DEVELOPMENT.md and docs/LIVE_ACTIVITIES.md are updated.

Testing

  • flutter analyze: no issues.
  • flutter test: all 2536 pass, 1 skipped (as before).
  • New tests:
    • shortenServerName: the 8-character cut, the trailing-space trim, emoji not split, whitespace and zero-width cleanup, and blank or format-only names returning null.
    • labelFor with useServerName: nickname first, server name otherwise, Unknown and hidden keep the hex, shared IDs keep the hex, and the switch off behaves as before.
    • UserPreferences: defaults, JSON round trip, copyWith, and out-of-range row values clamped or defaulted.
    • Watch buildHeard keeps the RX row when fed more than 3 ping rows.
    • Live Activity "HEARD NOW" counts an RX repeater once when the ping heard it below the shown rows.
  • Still to check on a phone:
    • Top Heard Rows at 8 in landscape with Larger Top Heard Overlay on. The box has no height limit, and by layout arithmetic it may run under the bottom-left landscape control panel, hiding the last rows (the RX row first). If it does, the follow-up is to fit the rows to the space above the panel and keep RX pinned.
    • Names on a drive, with a shared 1-byte ID still showing hex.
    • Live Activity and watch still at 3 rows plus RX with the setting at 8.

Formatting: only lines this PR added were formatted. The repo-wide dart format drift on dev is untouched.

@MrAlders0n
MrAlders0n merged commit 5e066af into dev Oct 19, 2026
1 of 2 checks passed
@MrAlders0n
MrAlders0n deleted the feat/top-heard-names-rows branch October 19, 2026 10:56
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