Android: fix battery status API charging state.

Define charging attribute in terms of whether the device is
plugged in or not. Previously it was defined in terms of
BATTERY_STATUS_DISCHARGING property but some phones report
BATTERY_STATUS_NOT_CHARGING when the battery is not charging.
Also modified the tests accordingly.

TEST=http://jsbin.com/battery-status-test
BUG=360068

Review URL: https://codereview.chromium.org/451773002

Cr-Commit-Position: refs/heads/master@{#288361}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@288361 0039d316-1c4b-4281-b951-d872f2087c98
parent dcd74902
......@@ -91,13 +91,18 @@ class BatteryStatusManager {
boolean present = ignoreBatteryPresentState() ?
true : intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, false);
int pluggedStatus = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
if (!present) {
// No battery, return default values.
if (!present || pluggedStatus == -1) {
// No battery or no plugged status: return default values.
gotBatteryStatus(true, 0, Double.POSITIVE_INFINITY, 1);
return;
}
boolean charging = pluggedStatus != 0;
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean batteryFull = status == BatteryManager.BATTERY_STATUS_FULL;
int current = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int max = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
double level = (double)current / (double)max;
......@@ -106,12 +111,11 @@ class BatteryStatusManager {
level = 1.0;
}
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean charging = !(status == BatteryManager.BATTERY_STATUS_DISCHARGING);
// TODO(timvolodine) : add proper projection for chargingTime, dischargingTime.
double chargingTime = (status == BatteryManager.BATTERY_STATUS_FULL) ?
0 : Double.POSITIVE_INFINITY;
// Currently Android does not provide charging/discharging time, as a work-around
// we could compute it manually based on level delta.
// TODO(timvolodine): add proper projection for chargingTime, dischargingTime
// (see crbug.com/401553).
double chargingTime = (charging & batteryFull) ? 0 : Double.POSITIVE_INFINITY;
double dischargingTime = Double.POSITIVE_INFINITY;
gotBatteryStatus(charging, chargingTime, dischargingTime, level);
......
......@@ -26,12 +26,13 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
}
@SmallTest
public void testOnReceiveBatteryDischarging() {
public void testOnReceiveBatteryNotPluggedIn() {
Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
intent.putExtra(BatteryManager.EXTRA_PRESENT, true);
intent.putExtra(BatteryManager.EXTRA_PLUGGED, 0);
intent.putExtra(BatteryManager.EXTRA_LEVEL, 10);
intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_DISCHARGING);
intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_NOT_CHARGING);
mBatteryStatusManager.onReceive(intent);
......@@ -41,9 +42,10 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
}
@SmallTest
public void testOnReceiveBatteryCharging() {
public void testOnReceiveBatteryPluggedInACCharging() {
Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
intent.putExtra(BatteryManager.EXTRA_PRESENT, true);
intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_AC);
intent.putExtra(BatteryManager.EXTRA_LEVEL, 50);
intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING);
......@@ -56,9 +58,26 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
}
@SmallTest
public void testOnReceiveBatteryFull() {
public void testOnReceiveBatteryPluggedInACNotCharging() {
Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
intent.putExtra(BatteryManager.EXTRA_PRESENT, true);
intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_AC);
intent.putExtra(BatteryManager.EXTRA_LEVEL, 50);
intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_NOT_CHARGING);
mBatteryStatusManager.onReceive(intent);
mBatteryStatusManager.verifyCalls("gotBatteryStatus");
mBatteryStatusManager.verifyValues(true, Double.POSITIVE_INFINITY,
Double.POSITIVE_INFINITY, 0.5);
}
@SmallTest
public void testOnReceiveBatteryPluggedInUSBFull() {
Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
intent.putExtra(BatteryManager.EXTRA_PRESENT, true);
intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_USB);
intent.putExtra(BatteryManager.EXTRA_LEVEL, 100);
intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_FULL);
......@@ -73,6 +92,18 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
public void testOnReceiveNoBattery() {
Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
intent.putExtra(BatteryManager.EXTRA_PRESENT, false);
intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_USB);
mBatteryStatusManager.onReceive(intent);
mBatteryStatusManager.verifyCalls("gotBatteryStatus");
mBatteryStatusManager.verifyValues(true, 0, Double.POSITIVE_INFINITY, 1);
}
@SmallTest
public void testOnReceiveNoPluggedStatus() {
Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
intent.putExtra(BatteryManager.EXTRA_PRESENT, true);
mBatteryStatusManager.onReceive(intent);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment