feat(battery): Add experimental case charge ETA and case battery health

- Show the time until the case is full inside its charging chip, learned from
  the case's own rising level with the existing charge-band model; no rating
  exists for case charging, so the first charge learns before it shows
- Derive a case battery health from observed transfer efficiency: pod percent
  gained per case percent spent while docked and unplugged, corrected by each
  pod's own health, compared against Apple's "with charging case" totals
- Case data is only genuine while a pod is docked — both transports silently
  freeze the last value otherwise. Battery updates now flag whether the case
  entry is live, and BLE gains strict same-frame case accessors, so estimates
  never learn from frozen echoes
- The case deliberately gets no runtime estimate: idle-then-burst drain has no
  meaningful hourly rate
- Mark the case metrics as experimental in the Battery settings card
This commit is contained in:
darken
2026-07-02 17:32:29 +02:00
committed by Matthias Urhahn
parent 21560a1f3a
commit d4dddb1f38
18 changed files with 515 additions and 20 deletions
+2
View File
@@ -143,6 +143,7 @@
<string name="device_battery_estimate_reset_desc">Start over from the rated battery life.</string>
<string name="device_battery_estimate_reset_confirm_title">Reset learned data?</string>
<string name="device_battery_estimate_reset_confirm_message">CAPod will forget this device\'s measured drain, charging speed and battery health, and start over from the rated battery life.</string>
<string name="device_battery_case_experimental_note">Charging estimates and battery health for the case are experimental. The case only reports data while a pod is inside it.</string>
<string name="settings_acknowledgements_label">Acknowledgements</string>
<string name="settings_debug_autoreports_label">Automatic bug reports</string>
@@ -479,6 +480,7 @@
<string name="device_settings_info_battery_health_label">Battery Health (estimated)</string>
<string name="device_settings_info_battery_health_left_label">Left Battery Health (est.)</string>
<string name="device_settings_info_battery_health_right_label">Right Battery Health (est.)</string>
<string name="device_settings_info_battery_health_case_label">Case Battery Health (est.)</string>
<string name="device_settings_info_battery_health_value">~%1$d%%</string>
<string name="device_settings_info_battery_health_pending">Still determining — check back after a few listening sessions</string>
<string name="device_settings_info_details_label">Device Details</string>