Commit Graph

6526 Commits

Author SHA1 Message Date
James Rich
f5e2aabc00 feat: add SdkRadioControllerImpl and SdkStateBridge for SDK hard cutover
Replace the legacy AIDL-based AndroidRadioControllerImpl with an SDK-backed
implementation that delegates all operations through RadioClient:

SdkRadioControllerImpl:
- Full RadioController interface impl (~35 methods)
- Local admin ops → SDK AdminApi/TelemetryApi/RoutingApi
- Remote admin ops → raw MeshPacket via RadioClient.send()
- Registered as @Single(binds = [RadioController::class]) in Koin

SdkStateBridge:
- Bridges SDK reactive flows (connection, nodes, packets, events) into
  ServiceRepository and NodeManager for legacy UI compatibility
- Connection state mapping (SDK states → app ConnectionState enum)
- Node snapshot/added/updated/removed → NodeManager
- Inbound telemetry/position/user packets → NodeManager handlers
- Events (reboot, security warnings, drops) → notification layer

AndroidRadioControllerImpl:
- @Single annotation disabled (commented out) to prevent Koin conflict
- Class retained for reference/fallback

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-06 17:52:05 -05:00
James Rich
384746cc75 feat: enrich Android POC with SDK integration improvements
- RadioClientProvider: support BLE, TCP, and Serial transports via
  InterfaceId routing; handle MOCK/NOP gracefully
- SdkNodeListViewModel: use SDK's MeshNode model for 20+ enriched
  fields (isOnline, battery, position, signal quality, etc.)
- SdkConfigViewModel: remove Gap G workaround (_localConfigOverrides),
  add reactive channels StateFlow from SDK

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-06 17:52:05 -05:00
James Rich
dd67120b5c refactor(radio): use SDK BleTransport(address) factory (Gap F resolved)
Replace the two-step buildPeripheralForSavedAddress() + BleTransport(peripheral, address)
with the new SDK factory BleTransport(address) { autoConnectIf { true } }.

The SDK's transport-ble androidMain now exposes BleTransport(address: String,
builderAction: PeripheralBuilder.() -> Unit) directly, removing the need for
the core:ble workaround. The autoConnectIf { true } flag preserves bonded-device
behavior (avoids GATT 133 on reconnect without a fresh advertisement).

Gap F note removed from RadioClientProvider KDoc — gap is resolved in SDK.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-06 17:52:05 -05:00
James Rich
8b459881e0 feat: integrate meshtastic-sdk POC vertical slice
Wires core flows to the meshtastic-sdk (0.1.0-SNAPSHOT) while keeping the
legacy path alive. Goal: prove the SDK works with a real Android app and
surface API deficiencies.

Build:
- settings.gradle.kts: composite build inclusion for meshtastic-sdk
  (../meshtastic-sdk) with dependency substitution for all SDK artifacts
- libs.versions.toml: sdk = "0.1.0-SNAPSHOT", mavenCentral snapshots repo
- app/build.gradle.kts: sdk-core, sdk-proto, sdk-transport-ble,
  sdk-storage-sqldelight dependencies

Bootstrap:
- MeshUtilApplication: AndroidContextHolder.context set in onCreate()
  before startKoin so SqlDelightStorageProvider can locate app files
- RadioClientProvider (@Single, binds SdkClientLifecycle): mutex-serialized
  rebuildAndConnect(), strips 'x' prefix from BLE devAddr, holds
  RadioClient StateFlow
- RadioClientViewModel: exposes RadioClientProvider to UI layer

SDK ViewModels (POC quality, compile-verified):
- SdkNodeListViewModel: NodeChange.Snapshot/Added/Updated/Removed → UiNode
- SdkMessagingViewModel: sendText() via client.sendText(), incomingText
  via client.textMessages (Gap B — now fixed in SDK)
- SdkConfigViewModel: configBundle reads, setConfig/setOwner writes,
  loadChannels() via admin, Gap G workaround (local override map)
- SdkTelemetryViewModel: TelemetryApi.observe(NodeId), requestDeviceMetrics

Service lifecycle:
- SdkClientLifecycle interface in core:service (avoids reverse dep from
  service → app); RadioClientProvider implements it
- MeshService.onDestroy: calls sdkClientLifecycle.disconnect() before
  serviceJob.cancel()
- BlePeripheralFactory.kt in core:ble: public buildPeripheralForAddress()
  wrapper (Gap F workaround; proper fix needed in SDK transport-ble)

SDK gaps discovered and logged:
  Gap B - textMessages flow (FIXED in SDK feat/meshtastic-android-integration-gaps)
  Gap C - channels StateFlow (no reactive cache, only admin.listChannels())
  Gap F - BleTransport MAC string factory (requires live Peripheral today)
  Gap G - configBundle not refreshed after editSettings writes

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-06 17:52:05 -05:00
James Rich
213c380514 refactor(firmware): replace PlatformBackHandler with NavigationBackHandler (#5376)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-06 20:01:40 +00:00
github-actions[bot]
8d621bc6f4 docs: update CHANGELOG.md (#5374)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-06 14:24:26 -05:00
renovate[bot]
0b75fd4140 chore(deps): update paging to v3.5.0 (#5375)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 14:20:43 -05:00
renovate[bot]
d28d684d05 chore(deps): update compose-multiplatform to v1.11.1 (#5371)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 14:18:59 -05:00
renovate[bot]
2f2a71587d chore(deps): update androidx.camera.viewfinder:viewfinder-compose to v1.6.1 (#5370)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 14:06:21 -05:00
github-actions[bot]
78b9a942dc docs: update CHANGELOG.md (#5363)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
v2.7.14-closed.26 v2.7.14-internal.87 v2.7.14-open.8
2026-05-06 12:11:32 -05:00
renovate[bot]
f547be6cbf chore(deps): update room to v3.0.0-alpha04 (#5368)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 12:10:34 -05:00
renovate[bot]
8434b57613 chore(deps): update androidx.camera:camera-view to v1.6.1 (#5367)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 12:10:10 -05:00
James Rich
3c75510f01 fix(mqtt): harden TLS enforcement, add user CA trust, and improve error diagnostics (#5365)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-06 12:09:49 -05:00
renovate[bot]
f97900b558 chore(deps): update org.jetbrains.androidx.navigation3:navigation3-ui to v1.1.1 (#5364)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 12:07:52 -05:00
James Rich
3e55579250 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5357)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-06 12:02:01 -05:00
renovate[bot]
7db0f9a032 chore(deps): update jetbrains.lifecycle to v2.11.0-beta01 (#5359)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 11:55:26 -05:00
James Rich
086c9afbaf feat: desktop-only build isolation for Flatpak packaging (#5360)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Austin <vidplace7@gmail.com>
2026-05-06 12:43:35 -04:00
renovate[bot]
94e3901bd4 chore(deps): update compose-multiplatform to v1.11.0-rc01 (#5358)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 10:13:14 -05:00
renovate[bot]
5a303e148c chore(deps): update agp to v9.2.1 (#5361)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 10:12:58 -05:00
renovate[bot]
7021984281 chore(deps): update com.android.tools:common to v32.2.1 (#5362)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 10:12:49 -05:00
github-actions[bot]
d8ed204800 docs: update CHANGELOG.md (#5356)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
v2.7.14-closed.25 v2.7.14-open.7 v2.7.14-internal.86
2026-05-04 16:11:00 -05:00
James Rich
2de57a9e81 feat: align theme with Design Standards v1.3, remove contrast setting (#5355)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-04 16:10:06 -05:00
github-actions[bot]
1a6774d67c docs: update CHANGELOG.md (#5353)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
v2.7.14-internal.85
2026-05-04 15:03:54 -05:00
James Rich
82926fd734 feat: event firmware easter egg with ambient branding (#5354)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-04 19:37:47 +00:00
James Rich
78ff3f599c chore(ble): don't surface ui message when canceling scope (#5352) 2026-05-04 17:23:57 +00:00
github-actions[bot]
c9d633f1d3 docs: update CHANGELOG.md (#5351)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
v2.7.14-internal.84
2026-05-04 11:48:25 -05:00
James Rich
fa3437b147 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5349)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-04 11:45:11 -05:00
renovate[bot]
fca1fd8248 chore(deps): update org.meshtastic:mqtt-client to v0.3.6 (#5350)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-04 11:44:42 -05:00
github-actions[bot]
e70396f55f docs: update CHANGELOG.md (#5348)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-04 11:33:13 -05:00
Copilot
f51e046043 Add Meshtastic design standards as a skill (#5346)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-05-04 11:32:42 -05:00
James Rich
26c50258da chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5347)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-04 11:30:59 -05:00
github-actions[bot]
7d9f0e9682 docs: update CHANGELOG.md (#5345)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-03 20:16:53 -05:00
renovate[bot]
08ff14235d chore(deps): update org.meshtastic:mqtt-client to v0.3.5 (#5344)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
v2.7.14-closed.24 v2.7.14-internal.83 v2.7.14-open.6
2026-05-04 00:23:57 +00:00
github-actions[bot]
744dab07fc docs: update CHANGELOG.md (#5342)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
v2.7.14-open.5 v2.7.14-internal.82 v2.7.14-closed.23
2026-05-03 15:20:36 -05:00
renovate[bot]
82562f8028 chore(deps): update org.meshtastic:mqtt-client to v0.3.4 (#5343)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-03 15:18:31 -05:00
renovate[bot]
94540aabb1 chore(deps): update vico to v3.2.0-next.3 (#5341)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-03 15:17:55 -05:00
James Rich
f1423e4ee2 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5339)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-03 14:51:57 -05:00
github-actions[bot]
1b8b94d4db docs: update CHANGELOG.md (#5336)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
v2.7.14-internal.81 v2.7.14-open.4 v2.7.14-closed.22
2026-05-02 14:38:20 -05:00
James Rich
1c984d54f4 chore: Integrate MQTT logging with Kermit and enhance PII sanitization (#5338) 2026-05-02 18:53:19 +00:00
renovate[bot]
61af98e966 chore(deps): update org.meshtastic:mqtt-client to v0.3.3 (#5337)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-02 13:22:08 -05:00
James Rich
9e396cdecc chore: optimize AI agent context and implement CI cost controls (#5335)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-05-02 13:19:11 -05:00
github-actions[bot]
92b8f0ddf5 docs: update CHANGELOG.md (#5334)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-02 10:31:36 -05:00
renovate[bot]
519b9633a1 chore(deps): update org.meshtastic:mqtt-client to v0.3.2 (#5331)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
v2.7.14-closed.21 v2.7.14-internal.80
2026-05-02 10:16:07 -05:00
github-actions[bot]
20cc302bb3 docs: update CHANGELOG.md (#5332)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-02 10:14:15 -05:00
James Rich
c0b0b9edd4 fix(network): resolve empty MQTT address and enforce TLS on default server (#5333)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-02 14:59:44 +00:00
James Rich
5a95201b4e fix(connections): improve BLE scan reliability and UI lifecycle (#5329) 2026-05-02 14:25:40 +00:00
github-actions[bot]
7263dc1f73 docs: update CHANGELOG.md (#5328)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-02 06:31:03 -05:00
Andrew Smith
2914bc6ff6 Change default ContrastLevel from STANDARD to MEDIUM (#5325)
Co-authored-by: James Rich <james.a.rich@gmail.com>
2026-05-02 06:29:47 -05:00
github-actions[bot]
a6b524d4c1 docs: update CHANGELOG.md (#5324)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-01 21:22:56 -05:00
renovate[bot]
770fe3f626 chore(deps): update aboutlibraries to v14.1.0 (#5322)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-02 02:02:39 +00:00