Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cffa5665 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov
Browse files

Allow battery voltage to be -1

The default value for voltage in BatteryStatsImpl was -1, so it was
implicitly "supported" and we should be prepared to store and
retrieve this value in BatteryHistory

Bug: 321187655
Test: atest --host PowerStatsTestsRavenwood:BatteryStatsHistoryIteratorTest
Change-Id: I2bf098a56857debdea74dd3ff60d12f9dbb90744
parent 47b94341
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1899,7 +1899,7 @@ public abstract class BatteryStats {
        public short batteryTemperature;
        // Battery voltage in millivolts (mV).
        @UnsupportedAppUsage
        public char batteryVoltage;
        public short batteryVoltage;

        // The charge of the battery in micro-Ampere-hours.
        public int batteryChargeUah;
@@ -2161,7 +2161,7 @@ public abstract class BatteryStats {
            batteryPlugType = (byte)((bat>>24)&0xf);
            int bat2 = src.readInt();
            batteryTemperature = (short)(bat2&0xffff);
            batteryVoltage = (char)((bat2>>16)&0xffff);
            batteryVoltage = (short) ((bat2 >> 16) & 0xffff);
            batteryChargeUah = src.readInt();
            modemRailChargeMah = src.readDouble();
            wifiRailChargeMah = src.readDouble();
+6 −2
Original line number Diff line number Diff line
@@ -1146,7 +1146,7 @@ public class BatteryStatsHistory {
            mHistoryCur.batteryHealth = (byte) health;
            mHistoryCur.batteryPlugType = (byte) plugType;
            mHistoryCur.batteryTemperature = (short) temperature;
            mHistoryCur.batteryVoltage = (char) voltageMv;
            mHistoryCur.batteryVoltage = (short) voltageMv;
            mHistoryCur.batteryChargeUah = chargeUah;
        }
    }
@@ -2010,7 +2010,11 @@ public class BatteryStatsHistory {
        int bits = 0;
        bits = setBitField(bits, h.batteryLevel, 25, 0xfe000000 /* 7F << 25 */);
        bits = setBitField(bits, h.batteryTemperature, 15, 0x01ff8000 /* 3FF << 15 */);
        bits = setBitField(bits, h.batteryVoltage, 1, 0x00007ffe /* 3FFF << 1 */);
        short voltage = (short) h.batteryVoltage;
        if (voltage == -1) {
            voltage = 0x3FFF;
        }
        bits = setBitField(bits, voltage, 1, 0x00007ffe /* 3FFF << 1 */);
        return bits;
    }

+6 −1
Original line number Diff line number Diff line
@@ -309,7 +309,12 @@ public class BatteryStatsHistoryIterator implements Iterator<BatteryStats.Histor
    private static void readBatteryLevelInt(int batteryLevelInt, BatteryStats.HistoryItem out) {
        out.batteryLevel = (byte) ((batteryLevelInt & 0xfe000000) >>> 25);
        out.batteryTemperature = (short) ((batteryLevelInt & 0x01ff8000) >>> 15);
        out.batteryVoltage = (char) ((batteryLevelInt & 0x00007ffe) >>> 1);
        int voltage = ((batteryLevelInt & 0x00007ffe) >>> 1);
        if (voltage == 0x3FFF) {
            voltage = -1;
        }

        out.batteryVoltage = (short) voltage;
    }

    /**
+1 −1
Original line number Diff line number Diff line
@@ -842,7 +842,7 @@ public class BatteryStatsImpl extends BatteryStats {
    private int mBatteryChargeUah;
    private int mBatteryHealth;
    private int mBatteryTemperature;
    private int mBatteryVoltageMv = -1;
    private int mBatteryVoltageMv;
    @NonNull
    private final BatteryStatsHistory mHistory;
+7 −6
Original line number Diff line number Diff line
@@ -95,24 +95,24 @@ public class BatteryStatsHistoryIteratorTest {
        assertThat(item = iterator.next()).isNotNull();
        assertHistoryItem(item,
                BatteryStats.HistoryItem.CMD_UPDATE, BatteryStats.HistoryItem.EVENT_NONE,
                null, 0, 3_600_000, 90, 1_000_000);
                null, 0, -1, 3_600_000, 90, 1_000_000);

        assertThat(item = iterator.next()).isNotNull();
        assertHistoryItem(item,
                BatteryStats.HistoryItem.CMD_UPDATE, BatteryStats.HistoryItem.EVENT_NONE,
                null, 0, 2_400_000, 80, 2_000_000);
                null, 0, 3700, 2_400_000, 80, 2_000_000);

        assertThat(item = iterator.next()).isNotNull();
        assertHistoryItem(item,
                BatteryStats.HistoryItem.CMD_UPDATE,
                BatteryStats.HistoryItem.EVENT_ALARM | BatteryStats.HistoryItem.EVENT_FLAG_START,
                "foo", APP_UID, 2_400_000, 80, 3_000_000);
                "foo", APP_UID, 3700, 2_400_000, 80, 3_000_000);

        assertThat(item = iterator.next()).isNotNull();
        assertHistoryItem(item,
                BatteryStats.HistoryItem.CMD_UPDATE,
                BatteryStats.HistoryItem.EVENT_ALARM | BatteryStats.HistoryItem.EVENT_FLAG_FINISH,
                "foo", APP_UID, 2_400_000, 80, 3_001_000);
                "foo", APP_UID, 3700, 2_400_000, 80, 3_001_000);

        assertThat(iterator.hasNext()).isFalse();
        assertThat(iterator.next()).isNull();
@@ -140,7 +140,7 @@ public class BatteryStatsHistoryIteratorTest {
        mMockClock.currentTime = 3000;

        mBatteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING,
                100, /* plugType */ 0, 90, 72, 3700, 3_600_000, 4_000_000, 0, 1_000_000,
                100, /* plugType */ 0, 90, 72, -1, 3_600_000, 4_000_000, 0, 1_000_000,
                1_000_000, 1_000_000);
        mBatteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING,
                100, /* plugType */ 0, 80, 72, 3700, 2_400_000, 4_000_000, 0, 2_000_000,
@@ -303,7 +303,7 @@ public class BatteryStatsHistoryIteratorTest {
    }

    private void assertHistoryItem(BatteryStats.HistoryItem item, int command, int eventCode,
            String tag, int uid, int batteryChargeUah, int batteryLevel,
            String tag, int uid, int voltageMv, int batteryChargeUah, int batteryLevel,
            long elapsedTimeMs) {
        assertThat(item.cmd).isEqualTo(command);
        assertThat(item.eventCode).isEqualTo(eventCode);
@@ -313,6 +313,7 @@ public class BatteryStatsHistoryIteratorTest {
            assertThat(item.eventTag.string).isEqualTo(tag);
            assertThat(item.eventTag.uid).isEqualTo(uid);
        }
        assertThat((int) item.batteryVoltage).isEqualTo(voltageMv);
        assertThat(item.batteryChargeUah).isEqualTo(batteryChargeUah);
        assertThat(item.batteryLevel).isEqualTo(batteryLevel);