Package-level declarations
Types
Listens for ACTION_LOCALE_CHANGED, which the platform also broadcasts when the user edits the Android 14+ regional preferences (Settings > System > Languages & input > Regional preferences) — the documented way to notice a temperature-unit change.
A specialized FileOutputStream that writes data to a file in the application's external files directory. Primarily used for low-level protocol debugging and packet logging.
Utility for checking build properties, such as emulator detection.
Utility for checking build properties, such as emulator detection.
Utility for checking build properties, such as emulator detection.
Platform-agnostic Date formatter utility.
Platform-agnostic Date formatter utility.
Platform-agnostic Date formatter utility.
Sometimes when starting services we face situations where messages come in that require computation but we can't do that computation yet because we are still waiting for some long running init to complete.
The desktop JVM has no locale-change notification: Locale.getDefault() is fixed for the life of the process unless the app itself changes it, so there is nothing to observe. Consumers still get their initial read.
This util class allows you to optimize the binary size of the transmitted text message strings. It replaces certain characters from national alphabets with the characters from the latin alphabet that have an identical appearance (homoglyphs), for example: cyrillic "А", "С", "у" -> latin "A", "C", "y", etc. According to statistics, such letters can make up about 20-25% of the total number of letters in the average text. Replacing them with Latin characters reduces the binary size of the transmitted message. The average transmitted message volume can then fit around ~140-145 characters instead of ~115-120
Signals that the OS locale or its regional preferences changed, so anything holding a formatted value can re-read it.
The display units, as values that change over time.
Represents the system's preferred measurement system.
A physical unit this app renders. symbol is fixed; the number beside it is localized.
Centralized metric formatting for display strings. Eliminates duplicated formatString patterns across Node, NodeItem, and metric screens.
Number formatting for display, and its locale-independent counterpart.
Where a timestamp falls relative to the local calendar day, for chat date separators.
A helper class that manages a single Job. When a new job is launched, any previous job is cancelled. This is useful for ensuring that only the latest operation of a certain type is running at a time (e.g. for search or settings updates).
The system's preferred temperature unit. Deliberately decoupled from MeasurementSystem: some locales mix systems (the UK measures road distance in miles but temperature in Celsius), so temperature must never be derived from the distance unit.
The user's in-app units choice. SYSTEM follows the OS locale; the other two force one system everywhere.
Where the user's units choice is read from; implemented over the UI preferences store.
An InputFilter that constrains text length based on UTF-8 byte count instead of character count. This is particularly useful for fields that must be stored in byte-limited buffers, such as hardware configuration fields.
Properties
Display symbols. Fixed rather than translated — see the note on MetricFormatter.
Access to the IO dispatcher in a multiplatform-safe way.
Access to the IO dispatcher in a multiplatform-safe way.
Accessor for the current time as a stable Instant.
Accessor for the current time in seconds.
Accessor for the system default time zone.
Functions
Clamps a seconds-since-epoch timestamp so it never exceeds the current wall-clock time.
Returns the device's current locale as a 2-letter ISO 639-1 language code (e.g. "en", "es", "fr").
Returns the device's current locale as a 2-letter ISO 639-1 language code (e.g. "en", "es", "fr").
Returns the device's current locale as a 2-letter ISO 639-1 language code (e.g. "en", "es", "fr").
Returns the device locale as a CMP resource qualifier string. Examples: "pt-rBR", "zh-rCN", "fr" (no region when not specified). Use this to construct locale-qualified file resource paths like "files-$qualifier/docs/...".
Returns the device locale as a CMP resource qualifier string. Examples: "pt-rBR", "zh-rCN", "fr" (no region when not specified). Use this to construct locale-qualified file resource paths like "files-$qualifier/docs/...".
Returns the device locale as a CMP resource qualifier string. Examples: "pt-rBR", "zh-rCN", "fr" (no region when not specified). Use this to construct locale-qualified file resource paths like "files-$qualifier/docs/...".
Returns the device's current region as a 2-letter ISO 3166-1 alpha-2 country code (e.g. "US", "DE"), or an empty string when the region is unknown. Used to region-filter marketplace links.
Returns the device's current region as a 2-letter ISO 3166-1 alpha-2 country code (e.g. "US", "DE"), or an empty string when the region is unknown. Used to region-filter marketplace links.
Returns the device's current region as a 2-letter ISO 3166-1 alpha-2 country code (e.g. "US", "DE"), or an empty string when the region is unknown. Used to region-filter marketplace links.
Wraps and discards exceptions, but reports them to the crash reporter before logging. Use this for operations that should not crash the process but are still unexpected.
Extracts WIFI SSID and password from a QR code string. Expected format: WIFI:S:SSID;P:PASSWORD;;
Formats value to fractionDigits decimal places using the OS locale's decimal and grouping separators.
Android and the desktop JVM share this: both resolve separators and grouping from the platform locale data.
See formatLengthLocalized; elevation pins the small unit (metres or feet) at every magnitude — 7,431 ft, never 1.4 mi — so only the rendering is CLDR's, not the unit choice.
See formatLengthLocalized; elevation pins the small unit (metres or feet) at every magnitude — 7,431 ft, never 1.4 mi — so only the rendering is CLDR's, not the unit choice.
See formatLengthLocalized; elevation pins the small unit (metres or feet) at every magnitude — 7,431 ft, never 1.4 mi — so only the rendering is CLDR's, not the unit choice.
CLDR-driven measure rendering: unit choice, conversion, digits, symbol, and spacing all come from the platform's ICU data for the current locale, forced onto system via the ms Unicode keyword — the mechanism Android 16's Measurement system setting itself uses. usage("road") is deliberately not used anywhere: CLDR road preferences snap values (87 m renders as "90 m") and pick yards for the UK, which is wrong for GNSS-accuracy labels and surprising for node distance.
CLDR-driven measure rendering: unit choice, conversion, digits, symbol, and spacing all come from the platform's ICU data for the current locale, forced onto system via the ms Unicode keyword — the mechanism Android 16's Measurement system setting itself uses. usage("road") is deliberately not used anywhere: CLDR road preferences snap values (87 m renders as "90 m") and pick yards for the UK, which is wrong for GNSS-accuracy labels and surprising for node distance.
CLDR-driven measure rendering: unit choice, conversion, digits, symbol, and spacing all come from the platform's ICU data for the current locale, forced onto system via the ms Unicode keyword — the mechanism Android 16's Measurement system setting itself uses. usage("road") is deliberately not used anywhere: CLDR road preferences snap values (87 m renders as "90 m") and pick yards for the UK, which is wrong for GNSS-accuracy labels and surprising for node distance.
Formats value with its unit for display: the number follows the OS locale, the symbol does not.
See formatLengthLocalized; input is mm under CLDR's rainfall usage, rendering mm or inches.
See formatLengthLocalized; input is mm under CLDR's rainfall usage, rendering mm or inches.
See formatLengthLocalized; input is mm under CLDR's rainfall usage, rendering mm or inches.
See formatLengthLocalized; input is m/s, CLDR renders km/h or mph.
See formatLengthLocalized; input is m/s, CLDR renders km/h or mph.
See formatLengthLocalized; input is m/s, CLDR renders km/h or mph.
Pure-Kotlin multiplatform string formatting.
Retrieves a Parcelable extra from an Intent in a backward-compatible way.
returns the system's preferred measurement system.
returns the system's preferred measurement system.
returns the system's preferred measurement system.
Returns the temperature unit preferred by the OS locale, honoring the user's regional-preference override where the platform supports one (Android 14+ Settings > System > Languages > Regional preferences).
Returns the temperature unit preferred by the OS locale, honoring the user's regional-preference override where the platform supports one (Android 14+ Settings > System > Languages > Regional preferences).
Returns the temperature unit preferred by the OS locale, honoring the user's regional-preference override where the platform supports one (Android 14+ Settings > System > Languages > Regional preferences).
Launches a new coroutine with a central CoroutineExceptionHandler that reports errors to Exceptions.
Wraps and discards exceptions, optionally logging them.
Suspend-compatible variant of ignoreException. Re-throws CancellationException.
True iff normalized (the output of normalizeAddress) is a no-device sentinel that DB naming collapses to the default database. Single source of truth for "no real device selected".
True when both timestamps fall on the same local calendar day.
Validates if the given string is a valid network address (IP or domain).
Validates if the given string is a valid network address (IP or domain).
Validates if the given string is a valid network address (IP or domain).
True iff address refers to a real selected device. Rejects null/blank and all legacy no-device sentinels ("n", "null", ".n", "default", case-insensitive) by delegating to normalizeAddress and isNoDeviceSentinel. Any input that buildDbName would collapse to DEFAULT_DB_NAME is rejected here too, so the foreground-service stay-alive decision and the DB name resolution can never diverge.
Normalizes a BLE/device address to a canonical uppercase form with colons removed. Returns "DEFAULT" for null, blank, or sentinel values ("N", "NULL").
Registers a BroadcastReceiver using ContextCompat to ensure consistent behavior across Android versions.
Like kotlin.runCatching, but re-throws CancellationException to preserve structured concurrency. Use this instead of runCatching in coroutine contexts.
Like kotlin.runCatching receiver variant, but re-throws CancellationException.
Like safeCatching but also catches JVM Errors (e.g. ExceptionInInitializerError raised by compose-resources' lazy skiko initialization on the desktop JVM test classpath). Still re-throws CancellationException so structured concurrency is preserved. Use when the block invokes code whose failure modes include static-initializer errors and the caller only needs a best-effort fallback.