mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-10-02 00:24:34 -04:00
Root-caused via #6682/#6693: Node.hopsAway defaults to the sentinel -1
instead of null, and nothing distinguished a locally-retained node from
one the connected radio just reported this session. Together that made
a legitimately cached row (multi-radio use, or a radio with a smaller
NodeDB than the phone) render as if it were freshly heard with 0 hops,
0 SNR, 0 RSSI.
- Add Node.hopsAwayOrNull, extending the existing snrOrNull/rssiOrNull
pattern, and fix both copies of getRelayNode (the live one in
Packet.kt and the unused one in Node.kt) whose plain
minByOrNull { it.hopsAway } let the unresolved -1 sentinel look
closer than a real hop count.
- Track the current connection session's exact NodeDB membership via
NodeManager.currentSessionNodeNums, published right after each Stage
2 handshake and reconciled against the same generation-race window
already used for connectionIdentity.
- Add a "Saved on phone" badge (node list rows + detail screen) for any
node retained locally but absent from that snapshot, and stop those
rows from claiming "online" from a cached, no-longer-current
lastHeard (list rows, a11y description).
New/updated tests across core:model, core:data, core:ui, core:database
and feature:node; screenshot goldens regenerated for the new "Saved on
phone" previews. Full baseline
(spotlessApply/spotlessCheck/detekt/assembleDebug/test/allTests) and
:screenshot-tests:validateDebugScreenshotTest are green.
Fixes #6263
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>