mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-04-20 22:23:37 +00:00
feat: Complete ViewModel extraction and update documentation (#4817)
This commit is contained in:
parent
80cae8e620
commit
6e81ceec91
65 changed files with 952 additions and 633 deletions
|
|
@ -1,6 +1,6 @@
|
|||
# KMP Migration Status
|
||||
|
||||
> Last updated: 2026-03-13
|
||||
> Last updated: 2026-03-16
|
||||
|
||||
Single source of truth for Kotlin Multiplatform migration progress. For the forward-looking roadmap, see [`roadmap.md`](./roadmap.md). For completed decision records, see [`decisions/`](./decisions/).
|
||||
|
||||
|
|
@ -93,10 +93,9 @@ Working Compose Desktop application with:
|
|||
|
||||
Based on the latest codebase investigation, the following steps are proposed to complete the multi-target and iOS-readiness migrations:
|
||||
|
||||
1. **Extract remaining App-Only ViewModels:** Migrate the 5 remaining `Android*ViewModel`s by isolating their Android-specific dependencies (e.g., `android.net.Uri` for file I/O, Location permissions) behind expect/actual or injected interface abstractions.
|
||||
2. **Wire Desktop Features:** Complete desktop UI wiring for `feature:intro` and implement a shared fallback for `feature:map` (which is currently a placeholder on desktop).
|
||||
3. **Decouple Firmware DFU:** `feature:firmware` relies on Android-only DFU libraries. Evaluate wrapping this in a shared KMP interface or extracting it into a separate plugin to allow the core `feature:firmware` module to be fully utilized on desktop/iOS.
|
||||
4. **Prepare for iOS Target:** Set up an initial skeleton Xcode project to start validating `commonMain` compilation on Kotlin/Native (iOS).
|
||||
1. **Wire Desktop Features:** Complete desktop UI wiring for `feature:intro` and implement a shared fallback for `feature:map` (which is currently a placeholder on desktop).
|
||||
2. **Decouple Firmware DFU:** `feature:firmware` relies on Android-only DFU libraries. Evaluate wrapping this in a shared KMP interface or extracting it into a separate plugin to allow the core `feature:firmware` module to be fully utilized on desktop/iOS.
|
||||
3. **Prepare for iOS Target:** Set up an initial skeleton Xcode project to start validating `commonMain` compilation on Kotlin/Native (iOS).
|
||||
|
||||
## Key Architecture Decisions
|
||||
|
||||
|
|
@ -123,17 +122,14 @@ Based on the latest codebase investigation, the following steps are proposed to
|
|||
|
||||
## Remaining App-Only ViewModels
|
||||
|
||||
Only ViewModels with **genuine Android-specific logic** retain wrappers:
|
||||
|
||||
| ViewModel | Android-Specific Reason |
|
||||
|---|---|
|
||||
| `AndroidSettingsViewModel` | File I/O via `android.net.Uri` |
|
||||
| `AndroidRadioConfigViewModel` | Location permissions, file I/O |
|
||||
| `AndroidDebugViewModel` | `Locale`-aware hex formatting |
|
||||
| `AndroidMetricsViewModel` | CSV export via `android.net.Uri` |
|
||||
| `UIViewModel` | Deep links via `android.net.Uri`, `IMeshService` |
|
||||
All major ViewModels have now been extracted to `commonMain` and no longer rely on Android-specific subclasses. Platform-specific dependencies (like `android.net.Uri` or Location permissions) have been successfully isolated behind injected `core:repository` interfaces (e.g., `FileService`, `LocationService`).
|
||||
|
||||
Extracted to shared `commonMain` (no longer app-only):
|
||||
- `SettingsViewModel` → `feature:settings/commonMain`
|
||||
- `RadioConfigViewModel` → `feature:settings/commonMain`
|
||||
- `DebugViewModel` → `feature:settings/commonMain`
|
||||
- `MetricsViewModel` → `feature:node/commonMain`
|
||||
- `UIViewModel` → `core:ui/commonMain`
|
||||
- `ChannelViewModel` → `feature:settings/commonMain`
|
||||
- `NodeMapViewModel` → `feature:map/commonMain`
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Roadmap
|
||||
|
||||
> Last updated: 2026-03-12
|
||||
> Last updated: 2026-03-16
|
||||
|
||||
Forward-looking priorities for the Meshtastic KMP multi-target effort. For current state, see [`kmp-status.md`](./kmp-status.md). For the full gap analysis, see [`decisions/architecture-review-2026-03.md`](./decisions/architecture-review-2026-03.md).
|
||||
|
||||
|
|
@ -85,10 +85,13 @@ These items address structural gaps identified in the March 2026 architecture re
|
|||
|
||||
## Medium-Term Priorities (60 days)
|
||||
|
||||
1. **App module thinning** — 63 files remaining (down from 90). Extracted ChannelViewModel, NodeMapViewModel, NodeContextMenu, EmptyDetailPlaceholder to shared modules. Remaining: extract service/worker/radio files from `app` to `core:service/androidMain` and `core:network/androidMain`
|
||||
1. **App module thinning** — Extracted ChannelViewModel, NodeMapViewModel, NodeContextMenu, EmptyDetailPlaceholder to shared modules.
|
||||
- ✅ **Done:** Extracted remaining 5 ViewModels: `SettingsViewModel`, `RadioConfigViewModel`, `DebugViewModel`, `MetricsViewModel`, `UIViewModel` to shared KMP modules.
|
||||
- **Next:** Extract service/worker/radio files from `app` to `core:service/androidMain` and `core:network/androidMain`.
|
||||
2. **Serial/USB transport** — direct radio connection on Desktop via jSerialComm
|
||||
3. **MQTT transport** — cloud relay operation (KMP, benefits all targets)
|
||||
4. **Desktop ViewModel auto-wiring** — ✅ Done: ensured Koin K2 Compiler Plugin generates ViewModel modules for JVM target; eliminated manual wiring in `DesktopKoinModule`
|
||||
4. **Evaluate KMP-native mocking** — Evaluate `mockative` or similar to replace `mockk` in `commonMain` of `core:testing` for iOS readiness.
|
||||
5. **Desktop ViewModel auto-wiring** — ✅ Done: ensured Koin K2 Compiler Plugin generates ViewModel modules for JVM target; eliminated manual wiring in `DesktopKoinModule`
|
||||
5. **KMP charting** — ✅ Done: Vico charts migrated to `feature:node/commonMain` using KMP artifacts; desktop wires them directly
|
||||
6. **Navigation contract extraction** — ✅ Done: shared `TopLevelDestination` enum in `core:navigation`; icon mapping in `core:ui`; parity tests in place. Both shells derive from the same source of truth.
|
||||
7. **Dependency stabilization** — track stable releases for CMP, Koin, Lifecycle, Nav3
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue