What's Changed
🏗️ Features
- feat(messaging): add IME Send action to message input by @jamesarich in #5047
- feat(metrics): redesign position log with SelectableMetricCard and add CSV export to all metrics screens by @jamesarich in #5062
- feat(core/ui): add safeLaunch, UiState, KMP permissions, and CMP lifecycle modernization by @jamesarich in #5118
- feat(desktop): add entitlements and wire MeshConnectionManager into orchestrator by @jamesarich in #5127
- feat(environment): add 1-Wire multi-thermometer (DS18B20) display support by @jamesarich in #5130
- feat: add high-contrast theme with accessible message bubbles by @jamesarich in #5135
- feat(mqtt): migrate to MQTTastic-Client-KMP by @jamesarich in #5165
- feat(mqtt): adopt mqttastic-client-kmp 0.2.0 — disconnect reasons + Test Connection by @jamesarich in #5181
🛠️ Fixes
- fix(service): resolve MeshService crash from eager notification channel init by @jamesarich in #5034
- style: update ic_no_cell and ic_place vector drawables by @jamesarich in #5040
- fix(build): prevent DataDog asset transform from stripping fdroid release assets by @jamesarich in #5044
- fix(icons): replace outline (FILL=0) pathData with filled (FILL=1) from upstream Material Symbols by @jamesarich in #5056
- fix(charts): hoist rememberVicoZoomState above vararg layers to prevent ClassCastException by @jamesarich in #5060
- fix(ui): add missing @ParameterName annotations on actual rememberReadTextFromUri declarations by @jamesarich in #5072
- fix(settings): hide Status Message config until firmware v2.8.0 by @jamesarich in #5070
- fix(transport): Kable BLE audit + thread-safety, MQTT, and logging fixes across transport layers by @jamesarich in #5071
- fix(build): remove Compose BOM to resolve compileSdk 37 conflict by @jamesarich in #5088
- fix(connections): show device name during connecting state by @jamesarich in #5085
- fix(build): add explicit compose-multiplatform-animation dependency by @jamesarich in #5095
- fix(nav): restore broken traceroute map navigation by @jamesarich in #5104
- fix(build): overhaul R8 rules and DRY up build-logic conventions by @jamesarich in #5109
- fix(proguard): disable shrinking for Compose animation classes by @jamesarich in #5116
- fix(icons): audit and correct icon migration regressions from #5030 #5040 #5056 by @jamesarich in #5136
- fix: align BLE connection handshake with firmware protocol expectations by @jamesarich in #5141
- fix(app): add R8 keep rules for Compose animation/runtime/ui by @jamesarich in #5146
- perf(messaging): batch node + reply lookups in message loading by @jamesarich in #5149
- fix(app): disable R8 optimization to fix Compose animation freeze by @jamesarich in #5150
- fix(node): don't recreate Vico CartesianChartModelProducer on channel switch by @jamesarich in #5160
- refactor: use injected ioDispatcher and ApplicationCoroutineScope by @jamesarich in #5167
- fix: redact MeshLog proto secrets and centralize Compose keep-rules by @jamesarich in #5166
- fix(ui): stable LazyColumn keys, semantic roles, and content descriptions by @jamesarich in #5168
- fix(ui): finish accessibility roles and action labels for clickable surfaces by @jamesarich in #5170
- fix(widget): drive updates via debounced state observer by @jamesarich in #5185
- fix(transport): improve BLE / TCP / USB reconnect and handshake resilience by @jamesarich in #5196
📝 Other Changes
- test(prefs): migrate DataStore tests from androidHostTest to commonTest by @jamesarich in #5092
- fix(resources): add resourcePrefix to KMP + widget modules, rename prefixed resources by @jamesarich in #5111
- fix(charts): apply Vico 3.1.0 best-practice audit fixes by @jamesarich in #5138
- refactor(di): adopt @KoinApplication with startKoin() compiler plugin API by @jamesarich in #5152
- test: migrate MigrationTest to runTest and add missing repository fakes by @jamesarich in #5171
- refactor: consolidate metric formatting through MetricFormatter by @jamesarich in #5169
- chore(r8): remove redundant keep rules covered by consumer rules by @jamesarich in #5172
- Revert "diag(r8): disable minify for release builds (animation-freeze diagnostic)" by @jamesarich in #5176
- Fix node-details remove action to preserve confirmation flow by @Copilot in #5192
Full Changelog: v2.7.14-closed.13...v2.7.14-internal.65