You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of the charger-notification redesign. All dependencies merged (#122, #108/#120).
Rescoped 2026-07-12 (session discussion) — decision documented so a fresh session can build without re-planning.
Decision
Not a standalone feature or notification. Stock Android and OEMs already show time-to-full (Samsung's lock screen "Full charge in X", Settings → Battery) using the fuel gauge's learned charge curve — strictly better than our linear estimate, which would be most wrong exactly where people look (the taper above 80%).
What survives is the nearly-free version: one row in the details table, since #108's merged charge rate makes it a two-line computation.
Agreed scope
A single row in the battery details table, shown only while charging and only when computable (independent gating like the #108 rows; hidden otherwise — never "0 min" or garbage):
Time to full · ~1h 20m
Computation (capacity-free — works on Kirin too)
Use #108's smoothed charge rate directly, not mAh/current:
Rate comes from the BatteryRateTracker.BatteryRate already computed in BatteryDetailsFragment.addRateRows (it calls record()); reuse that same object — do not re-read.
Hide when: not charging, !rate.hasRate(), or level ≥ 99%.
BatteryDetailsFragment.addRateRows — a row below "Charge rate", same pattern as the existing rate/current rows.
Honest caveat (document in the row's Javadoc, not the UI)
Linear estimate, no taper modeling; it will overshoot near full. Acceptable for a glanceable rough figure — precision is explicitly a non-goal (the OS owns the accurate number).
Affected code
ui/fragment/BatteryDetailsFragment.java — one row in addRateRows
service/BatteryRateTracker.java (or a small util) — pure estimateMinutesToFull(level, ratePph) + duration formatter
res/values/strings.xml + values-ar — "Time to full" label + value format
Part of the charger-notification redesign. All dependencies merged (#122, #108/#120).
Decision
Not a standalone feature or notification. Stock Android and OEMs already show time-to-full (Samsung's lock screen "Full charge in X", Settings → Battery) using the fuel gauge's learned charge curve — strictly better than our linear estimate, which would be most wrong exactly where people look (the taper above 80%).
What survives is the nearly-free version: one row in the details table, since #108's merged charge rate makes it a two-line computation.
Agreed scope
A single row in the battery details table, shown only while charging and only when computable (independent gating like the #108 rows; hidden otherwise — never "0 min" or garbage):
Computation (capacity-free — works on Kirin too)
Use #108's smoothed charge rate directly, not mAh/current:
BatteryRateTracker.BatteryRatealready computed inBatteryDetailsFragment.addRateRows(it callsrecord()); reuse that same object — do not re-read.!rate.hasRate(), or level ≥ 99%.~1h 20m,~45m), Western digits per Battery details table: fix RTL alignment + use Western digits for numbers #96.Placement
BatteryDetailsFragment.addRateRows— a row below "Charge rate", same pattern as the existing rate/current rows.Honest caveat (document in the row's Javadoc, not the UI)
Linear estimate, no taper modeling; it will overshoot near full. Acceptable for a glanceable rough figure — precision is explicitly a non-goal (the OS owns the accurate number).
Affected code
ui/fragment/BatteryDetailsFragment.java— one row inaddRateRowsservice/BatteryRateTracker.java(or a small util) — pureestimateMinutesToFull(level, ratePph)+ duration formatterres/values/strings.xml+values-ar— "Time to full" label + value formatAcceptance criteria
~Xh Ymwith Western digits (Battery details table: fix RTL alignment + use Western digits for numbers #96), localized label in values-arNon-goals