Chromium Code Reviews| Index: content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java |
| diff --git a/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java b/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java |
| index c7fb259088924298c307730cfe08c1966eae4892..1363a16559dc4b1eaf8514ba94584e7ba8fe159b 100644 |
| --- a/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java |
| +++ b/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java |
| @@ -9,6 +9,7 @@ import android.content.Context; |
| import android.content.Intent; |
| import android.content.IntentFilter; |
| import android.os.BatteryManager; |
| +import android.os.Build; |
| import android.util.Log; |
| import com.google.common.annotations.VisibleForTesting; |
| @@ -88,24 +89,40 @@ class BatteryStatusManager { |
| return; |
| } |
| + boolean present = intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, false) |
| + || batteryPresentByDefault(); |
|
mlamouri (slow - plz ping)
2014/06/19 18:54:07
What about this:
boolean present = ignoreBatteryP
timvolodine
2014/06/20 12:32:43
yes that's slightly different semantics so I've ma
|
| + |
| + if (!present) { |
| + // No battery, return default values. |
| + gotBatteryStatus(true, 0, Double.POSITIVE_INFINITY, 1); |
| + return; |
| + } |
| + |
| int current = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); |
| int max = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); |
| double level = (double)current / (double)max; |
| + if (level < 0 || level > 1) { |
| + // Sanity check, assume default value in this case. |
| + level = 1.0; |
| + } |
| int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); |
| - // by default assume a battery is present |
| - boolean present = intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true); |
| - boolean charging = (present && status == BatteryManager.BATTERY_STATUS_DISCHARGING) |
| - ? false : true; |
| + boolean charging = !(status == BatteryManager.BATTERY_STATUS_DISCHARGING); |
| - //TODO(timvolodine) : add proper projection for chargingTime, dischargingTime. |
| - double chargingTime = (!present || status == BatteryManager.BATTERY_STATUS_FULL) |
| + // TODO(timvolodine) : add proper projection for chargingTime, dischargingTime. |
| + double chargingTime = (status == BatteryManager.BATTERY_STATUS_FULL) |
| ? 0 : Double.POSITIVE_INFINITY; |
| double dischargingTime = Double.POSITIVE_INFINITY; |
| gotBatteryStatus(charging, chargingTime, dischargingTime, level); |
| } |
| + protected boolean batteryPresentByDefault() { |
|
mlamouri (slow - plz ping)
2014/06/19 18:54:07
Could you add a small comment explaining at a high
timvolodine
2014/06/20 12:32:43
Done.
|
| + // BatteryManager.EXTRA_PRESENT appears to be unreliable on Galaxy Nexus, |
| + // Android 4.2.1, it always reports false. See crbug.com/384348. |
| + return Build.MODEL.equals("Galaxy Nexus"); |
| + } |
| + |
| protected void gotBatteryStatus(boolean charging, double chargingTime, |
| double dischargingTime, double level) { |
| synchronized (mNativePtrLock) { |