- New MapLayerType.mapyOutdoor with Referer header support
(tile server rejects requests without mapy.com Referer)
- Headered layers get a dedicated NetworkTileProvider sharing
the offline tile cache
- Offline region downloads pass layer headers through
TileDownloadService
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- i18n: translate connection screen + chat tab keys into 13 locales;
add "Send my contact" (advert) strings in all locales
- feat: move self-advert from home header into composer "+" action menu
(new lib/utils/advert_helper.dart, always shows Flood/Direct sheet)
- fix: hide-repeaters map toggle was bypassed in simple mode
- fix: simple mode map now shows only favourite chat contacts
- fix: wrap ListTiles in Material (contact_tile secondary actions,
inferred contact group card) to satisfy Flutter ink assertions
- device-authoritative contact/channel sync and UX review fixes
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Tapping signal/battery in header now also shows device's own telemetry
(temperature, humidity, pressure, GPS) when available. Triggers a self
telemetry request on sheet open. Data comes from the device contact's
telemetry field.
Tapping the signal bars or battery indicator in the header now shows
a bottom sheet with device details: BLE signal (dBm), battery %,
voltage, storage usage, firmware version, frequency, and TX power.
Fixes#22 (partial — device telemetry display)
For contacts without GPS, estimate their position by:
1. Finding the first-hop repeater from their routing path
2. Estimating distance from RSSI using log-distance path loss model
3. Placing them at a deterministic offset from the repeater
Uses LoRa outdoor path loss exponent (n=3.0) with reference RSSI
-30dBm at 1m. Distance clamped to 10m-50km range. Bearing derived
from contact public key hash for stable positioning.
Replace hardcoded English strings in 32 Dart source files with l10n
references. Covers settings labels, UI actions, map/SAR features,
device config, notifications, profiles, spectrum scan, and status
messages for sl, de, hr, pl, es, fr, it, el, ru, tr, uk, zh, pt.
- Contact.isFavourite reads bit 0 of firmware flags field
- Toggle favourite via contact action sheet (writes to device)
- Favourites section shown first in contacts tab
- Path size options corrected to [1, 2, 3] bytes