in metrics/src/main/java/com/facebook/battery/metrics/devicebattery/DeviceBatteryMetricsCollector.java [53:102]
public DeviceBatteryMetricsCollector(Context context) {
mContext = context;
// Initialize the current state
mIsCurrentlyCharging = isCharging(getBatteryIntent());
mLastUpdateMs = SystemClock.elapsedRealtime();
// Init the intentFilter
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_POWER_CONNECTED);
intentFilter.addAction(Intent.ACTION_POWER_DISCONNECTED);
// Register the receiver for power connected and disconnected
// This is not very accurate after targeting SDK 26
context.registerReceiver(
new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
long now = SystemClock.elapsedRealtime();
synchronized (DeviceBatteryMetricsCollector.this) {
switch (intent.getAction()) {
case Intent.ACTION_POWER_CONNECTED:
if (!mIsCurrentlyCharging) {
mBatteryRealtimeMs += (now - mLastUpdateMs);
} else {
// This should not happen
mChargingRealtimeMs += (now - mLastUpdateMs);
logIncorrectSequence("CONNECTED", now);
}
mIsCurrentlyCharging = true;
break;
case Intent.ACTION_POWER_DISCONNECTED:
if (mIsCurrentlyCharging) {
mChargingRealtimeMs += (now - mLastUpdateMs);
} else {
// This should not happen
mBatteryRealtimeMs += (now - mLastUpdateMs);
logIncorrectSequence("DISCONNECTED", now);
}
mIsCurrentlyCharging = false;
break;
default:
}
mLastUpdateMs = now;
}
}
},
intentFilter);
}