Package-level declarations
Types
A global manager for displaying alerts across the application. This allows ViewModels to trigger alerts without direct dependencies on UI components.
Filtered ADD-mode preview: the visible channel list paired with its default selections (always size-matched).
Platform-neutral representation of a discovered node for map rendering. Contains only the data needed to place and style a marker — no Room entities or platform types leak into the map provider API.
Neighbor type classification for discovery map markers.
Interface for providing a flavored MapView. This allows the map feature to be decoupled from specific map implementations (Google Maps vs OSMDroid). Platform implementations create their own ViewModel via Koin.
The UX-relevant state of a runtime permission, as recommended by the Android permissions guidance (https://developer.android.com/training/permissions/requesting). Declared in lifecycle order.
A reactive snapshot of a runtime permission plus the actions a caller can take. Produced by the rememberXxxPermissionState() composables and recomputed on ON_RESUME so it stays fresh when the user returns from a permission dialog or the system settings screen.
A global manager for displaying snackbars across the application. This allows ViewModels to trigger transient feedback messages without direct dependencies on UI components or SnackbarHostState.
Properties
Provides an embeddable discovery map composable that renders discovered node markers and topology polylines for a Local Mesh Discovery scan session. Unlike LocalMapViewProvider, this does not include node clustering, waypoints, location tracking, or any main-map features — it is designed to be embedded inside the discovery summary scaffold.
Provides the active EventFirmwareEdition (if any) to the composition tree. When a connected device reports an event firmware edition, this local is populated at the app root so that MainAppBar can display event branding automatically — no per-screen wiring needed.
Provides the platform-specific Map Main Screen. On Desktop or JVM targets where native maps aren't available yet, it falls back to a PlaceholderScreen.
The connected device's mesh Send/Receive activity stream, provided once at the app root (see MeshtasticAppShell).
The connected device's active LoRa modem preset, provided once at the app root (see MeshtasticAppShell) so signal quality can be rated relative to the preset's demodulation floor without threading it through every node/message composable. Null — the default before a device connects, and in previews/tests — falls back to the LongFast limit in ModemPreset?.snrLimit.
Provides the platform-specific Map Screen for a Node (e.g. Google Maps or OSMDroid on Android). On Desktop or JVM targets where native maps aren't available yet, it falls back to a PlaceholderScreen.
Provides an embeddable position-track map composable that renders a polyline with markers for the given positions. Unlike LocalNodeMapScreenProvider, this does not include a Scaffold or AppBar — it is designed to be embedded inside another screen layout (e.g. the position-log adaptive layout).
Whether the Site Planner coverage-estimate flow is available (Google flavor only, backed by the official hosted planner). Gates the "Estimate coverage" action on the node detail screen; the map's own control is gated equivalently in the Google MapView. Defaults to false so F-Droid/release never surface a dead action.
Provides an embeddable traceroute map composable that renders node markers and forward/return offset polylines for a traceroute result. Unlike LocalMapViewProvider, this does not include a Scaffold, AppBar, waypoints, location tracking, custom tiles, or any main-map features — it is designed to be embedded inside TracerouteMapScreen's scaffold.
Provides the platform-specific Traceroute Map Screen. On Desktop or JVM targets where native maps aren't available yet, it falls back to a PlaceholderScreen.
Functions
Parses the edition's #RRGGBB EventFirmwareEdition.accentColor into a Color, or null if absent/malformed.
A helper component that renders an AlertManager.AlertData using the same logic as MainScreen.
Parses HTML into an AnnotatedString with platform-appropriate rendering.
Parses HTML into an AnnotatedString with platform-appropriate rendering.
JVM stub — returns the raw HTML as plain text (no HTML rendering on Desktop).
Converts a raw neighbor info string into an AnnotatedString with SNR values highlighted according to their quality.
Converts a raw traceroute string into an AnnotatedString with SNR values highlighted according to their quality.
Applies an imported LoRa config after channel replacement writes have had time to settle.
Applies an imported ChannelSet as an authoritative replacement to the radio and local cache.
Pure classifier for a runtime permission's UX state. Kept platform-agnostic and side-effect-free so it can be unit-tested in commonTest without an Android Activity.
Bundled branding drawable for an edition, or null. The metadata's iconUrl is null until icons are hosted, so the one drawable we ship stays code-mapped here; remove this once icons are loaded from EventFirmwareEdition.iconUrl.
Builds a Channel list from the difference between two ChannelSettings lists. Only changes are included in the resulting list.
Builds the filtered ADD-mode preview for QR import: existing channels followed by only the unique incoming channels.
A constant PermissionUiState for platforms / API levels where a permission is not gated at runtime.
Returns whether Bluetooth is currently turned off at the system level (the adapter exists but is disabled). Always false on devices without Bluetooth and on platforms where the concept doesn't apply.
Returns whether Bluetooth is currently turned off at the system level (the adapter exists but is disabled). Always false on devices without Bluetooth and on platforms where the concept doesn't apply.
JVM — Bluetooth adapter state is not surfaced on Desktop.
Returns whether GPS/location services are currently disabled at the system level. Always false on platforms where this concept doesn't apply.
Returns whether GPS/location services are currently disabled at the system level. Always false on platforms where this concept doesn't apply.
JVM — GPS is never disabled on Desktop (concept doesn't apply).
Returns whether the device currently lacks any transport that can back the network-scan discovery (no active Wi-Fi, Ethernet, or VPN). Cellular alone is not sufficient — a carrier uplink does not place the device on the same segment as a Meshtastic node — so a cellular-only state surfaces the "connect to Wi-Fi" hint. The function name is historical: the original implementation checked Wi-Fi alone, later widened to Ethernet, and now also recognizes VPN (ZeroTier/Tailscale) as a valid reachability path for a TCP node. The name is retained to avoid churning the expect/actual contract and every consumer. Always false where the concept doesn't apply.
Returns whether the device currently lacks any transport that can back the network-scan discovery (no active Wi-Fi, Ethernet, or VPN). Cellular alone is not sufficient — a carrier uplink does not place the device on the same segment as a Meshtastic node — so a cellular-only state surfaces the "connect to Wi-Fi" hint. The function name is historical: the original implementation checked Wi-Fi alone, later widened to Ethernet, and now also recognizes VPN (ZeroTier/Tailscale) as a valid reachability path for a TCP node. The name is retained to avoid churning the expect/actual contract and every consumer. Always false where the concept doesn't apply.
JVM — local-network availability is not gated on Desktop.
Normalizes an imported REPLACE-mode ChannelSettings list so firmware only materializes real, distinct channels.
Returns the reactive PermissionUiState for the Bluetooth scan/connect permissions. On pre-Android-12 devices BLE scanning is gated by the location permission, so the returned state delegates to rememberLocationPermissionState.
Returns the reactive PermissionUiState for the Bluetooth scan/connect permissions. On pre-Android-12 devices BLE scanning is gated by the location permission, so the returned state delegates to rememberLocationPermissionState.
JVM — Desktop does not gate Bluetooth behind a runtime permission.
Returns the reactive PermissionUiState for the CAMERA permission. Always PermissionStatus.GRANTED on platforms that don't require a runtime camera permission.
Returns the reactive PermissionUiState for the CAMERA permission. Always PermissionStatus.GRANTED on platforms that don't require a runtime camera permission.
JVM — Desktop does not gate the camera behind a runtime permission.
Returns the reactive PermissionUiState for the ACCESS_LOCAL_NETWORK permission. Always PermissionStatus.GRANTED on API levels / platforms that don't gate local-network access behind a runtime permission.
Returns the reactive PermissionUiState for the ACCESS_LOCAL_NETWORK permission. Always PermissionStatus.GRANTED on API levels / platforms that don't gate local-network access behind a runtime permission.
JVM — Desktop does not gate local-network access behind a runtime permission.
Returns the reactive PermissionUiState for the location permissions, recomputed on ON_RESUME. On platforms without runtime permissions the status is always PermissionStatus.GRANTED.
Returns the reactive PermissionUiState for the location permissions, recomputed on ON_RESUME. On platforms without runtime permissions the status is always PermissionStatus.GRANTED.
JVM — Desktop does not gate location behind a runtime permission.
Returns the reactive PermissionUiState for the POST_NOTIFICATIONS permission. Always PermissionStatus.GRANTED on API levels / platforms that don't gate notifications behind a runtime permission.
Returns the reactive PermissionUiState for the POST_NOTIFICATIONS permission. Always PermissionStatus.GRANTED on API levels / platforms that don't gate notifications behind a runtime permission.
JVM — Desktop does not gate notifications behind a runtime permission.
Returns a function that opens this app's system settings page (where the user can change any permission).
Returns a function that opens this app's system settings page (where the user can change any permission).
JVM stub — app settings are not available on Desktop.
Returns a launcher to open the platform's Bluetooth settings.
Returns a launcher to open the platform's Bluetooth settings.
JVM stub — Bluetooth settings are not available on Desktop.
Returns a launcher function to prompt the user to open/pick a file. The callback receives the selected file URI.
Returns a launcher function to prompt the user to open/pick a file. The callback receives the selected file URI.
JVM — Opens a native file dialog to pick a file.
Returns a launcher to open the platform's location settings.
Returns a launcher to open the platform's location settings.
Returns a launcher to open the platform's location settings.
Returns a function to open the platform's map application at the given coordinates.
Returns a function to open the platform's map application at the given coordinates.
JVM stub — map opening is not available on Desktop.
Returns a function to open the platform's NFC settings.
Returns a function to open the platform's NFC settings.
JVM stub — NFC settings are not available on Desktop.
Returns a function to open the platform's browser with the given URL.
Returns a function to open the platform's browser with the given URL.
JVM stub — URL opening via Desktop browse API.
Returns a launcher to open the platform's Wi-Fi settings.
Returns a launcher to open the platform's Wi-Fi settings.
JVM stub — Wi-Fi settings are not available on Desktop.
Generates a QR code painter directly using the Skia/Compose canvas API in pure Kotlin.
Returns a suspend function that reads up to maxChars characters of text from a CommonUri. Returns null if the file is empty or cannot be read.
Returns a suspend function that reads up to maxChars characters of text from a CommonUri. Returns null if the file is empty or cannot be read.
JVM — Reads text from a file URI.
Returns a launcher function to prompt the user to save a file. The callback receives the saved file URI.
Returns a launcher function to prompt the user to save a file. The callback receives the saved file URI.
Returns a function to show a toast message.
Returns a function to show a toast message.
JVM stub — toast messages are logged instead.
Returns a function to show a toast message from a string resource.
Returns a function to show a toast message from a string resource.
JVM stub — toast messages are logged instead.
A Composable that sets the screen brightness while it is in the composition.
A Composable that sets the screen brightness while it is in the composition.
JVM no-op — screen brightness control is not available on Desktop.