This change ensures that raw values received from Bluetooth scales (e.g., weight in KG, body fat in %) are converted to the units specified by the user in the MeasurementType settings before being persisted to the database.
- `ModernScaleAdapter` (abstract base): Handles app integration, event streams, and handler wiring.
- `GattScaleAdapter`: Implements BLE GATT connections using Blessed.
- `BroadcastScaleAdapter`: Handles devices that only use BLE advertisements.
- `SppScaleAdapter`: Implements Bluetooth Classic SPP connections.
- **1byone (classic):** Service 0xFFF0, notify 0xFFF4, write 0xFFF1. Includes mode/unit, clock sync, history, and real-time measurements with body composition via OneByoneLib.
- **1byone (new):** Service 0xFFB0, notify 0xFFB2, write 0xFFB1. Parses 0x80 (final weight), 0x01 (impedance), and 0x00 (history/real-time) frames. Includes weight request, user history upload, and body composition via OneByoneNewLib.
- **Inlife:** Service 0xFFF0, notify 0xFFF1, write 0xFFF2. Handles user sync, live weight, and two result frame variants (legacy derived values and new weight+impedance).
- **Medisana BS44x:** Service 0x78B2. Parses weight (0x8A21) and feature (0x8A22) frames, with time sync (0x8A81). Includes auto-detection for UNIX vs. 2010 timestamp epoch.
- **MGB (SWAN / Icomon / YG):** Service 0xFFB0, notify 0xFFB2, write 0xFFB1. Implements config sequence (user, time, unit) and parses two-part data frames for weight and body composition.
- **Mi Scale (v1/v2):** Handles v1 (history, time sync) and v2 (live frames with impedance, history, time sync, unit config). Uses MiScaleLib for body composition.
- **OKOK (broadcast):** Unified handler for V20, V11, VF0, and "Nameless" (0xC0 low byte) variants via manufacturer data in advertisements. Parses weight and (for V20) impedance.
- **ES-CS20M:** Handles Yunmai-like scales using vendor service 0x1A10.
- **QN / FITINDEX ES-26M:** Supports scales using vendor protocol on 0xFFE0/0xFFF0.
- **RENPHO ES-WBE28:** Implements support for GATT-based Renpho scales.
- **Sanitas SBF72/BF915/SBF73:** Extends StandardWeightProfileHandler with vendor specifics.
- **Senssun:** Supports Senssun body composition scales with two GATT layouts.
- **Sinocare:** Broadcast-only handler for Sinocare "Weight Scale" devices.
- **Soehnle:** Handles Soehnle smart scales using custom and standard services.
Additionally, this commit:
- Improves the snackbar display logic to prevent duplicate messages and introduces a debounce mechanism.
- Enhances the Overview screen's scrolling behavior to smoothly scroll to the top when new items are added, and also improves the scroll behavior when tapping on chart points.
refactors the `BluetoothCommunication` class to use a single `mainHandler` for managing various delayed tasks like pre-scan timeouts, disconnect timeouts, and connection delays.