Package-level declarations
Types
CO₂ severity levels based on concentration thresholds (ppm).
Output of parseInlineMarkdown: the stripped text plus spans, all in display-space offsets.
The five inline styles shared with iOS.
EPA AQI severity categories for PM2.5-derived AQI (0-500), per meshtastic/design#54. Mirrors Co2Severity's ppm→severity pattern, keyed on AQI value instead.
How loudly a RecoveryCard should present itself.
Event emitted when a user re-presses a bottom navigation destination that should trigger a scroll-to-top behaviour on the corresponding screen.
Represents the various visual states of the security icon as an enum. Each enum constant encapsulates the icon, color, descriptive text, and optional badge details.
A non-link inline style applied over a half-open range in display-space.
Properties
Test tag for the split divider; lets tests prove the scaffold branch (not the Row fallback) rendered.
The plain-language explanation of this state, shown in the dialog and the legend.
Extension property to check if the channel uses a low entropy PSK (not securely encrypted).
Extension property to check if MQTT is enabled for the channel.
Extension property to check if the channel has precise location enabled.
Which firmware versions show this state (design#149, point 11).
Shared node-tinted surface treatment so node cards and message bubbles match. A node's identity color is applied as a faint wash over the neutral card surface plus a node-colored outline — the more accessible alternative to a heavily saturated fill, since content keeps the surface/onSurface AA pairing while still reading as "this node".
The name of this state, used as both the dialog title and the icon's accessibility label.
Functions
Screenshot-test sample; public so :screenshot-tests can render it at compact, medium, and expanded widths.
Shared composable that observes AlertManager.currentAlert and renders a MeshtasticDialog when an alert is present. This eliminates duplicated alert-rendering boilerplate across Android and Desktop host shells.
A wrapper around ConnectionsNavIcon that adds a blinking glow effect when there is mesh activity (Send/Receive).
A Text component that automatically detects and linkifies URLs, email addresses, and phone numbers.
The foundational list item. It supports a leadingIcon (optional), headline text and supportingText (optional), and a trailingContent composable (optional).
Copy-to-clipboard icon button.
Rates link quality from SNR relative to the active modem preset's demodulation floor (ModemPreset.snrLimit). A given SNR means different things per preset — e.g. -15 dB is excellent on LongSlow (SF12) but unusable on ShortFast (SF7) — so a fixed threshold mis-rates most presets.
Extension function for LazyListScope with drag-and-drop functionality for indexed items.
Generic empty-state placeholder for detail panes in list-detail layouts.
Bottom sheet shown when the user taps the event card on the Connections screen. Surfaces the event metadata the bundled event_firmware.json carries — welcome message, location, dates, and links — themed with the edition's accent color.
Full-width band of an event edition's brand palette, left to right in authored order.
Common component to check the connected device's firmware version against the minimum required version. Will display a dismissable alert if the firmware is old, or a blocking alert if it is too old.
This state's glyph, drawn at whatever size modifier gives it.
Style spans over the RAW source (delimiters kept in place) for live in-field styling. Unlike parseInlineMarkdown this does NOT strip delimiters — it reports each bold/italic/strikethrough/code element's raw content range so a text-field OutputTransformation can addStyle without changing the stored text. Links are not styled here.
A list item with an optional leadingIcon, headline text, optional supportingText, and optional trailingIcon.
Displays a human readable description and icon representing the signal quality.
A composable that displays a signal strength indicator with an icon and optional text value. The icon and its color change based on the number of signal bars.
Shared shell for setting up global UI logic across platforms (Android, Desktop).
Common application-level setup for all Meshtastic platforms (Android, Desktop, etc.).
A comprehensive and flexible dialog component for the Meshtastic application.
Unified Floating Action Button for importing Meshtastic data (Contacts, Channels, etc.) via NFC, QR, or URL. Handles the SharedContactImportDialog if a contact is pending import.
Shared NavDisplay wrapper that configures the standard Meshtastic entry decorators, scene strategies, and transition animations for all platform hosts.
Shared NavDisplay wrapper for a single backstack.
Shared adaptive navigation shell using NavigationSuiteScaffold.
A simplified MeshtasticDialog using only string resources.
Shared composable that observes SnackbarManager.events and provides a global SnackbarHostState.
A simplified MeshtasticDialog using a title resource and a plain text message.
Prompt shown when an NFC action (scan or write) is requested while NFC is turned off. Offers to open system settings. titleRes lets the caller frame it for the specific action (e.g. scan vs write).
Node-colored outline; active (selected / online) uses a stronger alpha. Null when there's no node color.
A modifier that applies a glow animation to a node card when a packet is received.
The DM thread header's encryption lock.
The explanation for one state, with a toggle to the full legend. Shared by every surface that shows a glyph.
Every glyph at the two sizes the node rows actually use — 20dp complete, 18dp compact.
The one security indicator a node row shows beside the name (design#149), tappable for the explanation.
NodeSecurityIcon for a state resolved elsewhere — the DM thread's own header, say.
The node's one security indicator (design#149) — verification state on 2.8, the PKI locks below it, always status-colored. isThisNode marks the connected radio, which reads as verified.
Parses the lightweight inline markdown subset shared with the iOS client — **bold**, *italic*, ~~strikethrough~~, ` `code` ` and [label](url) — into a delimiter-stripped InlineMarkdownResult.displayText plus display-space StyleSpans and LinkSpans.
The educational UI the Android permissions guidance requires before re-requesting a permission the user has already declined once (shouldShowRequestPermissionRationale is true, i.e. org.meshtastic.core.ui.util.PermissionStatus.DENIED_CAN_RETRY).
Convenience overload that reads the status and actions directly from a PermissionUiState.
Shared placeholder screen for desktop/JVM feature stubs that are not yet implemented. Displays a centered label in MaterialTheme.typography.headlineMedium.
A reusable recovery card: a message box plus one full-width corrective action. Generalizes the compass warning/recovery pattern so any feature can present context plus a single corrective action (request a permission, open Bluetooth/Wi-Fi/app settings, etc.).
Previews below are captured by the screenshot suite. They exist because the tone rule this file encodes — error only for a permanent denial, informational for everything else — is a visual contract, and a visual contract that only unit tests guard is one nobody notices breaking.
Overload for SecurityIcon that takes a Channel object to determine its security state.
Displays an icon representing the security status of a channel. Clicking the icon shows a detailed help dialog.
Overload for SecurityIcon that takes an AppOnlyProtos.ChannelSet and a channel index. If the channel at the given index is not found, nothing is rendered.
Overload for SecurityIcon that takes an AppOnlyProtos.ChannelSet and a channel name. If a channel with the given name is not found, nothing is rendered. This overload optimizes lookup by name by memoizing a map of channel names to settings.
Overload for SecurityIcon that enables recomposition when making changes to the ChannelSettings.
Overload for SecurityIcon that derives the SecurityState from boolean flags.
Displays a dialog with the contact's information as a QR code and URI.
Displays a dialog for importing a shared contact.
Shared composable that conditionally renders SharedContactDialog and ScannedQrCodeDialog when the device is connected and requests are pending.
Renders the node's signal quality, or nothing when it has no SNR reading to rate.
Signature verified by the radio over the mesh. Our mesh glyph, since what it vouched for is the node itself.
Scrolls to the targetIndex while applying the same fast-scroll optimisation used by smartScrollToTop.
Executes the smart scroll-to-top policy.
A toggleable switch list item.
Handles the display of the traceroute alert when a response is received. Consolidates the side effect logic from the main application screens into common code.
Icon + short label for a TransportMechanism value, or null if unknown. Single source for transport badging.
Key verified in person, by exchanging contact QR codes. Stronger than SignedNodeIcon, the over-the-mesh one.