mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-05-12 16:55:02 -04:00
Phase 1: Drop AIDL - Delete all 6 .aidl files (core/api/src/main/aidl/) - Strip binder object from MeshService (onBind returns null) - Simplify MeshServiceClient to lifecycle observer (no AIDL binding) - Remove meshService field from AndroidServiceRepository - Delete ServiceClient, AndroidRadioControllerImpl, FakeIMeshService, IMeshServiceContractTest Phase 2: Migrate TAK to RadioController - GenericCoTHandler: RadioController replaces CommandSender - TAKMeshIntegration: RadioController replaces CommandSender - CoreTakServerModule: DI updated Phase 3: Port remaining consumers - MeshConnectionManagerImpl: RadioController, remove time sync/passkey (SDK handles internally), wrap telemetry in coroutine - MeshConfigFlowManagerImpl: remove CommandSender dependency, use 0L for currentPacketId - RefreshLocalStatsAction: RadioController for widget telemetry - EnsureRemoteAdminSessionUseCase: serviceRepository.onServiceAction() replaces meshActionHandler Phase 4: Delete dead pipeline - Delete FromRadioPacketHandler interface + FromRadioPacketHandlerImpl - Delete MeshMessageProcessor interface + MeshMessageProcessorImpl - Delete related tests - Remove MeshMessageProcessor dep from MeshActionHandlerImpl - Keep CommandSender/MeshRouter/MeshActionHandler for DirectRadioControllerImpl (desktop target) Phase 5: SDK-backed NodeRepository - New SdkNodeRepositoryImpl: in-memory StateFlow backed by NodeManager - SDK handles persistence via its own SqlDelight storage - Deactivate Room-backed NodeRepositoryImpl (@Single removed) - NodeManagerImpl propagates myNodeNum to SdkNodeRepositoryImpl - Cold start: brief empty state until SDK emits snapshot (<1s) - Node notes: in-memory for POC (does not survive process death) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
:core:service
Overview
The :core:service module contains the abstractions and client-side logic for interacting with the main Meshtastic Android Service.
Key Components
1. ServiceClient
The main entry point for other parts of the app (or third-party apps) to bind to and interact with the mesh service via AIDL.
2. ServiceRepository
A high-level repository that wraps the service connection and exposes reactive Flows for connection status and data arrival.
3. ConnectionState
An enum representing the current state of the radio connection (Connected, Disconnected, DeviceSleep, etc.).
4. ServiceAction
Defines Intent actions for starting, stopping, and interacting with the background service.
Module dependency graph
graph TB
:core:service[service]:::kmp-library
classDef android-application fill:#CAFFBF,stroke:#000,stroke-width:2px,color:#000;
classDef android-application-compose fill:#CAFFBF,stroke:#000,stroke-width:2px,color:#000;
classDef compose-desktop-application fill:#CAFFBF,stroke:#000,stroke-width:2px,color:#000;
classDef android-feature fill:#FFD6A5,stroke:#000,stroke-width:2px,color:#000;
classDef android-library fill:#9BF6FF,stroke:#000,stroke-width:2px,color:#000;
classDef android-library-compose fill:#9BF6FF,stroke:#000,stroke-width:2px,color:#000;
classDef android-test fill:#A0C4FF,stroke:#000,stroke-width:2px,color:#000;
classDef jvm-library fill:#BDB2FF,stroke:#000,stroke-width:2px,color:#000;
classDef kmp-feature fill:#FFD6A5,stroke:#000,stroke-width:2px,color:#000;
classDef kmp-library-compose fill:#FFC1CC,stroke:#000,stroke-width:2px,color:#000;
classDef kmp-library fill:#FFC1CC,stroke:#000,stroke-width:2px,color:#000;
classDef unknown fill:#FFADAD,stroke:#000,stroke-width:2px,color:#000;