From 1acf06a62af530490793104aa89aaa53d7713da2 Mon Sep 17 00:00:00 2001 From: Todd Poynor Date: Thu, 7 Dec 2017 19:19:35 -0800 Subject: [PATCH 1/2] BatteryStats: Don't collect battery stats if no battery If the device has no battery, or has a removeable battery that is currently removed, do not collect battery statistics. Bug: 34507420 Test: manual: dumpsys batterystats Change-Id: Id8edb494f353a40c648f798690f611f89f464d34 --- .../android/internal/os/BatteryStatsImpl.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index a050a3ce0cf2a..5d6d5bcaa6bcd 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -11228,7 +11228,9 @@ public class BatteryStatsImpl extends BatteryStats { reportChangesToStatsLog(mHaveBatteryLevel ? mHistoryCur : null, status, plugType, level, temp); - final boolean onBattery = plugType == BATTERY_PLUGGED_NONE; + final boolean onBattery = + plugType == BATTERY_PLUGGED_NONE && + status != BatteryManager.BATTERY_STATUS_UNKNOWN; final long uptime = mClocks.uptimeMillis(); final long elapsedRealtime = mClocks.elapsedRealtime(); if (!mHaveBatteryLevel) { @@ -11262,7 +11264,8 @@ public class BatteryStatsImpl extends BatteryStats { mRecordingHistory = true; startRecordingHistory(elapsedRealtime, uptime, true); } - } else if (level < 96) { + } else if (level < 96 && + status != BatteryManager.BATTERY_STATUS_UNKNOWN) { if (!mRecordingHistory) { mRecordingHistory = true; startRecordingHistory(elapsedRealtime, uptime, true); @@ -11400,9 +11403,12 @@ public class BatteryStatsImpl extends BatteryStats { addHistoryRecordLocked(elapsedRealtime, uptime); } } - if (!onBattery && status == BatteryManager.BATTERY_STATUS_FULL) { - // We don't record history while we are plugged in and fully charged. - // The next time we are unplugged, history will be cleared. + if (!onBattery && + (status == BatteryManager.BATTERY_STATUS_FULL || + status == BatteryManager.BATTERY_STATUS_UNKNOWN)) { + // We don't record history while we are plugged in and fully charged + // (or when battery is not present). The next time we are + // unplugged, history will be cleared. mRecordingHistory = DEBUG; } From b41df4423ebe5ac4c10b46867670c8f78f16548f Mon Sep 17 00:00:00 2001 From: Todd Poynor Date: Fri, 8 Dec 2017 10:44:40 -0800 Subject: [PATCH 2/2] BatteryService: don't set battery low or critical states if no battery If device has no battery then never set states "battery low" or "battery critical". Bug: 34507420 Test: manual: inspection (with hack to disappear the battery device) Change-Id: I1eee79032507121de2fa7bf29d1359a29f21d3d0 --- services/core/java/com/android/server/BatteryService.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/BatteryService.java b/services/core/java/com/android/server/BatteryService.java index 924e736bab07c..04d292fa1ae40 100644 --- a/services/core/java/com/android/server/BatteryService.java +++ b/services/core/java/com/android/server/BatteryService.java @@ -421,7 +421,9 @@ public final class BatteryService extends SystemService { boolean logOutlier = false; long dischargeDuration = 0; - mBatteryLevelCritical = (mHealthInfo.batteryLevel <= mCriticalBatteryLevel); + mBatteryLevelCritical = + mHealthInfo.batteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN + && mHealthInfo.batteryLevel <= mCriticalBatteryLevel; if (mHealthInfo.chargerAcOnline) { mPlugType = BatteryManager.BATTERY_PLUGGED_AC; } else if (mHealthInfo.chargerUsbOnline) { @@ -509,6 +511,8 @@ public final class BatteryService extends SystemService { if (!mBatteryLevelLow) { // Should we now switch in to low battery mode? if (mPlugType == BATTERY_PLUGGED_NONE + && mHealthInfo.batteryStatus != + BatteryManager.BATTERY_STATUS_UNKNOWN && mHealthInfo.batteryLevel <= mLowBatteryWarningLevel) { mBatteryLevelLow = true; }