| 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;
|
| + }
|
| }
|
|
|