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);