Make BatteryStatsHistoryIterator API compatible with Iterator
Bug: 261622968
Test: make RunSettingsRoboTests ROBOTEST_FILTER=com.google.android.settings.fuelgauge.BatteryInfoTest RELAX_USES_LIBRARY_CHECK=true
Change-Id: I4b3cf18e4714017b412485120557eb22d7039118
diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java
index ce441c8..af7dded 100644
--- a/src/com/android/settings/fuelgauge/BatteryInfo.java
+++ b/src/com/android/settings/fuelgauge/BatteryInfo.java
@@ -375,8 +375,8 @@
boolean first = true;
final BatteryStatsHistoryIterator iterator1 =
mBatteryUsageStats.iterateBatteryStatsHistory();
- final HistoryItem rec = new HistoryItem();
- while (iterator1.next(rec)) {
+ HistoryItem rec;
+ while ((rec = iterator1.next()) != null) {
pos++;
if (first) {
first = false;
@@ -420,7 +420,7 @@
if (endWalltime > startWalltime) {
final BatteryStatsHistoryIterator iterator2 =
mBatteryUsageStats.iterateBatteryStatsHistory();
- while (iterator2.next(rec) && i < N) {
+ while ((rec = iterator2.next()) != null && i < N) {
if (rec.isDeltaData()) {
curWalltime += rec.time - lastRealtime;
lastRealtime = rec.time;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
index 284dbe3..e7a9811 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
@@ -53,8 +53,6 @@
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@@ -333,28 +331,23 @@
// Mock out new data every time iterateBatteryStatsHistory is called.
doAnswer(invocation -> {
BatteryStatsHistoryIterator iterator = mock(BatteryStatsHistoryIterator.class);
- doAnswer(new Answer<Boolean>() {
- private int mCount = 0;
- private final long[] mTimes = {1000, 1500, 2000};
- private final byte[] mLevels = {99, 98, 97};
-
- @Override
- public Boolean answer(InvocationOnMock invocation) throws Throwable {
- if (mCount == mTimes.length) {
- return false;
- }
- BatteryStats.HistoryItem record = invocation.getArgument(0);
- record.cmd = BatteryStats.HistoryItem.CMD_UPDATE;
- record.time = mTimes[mCount];
- record.batteryLevel = mLevels[mCount];
- mCount++;
- return true;
- }
- }).when(iterator).next(any(BatteryStats.HistoryItem.class));
+ when(iterator.next()).thenReturn(
+ makeHistoryIterm(1000, 99),
+ makeHistoryIterm(1500, 98),
+ makeHistoryIterm(2000, 97),
+ null);
return iterator;
}).when(mBatteryUsageStats).iterateBatteryStatsHistory();
}
+ private BatteryStats.HistoryItem makeHistoryIterm(long time, int batteryLevel) {
+ BatteryStats.HistoryItem record = new BatteryStats.HistoryItem();
+ record.cmd = BatteryStats.HistoryItem.CMD_UPDATE;
+ record.time = time;
+ record.batteryLevel = (byte) batteryLevel;
+ return record;
+ }
+
private void assertOnlyHistory(BatteryInfo info) {
mockBatteryStatsHistory();
UsageView view = mock(UsageView.class);