Skip to content

Release of v1.2.1 (#17) (#18)#19

Merged
MrAlders0n merged 1 commit intomainfrom
dev
Apr 1, 2026
Merged

Release of v1.2.1 (#17) (#18)#19
MrAlders0n merged 1 commit intomainfrom
dev

Conversation

@MrAlders0n
Copy link
Copy Markdown
Contributor

    • Aligned dot marker colors with web map coverage squares. Discovery markers changed from purple to cyan, RX markers changed from blue to purple. TX (green) and Trace (cyan) were already aligned. Applies to map markers, noise floor chart, status bar chips, log screen filters, and home screen stats.
    • Aligned dot marker colors with web map coverage squares. Discovery markers changed from purple to cyan, RX markers changed from blue to purple. TX (green) and Trace (cyan) were already aligned. Applies to map markers, noise floor chart, status bar chips, log screen filters, and home screen stats.
  • Map coverage dots now draw in chronological order instead of by category. When your path crosses over itself, the most recent ping always renders on top regardless of type.
  • Reduced the thick white outline on map coverage dots to a subtle semi-transparent border, improving readability when markers cluster together. Repeater ID markers retain their original styling.
    • Fixed inconsistent audio playback on Android where notification sounds (TX/RX pings) would work reliably in some sessions but not at all in others.
    • When a zone reports TX capacity full or TX not allowed, Send Ping and Active/Hybrid mode buttons are now hidden instead of showing disabled "Zone Full" states. The Passive mode button expands to fill the full control panel width. Applies to portrait, compact, and landscape layouts.
    • Fixed an error when switching from Offline Mode back to Online Mode while connected. The app would display "Missing contact_uri or iata for registration" instead of resuming online wardriving. The mode switch now correctly re-establishes your zone before authenticating with the server. If zone detection fails (e.g., poor GPS or no internet), a clear error message is shown instead.
    • Map Marker Style: choose between four coverage marker shapes under Settings > General. Dot (default, subtle border), Outlined Dot (prominent white border), Pin (teardrop), and Diamond.
  • GPS Marker: choose your position icon on the map. Arrow (default), Car, Bike, Boat, or Walk. Arrow and Walk rotate with heading; vehicle icons stay upright.
  • Sound Notifications: now under Settings > General with independent toggles for "Ping Sent" (TX/Discovery) and "Response Received" (repeater echo/RX).
  • Fixed new pin marker

    • Fixed iOS reconnect failures when the device drops BLE bond keys mid-session (every 13-23 min on affected devices). iOS would cache stale keys and all reconnect attempts would fail, requiring a manual forget/re-pair in Settings. The app now detects the pairing error and clears the stale bond automatically before retrying
  • ⏺ TX Power Reporting: Removed radio power from the BLE mesh message ([0.3w]) and moved it to a per-ping power field in every API wardrive data post (TX, RX, DISC, TRACE). Previously, the power value embedded in the mesh broadcast fell back to 0.3W for devices not in the model database, causing incorrect wattage in the admin panel even when the user had configured the correct power. Power is now read from user preferences and sent directly to the API with each ping, ensuring accurate reporting regardless of device model recognition.

  • Fix hybrid mode fallback, discovery window timing, connection lifecycle races, and auto-ping guards

  • Hybrid mode: route blocked TX pings back to hybrid scheduler instead of active-only
  • Discovery window: increase from 5s to 7s, fix hybrid interval math
  • Add apple-code 15 to bond error detection
  • Replace session deadline timer with 15-min idle disconnect timer
  • Enable heartbeat immediately on connect, keep alive while connected
  • Add idempotency guard to _fullDisconnectCleanup() for double-call race
  • Add _disposed flag and connect() guard for controller-closed race
  • Add reconnect/connection guards to sendPing, sendTxPing, _sendDiscoveryRequest, and all auto-ping timer callbacks
  • Throttle geofence logs to 1 per 30s with suppressed count
  • Colorblind Accessibility Setting — COMPLETED

Status: Implementation complete, pending commit

Approach

Convert PingColors from static const fields to static get properties backed by a swappable palette. Add a colorVisionType user preference. All 7+ files that reference PingColors.txSuccess etc. continue to
work without call-site changes -- the getters return the active palette's colors.

CVD Types Supported

┌───────────────┬────────────────────────────────────┐
│ Setting │ Description │
├───────────────┼────────────────────────────────────┤
│ none │ Default (current colors) │
├───────────────┼────────────────────────────────────┤
│ protanopia │ Red-blind -- confuses red/green │
├───────────────┼────────────────────────────────────┤
│ deuteranopia │ Green-blind -- confuses red/green │
├───────────────┼────────────────────────────────────┤
│ tritanopia │ Blue-blind -- confuses blue/yellow │
├───────────────┼────────────────────────────────────┤
│ achromatopsia │ Total color blindness (monochrome) │
└───────────────┴────────────────────────────────────┘

Palettes (Wong 2011 colorblind-safe colors)

Normal -- current app colors unchanged.

Protanopia / Deuteranopia (both use same palette since both are red-green CVD):

  • txSuccess: #0072B2 (blue) -- replaces green
  • txFail: #D55E00 (vermillion) -- replaces red
  • txSuccessLegend: #56B4E9 (sky blue)
  • rx: #CC79A7 (reddish purple)
  • discSuccess: #56B4E9 (sky blue)
  • traceSuccess: #009E73 (bluish green)
  • signalGood/Medium/Bad: #0072B2 / #F0E442 / #D55E00
  • repeaterActive/New/Dead/Duplicate: #CC79A7 / #F0E442 / #9E9E9E / #D55E00

Tritanopia:

  • txSuccess: #009E73 (bluish green) -- green visible
  • txFail: #D55E00 (vermillion)
  • txSuccessLegend: #22C55E
  • rx: #CC79A7 (reddish purple)
  • discSuccess: #E69F00 (orange) -- replaces cyan
  • traceSuccess: #D55E00 (vermillion) -- replaces cyan
  • signalGood/Medium/Bad: #009E73 / #E69F00 / #D55E00
  • repeaterActive/New/Dead/Duplicate: #CC79A7 / #E69F00 / #9E9E9E / #D55E00

Achromatopsia:

  • txSuccess: #E0E0E0 (light) / txFail: #616161 (dark)
  • txSuccessLegend: #E0E0E0
  • rx: #9E9E9E (medium)
  • discSuccess: #BDBDBD (medium-light) / traceSuccess: #757575 (medium-dark)
  • signalGood/Medium/Bad: #E0E0E0 / #9E9E9E / #424242
  • repeaterActive/New/Dead/Duplicate: #E0E0E0 / #BDBDBD / #616161 / #424242
    • Disconnect alert: triple-beep sound when BLE drops during wardriving, so you know pings have stopped. Has its own toggle, independent from the master sound setting, so you can wardrive silently and still get alerted on disconnect
  • Updating the four repeater colors in the default palette to match the web

    • Fixed auto-ping using stale GPS positions. The position stream and ping timers run independently, so the cached position could be well behind your actual location. Auto-pings now force a fresh GPS read before each ping

* - Aligned dot marker colors with web map coverage squares. Discovery markers changed from purple to cyan, RX markers changed from blue to purple. TX (green) and Trace (cyan) were already aligned. Applies to map markers, noise floor chart, status bar chips, log screen filters, and home screen stats.

* - Aligned dot marker colors with web map coverage squares. Discovery markers changed from purple to cyan, RX markers changed from blue to purple. TX (green) and Trace (cyan) were already aligned. Applies to map markers, noise floor chart, status bar chips, log screen filters, and home screen stats.
- Map coverage dots now draw in chronological order instead of by category. When your path crosses over itself, the most recent ping always renders on top regardless of type.
- Reduced the thick white outline on map coverage dots to a subtle semi-transparent border, improving readability when markers cluster together. Repeater ID markers retain their original styling.

* - Fixed inconsistent audio playback on Android where notification sounds (TX/RX pings) would work reliably in some sessions but not at all in others.

* - When a zone reports TX capacity full or TX not allowed, Send Ping and Active/Hybrid mode buttons are now hidden instead of showing disabled "Zone Full" states. The Passive mode button expands to fill the full control panel width. Applies to portrait, compact, and landscape layouts.

* - Fixed an error when switching from Offline Mode back to Online Mode while connected.
  The app would display "Missing contact_uri or iata for registration" instead of
 resuming online wardriving. The mode switch now correctly re-establishes your zone
 before authenticating with the server. If zone detection fails (e.g., poor GPS or no
 internet), a clear error message is shown instead.

* - Map Marker Style: choose between four coverage marker shapes under Settings > General. Dot (default, subtle border), Outlined Dot (prominent white border), Pin (teardrop), and Diamond.
- GPS Marker: choose your position icon on the map. Arrow (default), Car, Bike, Boat, or Walk. Arrow and Walk rotate with heading; vehicle icons stay upright.
- Sound Notifications: now under Settings > General with independent toggles for "Ping Sent" (TX/Discovery) and "Response Received" (repeater echo/RX).

* Fixed new pin marker

* - Fixed iOS reconnect failures when the device drops BLE bond keys mid-session (every 13-23 min on affected devices). iOS would cache stale keys and all reconnect attempts would fail, requiring a manual forget/re-pair in Settings. The app now detects the pairing error and clears the stale bond automatically before retrying

* ⏺ TX Power Reporting: Removed radio power from the BLE mesh message ([0.3w]) and moved it to a per-ping power field in every API wardrive data post (TX, RX, DISC,
  TRACE). Previously, the power value embedded in the mesh broadcast fell back to 0.3W for devices not in the model database, causing incorrect wattage in the admin
  panel even when the user had configured the correct power. Power is now read from user preferences and sent directly to the API with each ping, ensuring accurate
  reporting regardless of device model recognition.

* Fix hybrid mode fallback, discovery window timing, connection lifecycle races, and auto-ping guards

- Hybrid mode: route blocked TX pings back to hybrid scheduler instead of active-only
- Discovery window: increase from 5s to 7s, fix hybrid interval math
- Add apple-code 15 to bond error detection
- Replace session deadline timer with 15-min idle disconnect timer
- Enable heartbeat immediately on connect, keep alive while connected
- Add idempotency guard to _fullDisconnectCleanup() for double-call race
- Add _disposed flag and connect() guard for controller-closed race
- Add reconnect/connection guards to sendPing, sendTxPing, _sendDiscoveryRequest, and all auto-ping timer callbacks
- Throttle geofence logs to 1 per 30s with suppressed count

* Colorblind Accessibility Setting — COMPLETED

 Status: Implementation complete, pending commit

 Approach

 Convert PingColors from static const fields to static get properties backed by a swappable palette. Add a colorVisionType user preference. All 7+ files that reference PingColors.txSuccess etc. continue to
 work without call-site changes -- the getters return the active palette's colors.

 CVD Types Supported

 ┌───────────────┬────────────────────────────────────┐
 │    Setting    │            Description             │
 ├───────────────┼────────────────────────────────────┤
 │ none          │ Default (current colors)           │
 ├───────────────┼────────────────────────────────────┤
 │ protanopia    │ Red-blind -- confuses red/green    │
 ├───────────────┼────────────────────────────────────┤
 │ deuteranopia  │ Green-blind -- confuses red/green  │
 ├───────────────┼────────────────────────────────────┤
 │ tritanopia    │ Blue-blind -- confuses blue/yellow │
 ├───────────────┼────────────────────────────────────┤
 │ achromatopsia │ Total color blindness (monochrome) │
 └───────────────┴────────────────────────────────────┘

 Palettes (Wong 2011 colorblind-safe colors)

 Normal -- current app colors unchanged.

 Protanopia / Deuteranopia (both use same palette since both are red-green CVD):
 - txSuccess: #0072B2 (blue) -- replaces green
 - txFail: #D55E00 (vermillion) -- replaces red
 - txSuccessLegend: #56B4E9 (sky blue)
 - rx: #CC79A7 (reddish purple)
 - discSuccess: #56B4E9 (sky blue)
 - traceSuccess: #009E73 (bluish green)
 - signalGood/Medium/Bad: #0072B2 / #F0E442 / #D55E00
 - repeaterActive/New/Dead/Duplicate: #CC79A7 / #F0E442 / #9E9E9E / #D55E00

 Tritanopia:
 - txSuccess: #009E73 (bluish green) -- green visible
 - txFail: #D55E00 (vermillion)
 - txSuccessLegend: #22C55E
 - rx: #CC79A7 (reddish purple)
 - discSuccess: #E69F00 (orange) -- replaces cyan
 - traceSuccess: #D55E00 (vermillion) -- replaces cyan
 - signalGood/Medium/Bad: #009E73 / #E69F00 / #D55E00
 - repeaterActive/New/Dead/Duplicate: #CC79A7 / #E69F00 / #9E9E9E / #D55E00

 Achromatopsia:
 - txSuccess: #E0E0E0 (light) / txFail: #616161 (dark)
 - txSuccessLegend: #E0E0E0
 - rx: #9E9E9E (medium)
 - discSuccess: #BDBDBD (medium-light) / traceSuccess: #757575 (medium-dark)
 - signalGood/Medium/Bad: #E0E0E0 / #9E9E9E / #424242
 - repeaterActive/New/Dead/Duplicate: #E0E0E0 / #BDBDBD / #616161 / #424242

* - Disconnect alert: triple-beep sound when BLE drops during wardriving, so you know pings have stopped. Has its own toggle, independent from the master sound setting, so you can wardrive silently and still get alerted on disconnect

* Updating the four repeater colors in the default palette to match the web

* - Fixed auto-ping using stale GPS positions. The position stream and ping timers run independently, so the cached position could be well behind your actual location. Auto-pings now force a fresh GPS read before each ping
@MrAlders0n MrAlders0n merged commit ce6f9f2 into main Apr 1, 2026
1 check passed
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