summaryrefslogtreecommitdiffstats
path: root/device/battery
diff options
context:
space:
mode:
authorppi <ppi@chromium.org>2014-12-18 09:43:13 -0800
committerCommit bot <commit-bot@chromium.org>2014-12-18 17:43:33 +0000
commit1dfc74724f2acfefbb4d783c65511d6a3f74cd9f (patch)
tree5caf0fb697d32e1f1dc4388f7d12251b0e33846f /device/battery
parentd75cf36e6fcd69ef5790061cce45bd84350fbac0 (diff)
downloadchromium_src-1dfc74724f2acfefbb4d783c65511d6a3f74cd9f.zip
chromium_src-1dfc74724f2acfefbb4d783c65511d6a3f74cd9f.tar.gz
chromium_src-1dfc74724f2acfefbb4d783c65511d6a3f74cd9f.tar.bz2
Rewrite the Android implementation of BatteryMonitor directly in Java.
This patch introduces a standalone Android implementation of the BatteryMonitor service. New implementation is written in Java without any JNI code, and is made available in the render process host using the Java ServiceRegistry. BUG=420623 Review URL: https://codereview.chromium.org/641703002 Cr-Commit-Position: refs/heads/master@{#309029}
Diffstat (limited to 'device/battery')
-rw-r--r--device/battery/BUILD.gn11
-rw-r--r--device/battery/android/BUILD.gn14
-rw-r--r--device/battery/android/battery_jni_registrar.cc27
-rw-r--r--device/battery/android/battery_jni_registrar.h20
-rw-r--r--device/battery/android/java/src/org/chromium/device/battery/BatteryMonitorFactory.java71
-rw-r--r--device/battery/android/java/src/org/chromium/device/battery/BatteryMonitorImpl.java58
-rw-r--r--device/battery/android/java/src/org/chromium/device/battery/BatteryStatusManager.java114
-rw-r--r--device/battery/android/javatests/src/org/chromium/device/battery/BatteryStatusManagerTest.java126
-rw-r--r--device/battery/battery.gyp54
-rw-r--r--device/battery/battery_status_manager_android.cc65
-rw-r--r--device/battery/battery_status_manager_android.h45
11 files changed, 265 insertions, 340 deletions
diff --git a/device/battery/BUILD.gn b/device/battery/BUILD.gn
index 5a63374..e3afef7 100644
--- a/device/battery/BUILD.gn
+++ b/device/battery/BUILD.gn
@@ -12,8 +12,6 @@ component("battery") {
"battery_export.h",
"battery_monitor_impl.cc",
"battery_monitor_impl.h",
- "battery_status_manager_android.cc",
- "battery_status_manager_android.h",
"battery_status_manager_chromeos.cc",
"battery_status_manager_default.cc",
"battery_status_manager_linux.cc",
@@ -36,15 +34,6 @@ component("battery") {
"//mojo/edk/system",
]
- if (is_android) {
- deps += [ "//device/battery/android:battery_jni_headers" ]
- sources += [
- "android/battery_jni_registrar.h",
- "android/battery_jni_registrar.cc",
- ]
- sources -= [ "battery_status_manager_default.cc" ]
- }
-
if (is_chromeos) {
configs += [ "//build/config/linux:dbus" ]
deps += [ "//chromeos:power_manager_proto" ]
diff --git a/device/battery/android/BUILD.gn b/device/battery/android/BUILD.gn
index f88cfc0..ea4d5cc 100644
--- a/device/battery/android/BUILD.gn
+++ b/device/battery/android/BUILD.gn
@@ -5,9 +5,17 @@
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")
-generate_jni("battery_jni_headers") {
- jni_package = "battery"
- sources = [
+android_library("battery_monitor_android") {
+ java_files = [
"java/src/org/chromium/device/battery/BatteryStatusManager.java",
+ "java/src/org/chromium/device/battery/BatteryMonitorImpl.java",
+ "java/src/org/chromium/device/battery/BatteryMonitorFactory.java",
+ ]
+
+ deps = [
+ "//base:base_java",
+ "//device/battery:mojo_bindings_java",
+ "//mojo/public/java:bindings",
+ "//mojo/public/java:system",
]
}
diff --git a/device/battery/android/battery_jni_registrar.cc b/device/battery/android/battery_jni_registrar.cc
deleted file mode 100644
index 91da461..0000000
--- a/device/battery/android/battery_jni_registrar.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "device/battery/android/battery_jni_registrar.h"
-
-#include "base/android/jni_android.h"
-#include "base/android/jni_registrar.h"
-#include "device/battery/battery_status_manager_android.h"
-
-namespace device {
-namespace android {
-namespace {
-
-base::android::RegistrationMethod kRegisteredMethods[] = {
- { "BatteryStatusManager", BatteryStatusManagerAndroid::Register },
-};
-
-} // namespace
-
-bool RegisterBatteryJni(JNIEnv* env) {
- return RegisterNativeMethods(
- env, kRegisteredMethods, arraysize(kRegisteredMethods));
-}
-
-} // namespace android
-} // namespace device
diff --git a/device/battery/android/battery_jni_registrar.h b/device/battery/android/battery_jni_registrar.h
deleted file mode 100644
index faf7847..0000000
--- a/device/battery/android/battery_jni_registrar.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef DEVICE_BATTERY_ANDROID_BATTERY_JNI_REGISTRAR_H_
-#define DEVICE_BATTERY_ANDROID_BATTERY_JNI_REGISTRAR_H_
-
-#include <jni.h>
-
-#include "device/battery/battery_export.h"
-
-namespace device {
-namespace android {
-
-DEVICE_BATTERY_EXPORT bool RegisterBatteryJni(JNIEnv* env);
-
-} // namespace android
-} // namespace device
-
-#endif // DEVICE_BATTERY_ANDROID_BATTERY_JNI_REGISTRAR_H_
diff --git a/device/battery/android/java/src/org/chromium/device/battery/BatteryMonitorFactory.java b/device/battery/android/java/src/org/chromium/device/battery/BatteryMonitorFactory.java
new file mode 100644
index 0000000..19498ef
--- /dev/null
+++ b/device/battery/android/java/src/org/chromium/device/battery/BatteryMonitorFactory.java
@@ -0,0 +1,71 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.device.battery;
+
+import android.content.Context;
+import android.util.Log;
+
+import org.chromium.base.ApplicationStatus;
+import org.chromium.base.ThreadUtils;
+import org.chromium.device.battery.BatteryStatusManager.BatteryStatusCallback;
+import org.chromium.mojom.device.BatteryMonitor;
+import org.chromium.mojom.device.BatteryStatus;
+
+import java.util.HashSet;
+
+/**
+ * Factory that creates instances of BatteryMonitor implementations and notifies them about battery
+ * status changes.
+ */
+public class BatteryMonitorFactory {
+ static final String TAG = "BatteryMonitorFactory";
+
+ // Backing source of battery information.
+ private final BatteryStatusManager mManager;
+ // Monitors currently interested in the battery status notifications.
+ private final HashSet<BatteryMonitorImpl> mSubscribedMonitors =
+ new HashSet<BatteryMonitorImpl>();
+
+ private final BatteryStatusCallback mCallback = new BatteryStatusCallback() {
+ @Override
+ public void onBatteryStatusChanged(BatteryStatus batteryStatus) {
+ ThreadUtils.assertOnUiThread();
+
+ for (BatteryMonitorImpl monitor : mSubscribedMonitors) {
+ monitor.didChange(batteryStatus);
+ }
+ }
+ };
+
+ public BatteryMonitorFactory() {
+ Context applicationContext = ApplicationStatus.getApplicationContext();
+ assert applicationContext != null;
+ mManager = new BatteryStatusManager(applicationContext, mCallback);
+ }
+
+ public BatteryMonitor createMonitor() {
+ ThreadUtils.assertOnUiThread();
+
+ if (mSubscribedMonitors.isEmpty() && !mManager.start()) {
+ Log.e(TAG, "BatteryStatusManager failed to start.");
+ }
+ // TODO(ppi): record the "BatteryStatus.StartAndroid" histogram here once we have a Java API
+ // for UMA - http://crbug.com/442300.
+
+ BatteryMonitorImpl monitor = new BatteryMonitorImpl(this);
+ mSubscribedMonitors.add(monitor);
+ return monitor;
+ }
+
+ void unsubscribe(BatteryMonitorImpl monitor) {
+ ThreadUtils.assertOnUiThread();
+
+ assert mSubscribedMonitors.contains(monitor);
+ mSubscribedMonitors.remove(monitor);
+ if (mSubscribedMonitors.isEmpty()) {
+ mManager.stop();
+ }
+ }
+}
diff --git a/device/battery/android/java/src/org/chromium/device/battery/BatteryMonitorImpl.java b/device/battery/android/java/src/org/chromium/device/battery/BatteryMonitorImpl.java
new file mode 100644
index 0000000..e441589
--- /dev/null
+++ b/device/battery/android/java/src/org/chromium/device/battery/BatteryMonitorImpl.java
@@ -0,0 +1,58 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.device.battery;
+
+import org.chromium.mojo.system.MojoException;
+import org.chromium.mojom.device.BatteryMonitor;
+import org.chromium.mojom.device.BatteryStatus;
+import org.chromium.mojom.device.BatteryStatusObserver;
+
+/**
+ * Android implementation of the battery monitor service defined in
+ * device/battery/battery_monitor.mojom.
+ */
+public class BatteryMonitorImpl implements BatteryMonitor {
+ // Factory that created this instance and notifies it about battery status changes.
+ private final BatteryMonitorFactory mFactory;
+ private boolean mSubscribed;
+
+ private BatteryStatusObserver mClient;
+
+ public BatteryMonitorImpl(BatteryMonitorFactory batteryMonitorFactory) {
+ mFactory = batteryMonitorFactory;
+ mSubscribed = true;
+ }
+
+ private void unsubscribe() {
+ if (mSubscribed) {
+ mFactory.unsubscribe(this);
+ mSubscribed = false;
+ }
+ }
+
+ @Override
+ public void setClient(BatteryStatusObserver client) {
+ mClient = client;
+ }
+
+ @Override
+ public void close() {
+ unsubscribe();
+ }
+
+ @Override
+ public void onConnectionError(MojoException e) {
+ unsubscribe();
+ }
+
+ /**
+ * Notifies the client passing the given battery status information.
+ */
+ void didChange(BatteryStatus batteryStatus) {
+ if (mClient != null) {
+ mClient.didChange(batteryStatus);
+ }
+ };
+}
diff --git a/device/battery/android/java/src/org/chromium/device/battery/BatteryStatusManager.java b/device/battery/android/java/src/org/chromium/device/battery/BatteryStatusManager.java
index 90c0f38..0601be1 100644
--- a/device/battery/android/java/src/org/chromium/device/battery/BatteryStatusManager.java
+++ b/device/battery/android/java/src/org/chromium/device/battery/BatteryStatusManager.java
@@ -12,20 +12,25 @@ import android.os.BatteryManager;
import android.os.Build;
import android.util.Log;
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
import org.chromium.base.VisibleForTesting;
+import org.chromium.mojom.device.BatteryStatus;
/**
- * Android implementation of the battery status APIs.
+ * Data source for battery status information. This class registers for battery status notifications
+ * from the system and calls the callback passed on construction whenever a notification is
+ * received.
*/
-@JNINamespace("device")
class BatteryStatusManager {
private static final String TAG = "BatteryStatusManager";
+ interface BatteryStatusCallback {
+ void onBatteryStatusChanged(BatteryStatus batteryStatus);
+ }
+
// A reference to the application context in order to acquire the SensorService.
private final Context mAppContext;
+ private final BatteryStatusCallback mCallback;
private final IntentFilter mFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
@@ -34,50 +39,52 @@ class BatteryStatusManager {
}
};
- // Non-zero if and only if we're listening for events.
- // To avoid race conditions on the C++ side, access must be synchronized.
- private long mNativePtr;
- // The lock to access the mNativePtr.
- private final Object mNativePtrLock = new Object();
+ // This is to workaround a Galaxy Nexus bug, see the comment in the constructor.
+ private final boolean mIgnoreBatteryPresentState;
private boolean mEnabled = false;
- protected BatteryStatusManager(Context context) {
+ private BatteryStatusManager(
+ Context context, BatteryStatusCallback callback, boolean ignoreBatteryPresentState) {
mAppContext = context.getApplicationContext();
+ mCallback = callback;
+ mIgnoreBatteryPresentState = ignoreBatteryPresentState;
}
- @CalledByNative
- static BatteryStatusManager getInstance(Context appContext) {
- return new BatteryStatusManager(appContext);
+ BatteryStatusManager(Context context, BatteryStatusCallback callback) {
+ // BatteryManager.EXTRA_PRESENT appears to be unreliable on Galaxy Nexus,
+ // Android 4.2.1, it always reports false. See http://crbug.com/384348.
+ this(context, callback, Build.MODEL.equals("Galaxy Nexus"));
+ }
+
+ /**
+ * Creates a BatteryStatusManager without the Galaxy Nexus workaround for consistency in
+ * testing.
+ */
+ static BatteryStatusManager createBatteryStatusManagerForTesting(
+ Context context, BatteryStatusCallback callback) {
+ return new BatteryStatusManager(context, callback, false);
}
/**
- * Start listening for intents
+ * Starts listening for intents.
* @return True on success.
*/
- @CalledByNative
- boolean start(long nativePtr) {
- synchronized (mNativePtrLock) {
- if (!mEnabled && mAppContext.registerReceiver(mReceiver, mFilter) != null) {
- // success
- mNativePtr = nativePtr;
- mEnabled = true;
- }
+ boolean start() {
+ if (!mEnabled && mAppContext.registerReceiver(mReceiver, mFilter) != null) {
+ // success
+ mEnabled = true;
}
return mEnabled;
}
/**
- * Stop listening to intents.
+ * Stops listening to intents.
*/
- @CalledByNative
void stop() {
- synchronized (mNativePtrLock) {
- if (mEnabled) {
- mAppContext.unregisterReceiver(mReceiver);
- mNativePtr = 0;
- mEnabled = false;
- }
+ if (mEnabled) {
+ mAppContext.unregisterReceiver(mReceiver);
+ mEnabled = false;
}
}
@@ -88,20 +95,17 @@ class BatteryStatusManager {
return;
}
- boolean present = ignoreBatteryPresentState()
- ? true : intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, false);
+ boolean present = mIgnoreBatteryPresentState
+ ? true
+ : intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, false);
int pluggedStatus = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
if (!present || pluggedStatus == -1) {
// No battery or no plugged status: return default values.
- gotBatteryStatus(true, 0, Double.POSITIVE_INFINITY, 1);
+ mCallback.onBatteryStatusChanged(new BatteryStatus());
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;
@@ -114,35 +118,17 @@ class BatteryStatusManager {
// we could compute it manually based on level delta.
// TODO(timvolodine): add proper projection for chargingTime, dischargingTime
// (see crbug.com/401553).
+ boolean charging = pluggedStatus != 0;
+ int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+ boolean batteryFull = status == BatteryManager.BATTERY_STATUS_FULL;
double chargingTime = (charging & batteryFull) ? 0 : Double.POSITIVE_INFINITY;
double dischargingTime = Double.POSITIVE_INFINITY;
- gotBatteryStatus(charging, chargingTime, dischargingTime, level);
- }
-
- /**
- * Returns whether the BatteryStatusManager should ignore the battery present state.
- * It is required for some devices that incorrectly set the EXTRA_PRESENT property.
- */
- protected boolean ignoreBatteryPresentState() {
- // 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) {
- if (mNativePtr != 0) {
- nativeGotBatteryStatus(mNativePtr, charging, chargingTime, dischargingTime, level);
- }
- }
+ BatteryStatus batteryStatus = new BatteryStatus();
+ batteryStatus.charging = charging;
+ batteryStatus.chargingTime = chargingTime;
+ batteryStatus.dischargingTime = dischargingTime;
+ batteryStatus.level = level;
+ mCallback.onBatteryStatusChanged(batteryStatus);
}
-
- /**
- * Native JNI call
- * see device/battery/battery_status_manager_android.cc
- */
- private native void nativeGotBatteryStatus(long nativeBatteryStatusManagerAndroid,
- boolean charging, double chargingTime, double dischargingTime, double level);
}
diff --git a/device/battery/android/javatests/src/org/chromium/device/battery/BatteryStatusManagerTest.java b/device/battery/android/javatests/src/org/chromium/device/battery/BatteryStatusManagerTest.java
index 4fb2d80..addcdde 100644
--- a/device/battery/android/javatests/src/org/chromium/device/battery/BatteryStatusManagerTest.java
+++ b/device/battery/android/javatests/src/org/chromium/device/battery/BatteryStatusManagerTest.java
@@ -4,25 +4,49 @@
package org.chromium.device.battery;
-import android.content.Context;
import android.content.Intent;
-
import android.os.BatteryManager;
-
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
+import org.chromium.mojom.device.BatteryStatus;
+
/**
* Test suite for BatteryStatusManager.
*/
public class BatteryStatusManagerTest extends AndroidTestCase {
+ // Values reported in the most recent callback from |mManager|.
+ private boolean mCharging = false;
+ private double mChargingTime = 0;
+ private double mDischargingTime = 0;
+ private double mLevel = 0;
+
+ private BatteryStatusManager.BatteryStatusCallback mCallback =
+ new BatteryStatusManager.BatteryStatusCallback() {
+ @Override
+ public void onBatteryStatusChanged(BatteryStatus batteryStatus) {
+ mCharging = batteryStatus.charging;
+ mChargingTime = batteryStatus.chargingTime;
+ mDischargingTime = batteryStatus.dischargingTime;
+ mLevel = batteryStatus.level;
+ }
+ };
+
+ private BatteryStatusManager mManager;
- private BatteryStatusManagerForTests mBatteryStatusManager;
+ private void verifyValues(
+ boolean charging, double chargingTime, double dischargingTime, double level) {
+ assertEquals(charging, mCharging);
+ assertEquals(chargingTime, mChargingTime);
+ assertEquals(dischargingTime, mDischargingTime);
+ assertEquals(level, mLevel);
+ }
@Override
- public void setUp() throws Exception {
+ protected void setUp() throws Exception {
super.setUp();
- mBatteryStatusManager = BatteryStatusManagerForTests.getInstance(getContext());
+ mManager =
+ BatteryStatusManager.createBatteryStatusManagerForTesting(getContext(), mCallback);
}
@SmallTest
@@ -34,11 +58,8 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_NOT_CHARGING);
- mBatteryStatusManager.onReceive(intent);
-
- mBatteryStatusManager.verifyCalls("gotBatteryStatus");
- mBatteryStatusManager.verifyValues(false, Double.POSITIVE_INFINITY,
- Double.POSITIVE_INFINITY, 0.1);
+ mManager.onReceive(intent);
+ verifyValues(false, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, 0.1);
}
@SmallTest
@@ -50,11 +71,8 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING);
- mBatteryStatusManager.onReceive(intent);
-
- mBatteryStatusManager.verifyCalls("gotBatteryStatus");
- mBatteryStatusManager.verifyValues(true, Double.POSITIVE_INFINITY,
- Double.POSITIVE_INFINITY, 0.5);
+ mManager.onReceive(intent);
+ verifyValues(true, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, 0.5);
}
@SmallTest
@@ -66,11 +84,8 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
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);
+ mManager.onReceive(intent);
+ verifyValues(true, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, 0.5);
}
@SmallTest
@@ -82,10 +97,8 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_FULL);
- mBatteryStatusManager.onReceive(intent);
-
- mBatteryStatusManager.verifyCalls("gotBatteryStatus");
- mBatteryStatusManager.verifyValues(true, 0, Double.POSITIVE_INFINITY, 1);
+ mManager.onReceive(intent);
+ verifyValues(true, 0, Double.POSITIVE_INFINITY, 1);
}
@SmallTest
@@ -94,10 +107,8 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
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);
+ mManager.onReceive(intent);
+ verifyValues(true, 0, Double.POSITIVE_INFINITY, 1);
}
@SmallTest
@@ -105,62 +116,13 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
intent.putExtra(BatteryManager.EXTRA_PRESENT, true);
- mBatteryStatusManager.onReceive(intent);
-
- mBatteryStatusManager.verifyCalls("gotBatteryStatus");
- mBatteryStatusManager.verifyValues(true, 0, Double.POSITIVE_INFINITY, 1);
+ mManager.onReceive(intent);
+ verifyValues(true, 0, Double.POSITIVE_INFINITY, 1);
}
@SmallTest
public void testStartStopSucceeds() {
- assertTrue(mBatteryStatusManager.start(0));
- mBatteryStatusManager.stop();
- }
-
- // Helper class for testing.
-
- private static class BatteryStatusManagerForTests extends BatteryStatusManager {
-
- private boolean mCharging = false;
- private double mChargingTime = 0;
- private double mDischargingTime = 0;
- private double mLevel = 0;
- private String mCalls = "";
-
- private BatteryStatusManagerForTests(Context context) {
- super(context);
- }
-
- static BatteryStatusManagerForTests getInstance(Context context) {
- return new BatteryStatusManagerForTests(context);
- }
-
- private void verifyValues(boolean charging, double chargingTime,
- double dischargingTime, double level) {
- assertEquals(charging, mCharging);
- assertEquals(chargingTime, mChargingTime);
- assertEquals(dischargingTime, mDischargingTime);
- assertEquals(level, mLevel);
- }
-
- private void verifyCalls(String names) {
- assertEquals(mCalls, names);
- }
-
- @Override
- protected boolean ignoreBatteryPresentState() {
- return false;
- }
-
- @Override
- protected void gotBatteryStatus(boolean charging, double chargingTime,
- double dischargingTime, double level) {
- mCharging = charging;
- mChargingTime = chargingTime;
- mDischargingTime = dischargingTime;
- mLevel = level;
- mCalls = mCalls.concat("gotBatteryStatus");
- }
+ assertTrue(mManager.start());
+ mManager.stop();
}
-
}
diff --git a/device/battery/battery.gyp b/device/battery/battery.gyp
index f8bbb19..3b01922 100644
--- a/device/battery/battery.gyp
+++ b/device/battery/battery.gyp
@@ -20,6 +20,35 @@
],
},
{
+ # This is needed only for a build within Android tree. TODO(ppi): remove
+ # when Android tree build is deprecated.
+ 'target_name': 'device_battery_mojo_bindings_for_webview',
+ 'type': 'none',
+ 'dependencies': [
+ 'device_battery_mojo_bindings',
+ ],
+ 'actions': [
+ {
+ # Dummy action that triggers the bindings generation and explicitly
+ # declares the java outputs, so that they are discoverable to make.
+ 'action_name': 'device_battery_mojo_bindings_dummy_action',
+ 'inputs': [
+ '<(SHARED_INTERMEDIATE_DIR)/device/battery/battery_monitor.mojom.h',
+ '<(SHARED_INTERMEDIATE_DIR)/device/battery/battery_status.mojom.h',
+ ],
+ 'outputs': [
+ '<(SHARED_INTERMEDIATE_DIR)/java_mojo/device_battery_mojo_bindings/src/org/chromium/mojom/device/BatteryMonitor.java',
+ '<(SHARED_INTERMEDIATE_DIR)/java_mojo/device_battery_mojo_bindings/src/org/chromium/mojom/device/BatteryMonitor_Internal.java',
+ '<(SHARED_INTERMEDIATE_DIR)/java_mojo/device_battery_mojo_bindings/src/org/chromium/mojom/device/BatteryStatusObserver.java',
+ '<(SHARED_INTERMEDIATE_DIR)/java_mojo/device_battery_mojo_bindings/src/org/chromium/mojom/device/BatteryStatusObserver_Internal.java',
+ '<(SHARED_INTERMEDIATE_DIR)/java_mojo/device_battery_mojo_bindings/src/org/chromium/mojom/device/BatteryStatus.java',
+ ],
+ 'action': ['touch', '<@(_outputs)'],
+ },
+ ],
+ 'hard_dependency': 1,
+ },
+ {
# GN version: //device/battery
'target_name': 'device_battery',
'type': '<(component)',
@@ -35,12 +64,8 @@
'DEVICE_BATTERY_IMPLEMENTATION',
],
'sources': [
- 'android/battery_jni_registrar.cc',
- 'android/battery_jni_registrar.h',
'battery_monitor_impl.cc',
'battery_monitor_impl.h',
- 'battery_status_manager_android.cc',
- 'battery_status_manager_android.h',
'battery_status_manager_chromeos.cc',
'battery_status_manager_default.cc',
'battery_status_manager_linux.cc',
@@ -53,14 +78,6 @@
'battery_status_service.h',
],
'conditions': [
- ['OS == "android"', {
- 'dependencies': [
- 'device_battery_jni_headers',
- ],
- 'sources!': [
- 'battery_status_manager_default.cc',
- ],
- }],
['chromeos==1', {
'dependencies': [
'../../build/linux/system.gyp:dbus',
@@ -101,21 +118,12 @@
['OS == "android"', {
'targets': [
{
- 'target_name': 'device_battery_jni_headers',
- 'type': 'none',
- 'sources': [
- 'android/java/src/org/chromium/device/battery/BatteryStatusManager.java',
- ],
- 'variables': {
- 'jni_gen_package': 'device_battery',
- },
- 'includes': [ '../../build/jni_generator.gypi' ],
- },
- {
'target_name': 'device_battery_java',
'type': 'none',
'dependencies': [
'../../base/base.gyp:base',
+ '../../mojo/mojo_public.gyp:mojo_bindings_java',
+ 'device_battery_mojo_bindings',
],
'variables': {
'java_in_dir': '../../device/battery/android/java',
diff --git a/device/battery/battery_status_manager_android.cc b/device/battery/battery_status_manager_android.cc
deleted file mode 100644
index 8faaf16..0000000
--- a/device/battery/battery_status_manager_android.cc
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "device/battery/battery_status_manager_android.h"
-
-#include "base/android/jni_android.h"
-#include "base/android/scoped_java_ref.h"
-#include "base/metrics/histogram.h"
-#include "jni/BatteryStatusManager_jni.h"
-
-using base::android::AttachCurrentThread;
-
-namespace device {
-
-BatteryStatusManagerAndroid::BatteryStatusManagerAndroid(
- const BatteryStatusService::BatteryUpdateCallback& callback)
- : callback_(callback) {
- j_manager_.Reset(
- Java_BatteryStatusManager_getInstance(
- AttachCurrentThread(), base::android::GetApplicationContext()));
-}
-
-BatteryStatusManagerAndroid::~BatteryStatusManagerAndroid() {
-}
-
-// static
-bool BatteryStatusManagerAndroid::Register(JNIEnv* env) {
- return RegisterNativesImpl(env);
-}
-
-void BatteryStatusManagerAndroid::GotBatteryStatus(JNIEnv*,
- jobject,
- jboolean charging,
- jdouble charging_time,
- jdouble discharging_time,
- jdouble level) {
- BatteryStatus status;
- status.charging = charging;
- status.charging_time = charging_time;
- status.discharging_time = discharging_time;
- status.level = level;
- callback_.Run(status);
-}
-
-bool BatteryStatusManagerAndroid::StartListeningBatteryChange() {
- bool result = Java_BatteryStatusManager_start(AttachCurrentThread(),
- j_manager_.obj(), reinterpret_cast<intptr_t>(this));
- UMA_HISTOGRAM_BOOLEAN("BatteryStatus.StartAndroid", result);
- return result;
-}
-
-void BatteryStatusManagerAndroid::StopListeningBatteryChange() {
- Java_BatteryStatusManager_stop(
- AttachCurrentThread(), j_manager_.obj());
-}
-
-// static
-scoped_ptr<BatteryStatusManager> BatteryStatusManager::Create(
- const BatteryStatusService::BatteryUpdateCallback& callback) {
- return scoped_ptr<BatteryStatusManager>(
- new BatteryStatusManagerAndroid(callback));
-}
-
-} // namespace device
diff --git a/device/battery/battery_status_manager_android.h b/device/battery/battery_status_manager_android.h
deleted file mode 100644
index e0f69ba..0000000
--- a/device/battery/battery_status_manager_android.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/android/scoped_java_ref.h"
-#include "base/macros.h"
-#include "device/battery/battery_status_manager.h"
-
-#ifndef DEVICE_BATTERY_BATTERY_STATUS_MANAGER_ANDROID_H_
-#define DEVICE_BATTERY_BATTERY_STATUS_MANAGER_ANDROID_H_
-
-namespace device {
-
-class BatteryStatusManagerAndroid : public BatteryStatusManager {
- public:
- explicit BatteryStatusManagerAndroid(
- const BatteryStatusService::BatteryUpdateCallback& callback);
- virtual ~BatteryStatusManagerAndroid();
-
- // Must be called at startup.
- static bool Register(JNIEnv* env);
-
- // Called from Java via JNI.
- void GotBatteryStatus(JNIEnv*,
- jobject,
- jboolean charging,
- jdouble charging_time,
- jdouble discharging_time,
- jdouble level);
-
- private:
- // BatteryStatusManager:
- virtual bool StartListeningBatteryChange() override;
- virtual void StopListeningBatteryChange() override;
-
- BatteryStatusService::BatteryUpdateCallback callback_;
- // Java provider of battery status info.
- base::android::ScopedJavaGlobalRef<jobject> j_manager_;
-
- DISALLOW_COPY_AND_ASSIGN(BatteryStatusManagerAndroid);
-};
-
-} // namespace device
-
-#endif // DEVICE_BATTERY_BATTERY_STATUS_MANAGER_ANDROID_H_