Commit Graph

103 Commits

Author SHA1 Message Date
James Rich
57eaa3c22d feat(discovery): add Apple parity fixes - infrastructure tracking, session recovery, default key guard
- Track infrastructure nodes (ROUTER, ROUTER_LATE, CLIENT_BASE roles)
  in DiscoveredNodeEntity and DiscoveryPresetResultEntity
- Add markInterruptedSessions() DAO query for cold-start recovery
- Add usesDefaultKey StateFlow to DiscoveryViewModel that checks
  primary channel PSK and disables scan when using default/cleartext key
- Wire default key guard into ScanButton with accessibility description
- Add discovery_start_scan_reason_default_key string resource
- Update all test DAO fakes with KMP-compatible implementations

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-20 17:10:21 -05:00
James Rich
f6bfefd439 feat(discovery): wire Gemini Nano via ML Kit GenAI Prompt API
Replace the stub GeminiNanoSummaryProvider with a real implementation
that uses com.google.mlkit:genai-prompt:1.0.0-beta2 for on-device
AI-powered scan summaries on supported Android hardware.

Implementation:
- Generation.getClient() to obtain the GenerativeModel
- generateContentRequest with TextPart for structured prompts
- Temperature 0.3, topK 16, maxOutputTokens 200 for concise output
- Graceful fallback to DiscoverySummaryGenerator on any failure
- Lazy model initialization with error logging via Kermit

The existing buildSessionPrompt() and buildPresetPrompt() methods in
DiscoverySummaryGenerator provide the prompt text. On unsupported
devices or fdroid builds, the provider falls through to the
deterministic algorithmic summary seamlessly.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-20 17:10:21 -05:00
James Rich
2d1fc984bb [Spec Kit] Implementation progress: D044 accessibility polish
- Added semantics annotations for screen readers
- Added progress announcements for dwell indicator
- Added disabled-preset explanations
- Migrated string resources to strings.xml
- Added DiscoveryMigrationTest for string resource migration
- Marked D000, D011, D044 as complete in tasks.md
2026-05-20 17:09:29 -05:00
James Rich
d6f44f2d0b fix(discovery): resolve all detekt and lint issues across discovery modules (D048)
- Fix copyright headers (2025-2026 → 2026) in ~30 files across feature/discovery, core/database, core/repository, core/data, core/prefs
- Fix detekt compose issues: add modifier params to all public composable functions, fix parameter ordering in PresetResultCard, rename onMinutesSelected → onMinuteSelect (past tense), suppress LongMethod for DiscoverySummaryContent
- Fix detekt suppressions: CompositionLocalAllowlist in LocalDiscoveryMapProvider, MagicNumber/ReturnCount in DeepLinkRouter.routeSettings
- Mark D048 complete in tasks.md
All verification passes: spotlessCheck ✓, detekt ✓, tests ✓, kmpSmokeCompile ✓
2026-05-20 17:09:29 -05:00
James Rich
d1c50336e7 test(discovery): add DAO, packet collection, history, and deep-link tests (D010, D023, D042) 2026-05-20 17:09:08 -05:00
James Rich
0907e63445 feat(discovery): improve scan metrics, node enrichment, and configuration restoration
- Implement distance tracking using `latLongToMeter` and a new `getMaxDistance` DAO query
- Calculate Airtime Rate as a delta over time to align with telemetry specifications
- Capture and restore the full `LoRaConfig` instead of just the modem preset after a scan
- Persist local radio statistics (Tx/Rx counts, uptime, relay stats) in preset results
- Backfill missing node names and positions from the local NodeDB during discovery
- Refactor `DiscoveryScanEngine` to use injected `CoroutineDispatchers` and `ApplicationCoroutineScope`
- Reduce BLE connection priority request delay in `BleRadioTransport` to 1 second
- Improve test reliability by replacing fixed `Thread.sleep` calls with state-based polling and `delay`
2026-05-20 17:08:46 -05:00
James Rich
a960f9ac2d Add Local Mesh Discovery feature
* Introduce a new `:feature:discovery` module for scanning mesh topology across multiple LoRa presets
* Add `DiscoveryScanEngine` to manage scan lifecycles, preset shifting, and packet collection
* Update database schema to version 39 with tables for discovery sessions, preset results, and discovered nodes
* Implement UI screens for scan configuration, real-time progress, and historical session management
* Add flavor-specific discovery maps (Google Maps and OSM) for visualizing node positions and topology
* Include algorithmic and AI-powered summary generation for analyzing LoRa preset performance
* Add report export functionality for Text and PDF formats
* Integrate discovery entry point into the settings screen and navigation graphs
2026-05-20 17:08:09 -05:00
James Rich
01d32e15c0 fix(database): update @Relation annotations for Room 3.0.0-alpha05 (#5507)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-19 14:36:47 -05:00
James Rich
fc0df1a79a feat(docs): In-app documentation browser with Jekyll site and Docusaurus sync (#5445)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-19 04:00:22 +00:00
James Rich
057d5bb778 fix(database): make withDb retry logic resilient to varying close messages (#5474)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-18 11:24:09 +00:00
James Rich
10c5b5db2e feat(api): add hasAnyEntries method to local data sources and improve… (#5406) 2026-05-11 19:34:41 -05:00
James Rich
95c3bc0bce Brownfield gap remediation: 28 tasks + intro commonMain migration (#5401)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-11 20:10:23 +00:00
James Rich
2822290908 refactor(build): build-logic cleanup, CC safety, and detekt 2.0 upgrade (#5311) 2026-05-01 02:48:37 +00:00
James Rich
bbb7f8b23f fix(crashlytics): resolve beta 2.7.14 crash issues (#5245)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-25 19:23:21 +00:00
James Rich
228d872f9d feat(connections): unified device list, ACCESS_LOCAL_NETWORK, transport filter chips (#5219)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-22 19:34:22 +00:00
James Rich
9f3fe865e3 test: migrate MigrationTest to runTest and add missing repository fakes (#5171)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 16:35:41 +00:00
James Rich
17e69c6d4c chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
James Rich
878905aea3 perf(messaging): batch node + reply lookups in message loading (#5149)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-15 15:48:26 +00:00
James Rich
72b981f73b chore: KMP audit — commonize code, centralize utilities, eliminate dead abstractions (#5133)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-15 02:17:50 +00:00
James Rich
9acdf5309f refactor: modern APIs — Koin 4.2, CMP 1.11, Ktor resilience, Room @Upsert, injected dispatchers (#5119) 2026-04-14 11:41:01 +00:00
James Rich
9c8532f80d refactor: leverage new dependency features from recent updates (#5057) 2026-04-10 22:51:08 +00:00
James Rich
02f6fd67b8 fix: clean up flaky, duplicated, and misplaced tests; remove redundant deps (#5048) 2026-04-10 19:46:45 +00:00
James Rich
60cc2f4237 fix: resolve bugs across connection, PKI, admin, packet flow, and stability subsystems (#5011) 2026-04-09 13:20:06 +00:00
James Rich
b3be9e2c38 fix: improve PKI message routing and resolve database migration racecondition (#4996) 2026-04-05 00:37:20 +00:00
James Rich
6af3ad6f0c refactor(service): harden KMP service layer — database init, connection reliability, handler decomposition (#4992) 2026-04-04 18:07:44 +00:00
James Rich
51251ab16a feat(ci): shard test suite and enable JUnit 5 parallel execution (#4977) 2026-04-03 13:08:49 +00:00
James Rich
464a12b9f7 chore: standardize resources and update documentation for Navigation 3 (#4961) 2026-03-31 21:25:37 +00:00
James Rich
a005231d94 Refactor map layer management and navigation infrastructure (#4921)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
2026-03-26 00:29:24 +00:00
James Rich
664ebf218e refactor: null safety, update date/time libraries, and migrate tests (#4900)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
2026-03-23 23:17:50 +00:00
James Rich
d136b162a4 feat: Implement iOS support and unify Compose Multiplatform infrastructure (#4876) 2026-03-21 23:19:13 +00:00
James Rich
88d11aafec fix: Update messaging feature with contact item keys and MQTT limits (#4871) 2026-03-21 14:25:23 +00:00
James Rich
c4087c2ab7 feat: Migrate to Room 3.0 and update related documentation and tracks (#4865) 2026-03-20 21:40:08 +00:00
James Rich
dcbbc0823b feat: Integrate Mokkery and Turbine into KMP testing framework (#4845) 2026-03-18 18:33:37 -05:00
James Rich
ac6bb5479b feat: introduce Desktop target and expand Kotlin Multiplatform (KMP) architecture (#4761)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
2026-03-12 21:14:49 +00:00
James Rich
d076361c55 refactor: migrate core UI and features to KMP, adopt Navigation 3 (#4750)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
2026-03-10 17:29:47 +00:00
James Rich
875cf1cff2 refactor: migrate from Hilt to Koin and expand KMP common modules (#4746)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
2026-03-10 01:19:46 +00:00
James Rich
b9b68d2779 refactor: migrate preferences to DataStore and decouple core:domain for KMP (#4731) 2026-03-05 20:37:35 -06:00
James Rich
b0258d0cf1 feat: Add "Mark all as read" and unread message count indicators (#4720) 2026-03-05 18:18:34 +00:00
James Rich
6a858acb4a refactor: migrate :core:database to Room Kotlin Multiplatform (#4702) 2026-03-03 20:44:34 -06:00
James Rich
2c49db8041 feat/decoupling (#4685)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
2026-03-03 13:15:28 +00:00
James Rich
8c6bd8ab7a feat: settings rework part 2, domain and usecase abstraction, tests (#4680)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
2026-03-02 18:15:33 +00:00
James Rich
fdd07f893f feat: settings rework (#4678)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
2026-03-02 14:51:05 +00:00
James Rich
b2b21e10e2 feat: upcoming support for tak and trafficmanagement configs, device hw (#4671)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
2026-02-27 17:44:19 +00:00
James Rich
d408964f07 refactor: KMP Migration, Messaging Modularization, and Handshake Robustness (#4631)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
2026-02-24 12:37:33 +00:00
James Rich
2676a51647 refactor(ui): compose resources, domain layer (#4628)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
2026-02-23 03:39:50 +00:00
James Rich
ac5a1714e0 Merge pull request #4602
* refactor(test): Introduce MeshTestApplication for robust testing
2026-02-20 11:25:11 -06:00
James Rich
6bfa5b5f70 refactor(ble): Centralize BLE logic into a core module (#4550)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
2026-02-20 12:41:52 +00:00
James Rich
c690ddc7ea feat: Accurately display outgoing diagnostic packets (#4569)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
2026-02-16 22:09:21 +00:00
James Rich
c845f9222c feat(db): enhance public key conflict handling (#4555)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
2026-02-14 13:47:59 +00:00
James Rich
5ca2ab4695 refactor(time): Centralize time handling with kotlinx-datetime (#4545)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
2026-02-14 02:01:07 +00:00