healthd: Don't take device-scoped battery as the main system battery.
Some devices expose the battery state of stylus etc in sysfs, in addition to the whole system's main battery. Android only recognizes the first battery enumerated here. We need to filter out such HID-specific battery to let Android correctly monitor the main battery status. Bug: 136111013 Test: CtsBatterySavingTestCases on arcada Change-Id: I4cbf6e3bf883fb3d107bedd2849d8ad525538629
This commit is contained in:
parent
01c8eccca3
commit
8e4d982d52
2 changed files with 15 additions and 0 deletions
|
|
@ -233,6 +233,15 @@ int BatteryMonitor::getIntField(const String8& path) {
|
|||
return value;
|
||||
}
|
||||
|
||||
bool BatteryMonitor::isScopedPowerSupply(const char* name) {
|
||||
constexpr char kScopeDevice[] = "Device";
|
||||
|
||||
String8 path;
|
||||
path.appendFormat("%s/%s/scope", POWER_SUPPLY_SYSFS_PATH, name);
|
||||
std::string scope;
|
||||
return (readFromFile(path, &scope) > 0 && scope == kScopeDevice);
|
||||
}
|
||||
|
||||
void BatteryMonitor::updateValues(void) {
|
||||
initHealthInfo(mHealthInfo.get());
|
||||
|
||||
|
|
@ -547,6 +556,11 @@ void BatteryMonitor::init(struct healthd_config *hc) {
|
|||
break;
|
||||
|
||||
case ANDROID_POWER_SUPPLY_TYPE_BATTERY:
|
||||
// Some devices expose the battery status of sub-component like
|
||||
// stylus. Such a device-scoped battery info needs to be skipped
|
||||
// in BatteryMonitor, which is intended to report the status of
|
||||
// the battery supplying the power to the whole system.
|
||||
if (isScopedPowerSupply(name)) continue;
|
||||
mBatteryDevicePresent = true;
|
||||
|
||||
if (mHealthdConfig->batteryStatusPath.isEmpty()) {
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ class BatteryMonitor {
|
|||
PowerSupplyType readPowerSupplyType(const String8& path);
|
||||
bool getBooleanField(const String8& path);
|
||||
int getIntField(const String8& path);
|
||||
bool isScopedPowerSupply(const char* name);
|
||||
};
|
||||
|
||||
}; // namespace android
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue