Meshtastic-Android/core
James Rich 5aabf58576 refactor: consolidate metric formatting through MetricFormatter
Replace 11 inline formatString("%.Nf ...") metric display calls with
MetricFormatter helpers in core/common. Adds two new helpers (windSpeed,
rainfall) for m/s and mm readings.

Migrated (11 sites):
- feature/node EnvironmentMetrics.kt: humidity, pressure, voltage,
  current, wind_speed, wind_gust, wind_lull, rainfall_1h, rainfall_24h
- feature/settings LoadingOverlay.kt, PacketResponseStateDialog.kt:
  progress percent indicators

New helpers in MetricFormatter:
- windSpeed(metersPerSecond, decimalPlaces = 1) -> "X.X m/s"
- rainfall(millimeters, decimalPlaces = 1) -> "X.X mm"

Intentionally left alone:
- core/model DistanceExtensions.kt: specialized unit-conversion helpers,
  which are themselves the canonical distance/speed formatters
- feature/node PositionLogComponents.kt, MetricsViewModel.kt: GPS
  coordinates and heading-angle formatters (not metric display strings)
- feature/node TracerouteChart, HostMetricsChart, EnvironmentCharts,
  PaxMetrics valueFormatter lambdas: chart-library axis callbacks with
  format strings scoped to the chart lib contract
- feature/node TracerouteLog.kt, HostMetricsLog.kt: generic
  "label: value" log rows, not metric displays
- feature/node CompassBottomSheet.kt: one-off %.0f° angle
- EnvironmentMetrics.kt lux, UV-lux, gas resistance, radiation, and
  wind-with-direction formats: one-off specialized units not worth a
  dedicated helper

Also adds detekt @Suppress("TooManyFunctions") on MetricFormatter
(11 helpers now exceeds the default threshold) and unit tests for the
new windSpeed/rainfall helpers.

Validation: ./gradlew spotlessApply, :core:common:jvmTest,
:core:common:detekt, spotlessCheck, and kmpSmokeCompile all pass.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 11:04:13 -05:00
..
api fix(build): resolve all actionable compile-time warnings (#5058) 2026-04-10 22:42:30 +00:00
barcode fix(build): align AndroidX Compose versions with CMP and migrate to runComposeUiTest (#5096) 2026-04-13 02:49:11 +00:00
ble chore: KMP audit — commonize code, centralize utilities, eliminate dead abstractions (#5133) 2026-04-15 02:17:50 +00:00
common refactor: consolidate metric formatting through MetricFormatter 2026-04-17 11:04:13 -05:00
data feat(mqtt): migrate to MQTTastic-Client-KMP (#5165) 2026-04-17 15:19:08 +00:00
database chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
datastore refactor: modern APIs — Koin 4.2, CMP 1.11, Ktor resilience, Room @Upsert, injected dispatchers (#5119) 2026-04-14 11:41:01 +00:00
di refactor: BLE transport and UI for Kotlin Multiplatform unification (#4911) 2026-03-25 02:15:51 +00:00
domain feat: add high-contrast theme with accessible message bubbles (#5135) 2026-04-15 01:14:20 +00:00
model feat(mqtt): migrate to MQTTastic-Client-KMP (#5165) 2026-04-17 15:19:08 +00:00
navigation chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
network feat(mqtt): migrate to MQTTastic-Client-KMP (#5165) 2026-04-17 15:19:08 +00:00
nfc fix: harden reliability, clean up KMP compliance, and improve code quality (#5023) 2026-04-09 18:21:46 +00:00
prefs chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
proto chore(deps): update core/proto/src/main/proto digest to 4d5b500 (#5161) 2026-04-16 21:41:36 -05:00
repository feat(mqtt): migrate to MQTTastic-Client-KMP (#5165) 2026-04-17 15:19:08 +00:00
resources feat(mqtt): migrate to MQTTastic-Client-KMP (#5165) 2026-04-17 15:19:08 +00:00
service chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
takserver chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
testing chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
ui chore: KMP audit — commonize code, centralize utilities, eliminate dead abstractions (#5133) 2026-04-15 02:17:50 +00:00