mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-10-09 12:01:29 -04:00
Third adversarial review pass over the client side. Rect reassembly moves out of DisplayMirrorManagerImpl into MirrorRectCompositor: the manager was carrying two unrelated state machines and 14 methods. Every rect field is now validated before anything is allocated (total_size is device-controlled), geometry is latched from the chunk at offset 0 so a later chunk cannot transpose the blit, continuations must match the buffer that was actually allocated rather than their own claim, and bounds use the subtraction form because rect_x + rect_width overflows for hostile values. A rect that omits width or height covers the full panel in that axis. remoteKeyInput no longer swallows modified keys, so Cmd+Q, Ctrl+C and Alt+Tab stay with the desktop instead of being forwarded to the device. MirrorFrameRenderer tracks colorized runs as a raw Int with a sentinel rather than a boxed Color?, and MirrorFrame.hashCode includes the format so a mono and an RGB565 frame of the same size cannot collide. Drops mirror_view_only, orphaned since MUI gained remote input. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
: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;