polish(nav): tidy parseLatLon precision + ping-menu edge cases

- geo::parseLatLon now rounds lat/lon in double (matching the Add-by-coords
  form) instead of through a float cast that lost ~1 m near 1e8.
- NearbyScreen: preserve the ping menu's selected row across a rebuild
  instead of snapping back to "Send" when a result line arrives.
- NearbyScreen: guard the ping-menu input path so a vanished contact
  (selectedStoredPubKey == false) closes the popup rather than acting on an
  uninitialised pub-key buffer.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Jakub
2026-06-04 15:46:57 +02:00
co-authored by Claude Opus 4.8
parent 475e3b2c84
commit c4cea53a40
2 changed files with 7 additions and 4 deletions
@@ -182,11 +182,13 @@ class NearbyScreen : public UIScreen {
}
void rebuildPingMenu() {
int keep = _ping_menu._sel; // preserve selection across a rebuild
_ping_menu.begin("Ping", 4);
_ping_menu.addItem("Send");
if (_ping_time_str[0]) _ping_menu.addItem(_ping_time_str);
if (_ping_snr_out_str[0]) _ping_menu.addItem(_ping_snr_out_str);
if (_ping_snr_back_str[0]) _ping_menu.addItem(_ping_snr_back_str);
if (keep > 0 && keep < _ping_menu._count) _ping_menu._sel = keep;
}
void openPingMenu() { rebuildPingMenu(); }
@@ -684,8 +686,9 @@ public:
// Ping popup (opened from Options) consumes input while active.
if (_ping_menu.active) {
uint8_t pk[PUB_KEY_SIZE]; selectedStoredPubKey(pk);
handlePingMenuInput(c, pk);
uint8_t pk[PUB_KEY_SIZE];
if (selectedStoredPubKey(pk)) handlePingMenuInput(c, pk); // guard: never send to a stale/garbage key
else closePingMenu();
return true;
}