mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-09-19 02:04:31 -04:00
The Debug Panel is the one Settings route deliberately exempt from the `connected && !isManaged` gate every sibling carries, justified by a comment saying it "reads app-local logs only". The Mirror tab put an admin write (set_display_mirror) and arbitrary input injection on that route, so managed mode - which exists to lock a device out of configuration - was bypassed entirely. Enforced in the ViewModel, because the route will not do it: arming, one-shot frame requests, key, character and touch sends are all refused while managed. Disarming still goes through, so a stream already running is torn down when managed mode arrives mid-session. The UI gates on `active = connected && !managed` rather than offering controls that silently do nothing, and the RadioConfig comment now says what the route actually guarantees, since its old wording is what let this through. MirrorHeaderRow is split out of DisplayMirrorContent, which was at detekt's LongMethod limit and could not absorb another line.
:feature:settings
Overview
The :feature:settings module manages all application and radio-side configurations. This includes user preferences, channel configuration, and advanced radio settings.
Key Components
1. SettingsScreen
The main entry point for application-wide settings.
2. RadioConfigViewModel
Handles the complex logic of reading and writing configuration to the Meshtastic device over the radio link (BLE, USB, or TCP).
3. AboutScreen
Displays what Meshtastic is, a "Need Hardware?" row, version information, and project links.
4. AcknowledgementsScreen
Displays the open-source libraries the app is built on, with their licenses.
Validation Reference
- See settings-validation.md for detailed radio/module settings validation rules used by this module.
Features
- Channel Configuration: Manage encryption keys, channel names, and radio frequency settings.
- Node Database Management: Options to clear or prune the local and remote node databases.
- App Preferences: Theme selection, unit system (metric/imperial), and notification settings.
Dependency Graph
graph TB
:feature:settings[settings]:::kmp-feature
:feature:settings -.-> :core:barcode
:feature:settings -.-> :core:nfc
:feature:settings -.-> :core:common
:feature:settings -.-> :core:data
:feature:settings -.-> :core:database
:feature:settings -.-> :core:datastore
:feature:settings -.-> :core:domain
:feature:settings -.-> :core:model
:feature:settings -.-> :core:navigation
:feature:settings -.-> :core:network
:feature:settings -.-> :core:repository
:feature:settings -.-> :core:service
:feature:settings -.-> :core:resources
:feature:settings -.-> :core:ui
:feature:settings -.-> :core:di
:feature:settings -.-> :core:takserver
:feature:settings -.-> :core:testing
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;