Upstream version 11.39.266.0
[platform/framework/web/crosswalk.git] / src / content / public / android / java / src / org / chromium / content / browser / BatteryStatusManager.java
index e0846cb..d932540 100644 (file)
@@ -12,10 +12,9 @@ import android.os.BatteryManager;
 import android.os.Build;
 import android.util.Log;
 
-import com.google.common.annotations.VisibleForTesting;
-
 import org.chromium.base.CalledByNative;
 import org.chromium.base.JNINamespace;
+import org.chromium.base.VisibleForTesting;
 
 /**
  * Android implementation of the battery status APIs.
@@ -91,27 +90,31 @@ 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;
+       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);
-       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);
@@ -140,6 +143,6 @@ class BatteryStatusManager {
      * Native JNI call
      * see content/browser/battery_status/battery_status_manager.cc
      */
-    private native void nativeGotBatteryStatus(long nativeBatteryStatusManager,
+    private native void nativeGotBatteryStatus(long nativeBatteryStatusManagerAndroid,
             boolean charging, double chargingTime, double dischargingTime, double level);
 }