From 02767b7e6c8a16db48fba6770f245809e8003486 Mon Sep 17 00:00:00 2001 From: Kurt Himebauch <136133082+xXJSONDeruloXx@users.noreply.github.com> Date: Sun, 25 Oct 2026 17:29:43 -0400 Subject: [PATCH] fix: report a full battery at 100% while charging, so Steam stops showing 99% (#1577) * fix: report a full battery at 100% while charging, so Steam stops showing 99% * test: charging at 100% is reported full --- .../launcher/session/BatteryComponent.kt | 3 ++- .../launcher/session/BatteryComponentTest.kt | 20 ++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/droiddeck/launcher/session/BatteryComponent.kt b/app/src/main/java/com/droiddeck/launcher/session/BatteryComponent.kt index 252e06a9e..517fa6c74 100644 --- a/app/src/main/java/com/droiddeck/launcher/session/BatteryComponent.kt +++ b/app/src/main/java/com/droiddeck/launcher/session/BatteryComponent.kt @@ -56,8 +56,9 @@ class BatteryComponent(val dir: File, private val vpowerDir: File) : SessionPart val timeToEmptyS = if (discharging && chargeNowUah > 0 && abs(currentAvgUa) > 0) chargeNowUah * 3600L / abs(currentAvgUa) else 0L val charging = status == BatteryManager.BATTERY_STATUS_CHARGING val timeToFullS = if (charging && chargeFullUah > chargeNowUah && abs(currentAvgUa) > 0) (chargeFullUah - chargeNowUah) * 3600L / abs(currentAvgUa) else 0L + // Android can keep reporting charging at 100%; Linux reports Full there, and Steam shows 99% until it does. val statusText = when (status) { - BatteryManager.BATTERY_STATUS_CHARGING -> "Charging" + BatteryManager.BATTERY_STATUS_CHARGING -> if (pct >= 100) "Full" else "Charging" BatteryManager.BATTERY_STATUS_DISCHARGING -> "Discharging" BatteryManager.BATTERY_STATUS_FULL -> "Full" BatteryManager.BATTERY_STATUS_NOT_CHARGING -> "Not charging" diff --git a/app/src/test/java/com/droiddeck/launcher/session/BatteryComponentTest.kt b/app/src/test/java/com/droiddeck/launcher/session/BatteryComponentTest.kt index 0c94f8225..443559cf1 100644 --- a/app/src/test/java/com/droiddeck/launcher/session/BatteryComponentTest.kt +++ b/app/src/test/java/com/droiddeck/launcher/session/BatteryComponentTest.kt @@ -49,11 +49,25 @@ class BatteryComponentTest { assertEquals("-2000000", File(supplies, "BAT1/current_now").readText().trim()) } - private fun start(supplies: File, vpower: File, currentUa: Long) { + @Test fun chargingAtFullLevelIsReportedFullSoSteamStopsSaying99() { + val supplies = tmp.newFolder("power_supply") + val vpower = tmp.newFolder("vpower") + start(supplies, vpower, 2_000_000L, BatteryManager.BATTERY_STATUS_CHARGING, 100) + assertEquals("Full", File(supplies, "BAT1/status").readText().trim()) + assertEquals("Full", File(vpower, "battery_status").readText().trim()) + battery?.stop() + start(supplies, vpower, 2_000_000L, BatteryManager.BATTERY_STATUS_CHARGING, 99) + assertEquals("Charging", File(supplies, "BAT1/status").readText().trim()) + } + + private fun start( + supplies: File, vpower: File, currentUa: Long, + status: Int = BatteryManager.BATTERY_STATUS_DISCHARGING, level: Int = 50, + ) { val context = RuntimeEnvironment.getApplication() context.sendStickyBroadcast(Intent(Intent.ACTION_BATTERY_CHANGED).apply { - putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_DISCHARGING) - putExtra(BatteryManager.EXTRA_LEVEL, 50) + putExtra(BatteryManager.EXTRA_STATUS, status) + putExtra(BatteryManager.EXTRA_LEVEL, level) putExtra(BatteryManager.EXTRA_SCALE, 100) putExtra(BatteryManager.EXTRA_VOLTAGE, 4000) })