* Update Muzi R1 Neo to actively supported
* Disable Range Test module when primary channel is public/unsecured
Updated RangeTestConfig.swift to determine whether the primary channel (index 0) is operating without encryption or with a 1-byte minimal PSK.
Disabled Range Test UI controls when on a public/default channel to prevent user interaction.
Added safety enforcement in the save operation: Range Test enabled flag is automatically forced to false before sending updates to the device.
Introduced a computed property isPrimaryChannelPublic following existing code patterns and security indicators (e.g., hexDescription PSK length).
Matches the behavior implemented in the Android client for consistent policy across platforms.
---------
Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* FavoriteNodeButton: refactor task out
* AccessoryManager.connectedDeviceRole helper
* FavoriteNodeButton: show confirmation dialog when a CLIENT_BASE is trying to add a favorite
* addContactFromURL: add comment referencing upcoming change in https://github.com/meshtastic/firmware/pull/8495
* DeviceConfig: role picker: show a warning when selecting CLIENT_BASE, similar to warning shown for ROUTER
* Adjust device configuration Client Base warning text
* NodeMapContent: move Route Lines out of ForEach
* NodeMapContent: move Convex Hull out of ForEach
* NodeMapContent: Replace `position.nodePosition?` with `node`
* NodeMapContent: drop unnecessary LazyVStack in showNodeHistory
* NodeMapContent: hoist out nodeColorSwift
* Move lineCoords, loraCoords calculations within showRouteLines, showConvexHull respectively
* Hoist out repeated node.metadata?.positionFlags lookups / PositionFlags creation
* NodeMapContent: remove unused @State
* NodeMapSwiftUI: add NodeMapContentEquatableWrapper and NodeMapContentSignature to prevent frequent NodeMapContent recomputation and infinite render loops
* NodeMapSwiftUI: disable animation during SwiftUI transactions
* NodeMapContent: hoist nodeBorderColor and set allowsHitTesting(false) on history point views
* NodeMapContent: prerenderHistoryPointCircle and prerenderHistoryPointArrow to avoid thousands of vector draw operations
* NodeMapContent: Shared coordinate list for Route Lines and Convex Hull
* NodeMapContent.prerenderHistoryPointArrow: add .frame(width: 16, height: 16)
* MeshMap: change onMapCameraChange frequency to .onEnd so that zooming doesn't cause continuous SwiftUI reevaluation on every frame
* MeshMapContent: factor out reducedPrecisionMapCircles into a separate function
* MeshMapContent: when multiple reducedPrecisionCircles have the same (lat,lon,radius), just draw one (big perf boost in dense areas)
* Keep list of previous manual connections
* More descriptive manual connection rows
* Merge fixes and new way to show IP on Connect view
---------
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>