Index: device/battery/android/java/src/org/chromium/device/battery/BatteryMonitorImpl.java |
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 |
index e44158912644a43af4c2c4aaeb1f88e6cd139517..364e21a88f8381ecab2d123c400e73d14ac428d8 100644 |
--- a/device/battery/android/java/src/org/chromium/device/battery/BatteryMonitorImpl.java |
+++ b/device/battery/android/java/src/org/chromium/device/battery/BatteryMonitorImpl.java |
@@ -7,7 +7,9 @@ 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; |
+ |
+import java.util.ArrayList; |
+import java.util.List; |
/** |
* Android implementation of the battery monitor service defined in |
@@ -16,12 +18,15 @@ import org.chromium.mojom.device.BatteryStatusObserver; |
public class BatteryMonitorImpl implements BatteryMonitor { |
// Factory that created this instance and notifies it about battery status changes. |
private final BatteryMonitorFactory mFactory; |
+ private final List<QueryNextStatusResponse> mCallbacks; |
+ private BatteryStatus mStatus; |
+ private boolean mHasStatusToReport; |
private boolean mSubscribed; |
- private BatteryStatusObserver mClient; |
- |
public BatteryMonitorImpl(BatteryMonitorFactory batteryMonitorFactory) { |
mFactory = batteryMonitorFactory; |
+ mCallbacks = new ArrayList<QueryNextStatusResponse>(); |
+ mHasStatusToReport = false; |
mSubscribed = true; |
} |
@@ -33,11 +38,6 @@ public class BatteryMonitorImpl implements BatteryMonitor { |
} |
@Override |
- public void setClient(BatteryStatusObserver client) { |
- mClient = client; |
- } |
- |
- @Override |
public void close() { |
unsubscribe(); |
} |
@@ -47,12 +47,29 @@ public class BatteryMonitorImpl implements BatteryMonitor { |
unsubscribe(); |
} |
- /** |
- * Notifies the client passing the given battery status information. |
- */ |
+ @Override |
+ public void queryNextStatus(QueryNextStatusResponse callback) { |
+ mCallbacks.add(callback); |
+ |
+ if (mHasStatusToReport) { |
+ reportStatus(); |
+ } |
+ } |
+ |
void didChange(BatteryStatus batteryStatus) { |
- if (mClient != null) { |
- mClient.didChange(batteryStatus); |
+ mStatus = batteryStatus; |
+ mHasStatusToReport = true; |
+ |
+ if (!mCallbacks.isEmpty()) { |
+ reportStatus(); |
} |
- }; |
+ } |
+ |
+ void reportStatus() { |
+ for (QueryNextStatusResponse callback : mCallbacks) { |
+ callback.call(mStatus); |
+ } |
+ mCallbacks.clear(); |
+ mHasStatusToReport = false; |
+ } |
} |