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

Commit 053aa3ec authored by jonerlin's avatar jonerlin Committed by Benson Li
Browse files

HFP : Correct headset battery level percentage calculation for vendor specific XEVENT event

* XEVENT report the battery level is a zero-based integer that designates the rough charge level
  think of this as the number of bars on the hypothetical battery meter in the headset.
* XEVENT report the numberOfLevels is an integer that describes the number of battery levels possible.
  If the hypothetical battery meter has a range of 0-4, this value will be 5.

Bug: 109652276
Test: paired with Plantronics headset and check the headset battery
percentage.

Change-Id: Ifdd8560626ecd124360973e0ef8fd2b5a2d6edde
parent b9051ca6
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -829,13 +829,13 @@ final class RemoteDevices {
        }
        int batteryLevel = (Integer) args[1];
        int numberOfLevels = (Integer) args[2];
        if (batteryLevel < 0 || numberOfLevels < 0 || batteryLevel > numberOfLevels) {
        if (batteryLevel < 0 || numberOfLevels <= 1 || batteryLevel > numberOfLevels) {
            Log.w(TAG, "getBatteryLevelFromXEventVsc() wrong event value, batteryLevel="
                    + String.valueOf(batteryLevel) + ", numberOfLevels=" + String.valueOf(
                    numberOfLevels));
            return BluetoothDevice.BATTERY_LEVEL_UNKNOWN;
        }
        return batteryLevel * 100 / numberOfLevels;
        return batteryLevel * 100 / (numberOfLevels - 1);
    }

    private static void errorLog(String msg) {
+6 −3
Original line number Diff line number Diff line
@@ -336,7 +336,7 @@ public class RemoteDevicesTest {
                BluetoothAssignedNumbers.PLANTRONICS, BluetoothHeadset.AT_CMD_TYPE_SET,
                getXEventArray(3, 8), mDevice1));
        verify(mAdapterService).sendBroadcast(mIntentArgument.capture(), mStringArgument.capture());
        verifyBatteryLevelChangedIntent(mDevice1, 37, mIntentArgument);
        verifyBatteryLevelChangedIntent(mDevice1, 42, mIntentArgument);
        Assert.assertEquals(AdapterService.BLUETOOTH_PERM, mStringArgument.getValue());
    }

@@ -364,8 +364,11 @@ public class RemoteDevicesTest {

    @Test
    public void testGetBatteryLevelFromXEventVsc() {
        Assert.assertEquals(37, RemoteDevices.getBatteryLevelFromXEventVsc(getXEventArray(3, 8)));
        Assert.assertEquals(100, RemoteDevices.getBatteryLevelFromXEventVsc(getXEventArray(1, 1)));
        Assert.assertEquals(42, RemoteDevices.getBatteryLevelFromXEventVsc(getXEventArray(3, 8)));
        Assert.assertEquals(100,
                RemoteDevices.getBatteryLevelFromXEventVsc(getXEventArray(10, 11)));
        Assert.assertEquals(BluetoothDevice.BATTERY_LEVEL_UNKNOWN,
                RemoteDevices.getBatteryLevelFromXEventVsc(getXEventArray(1, 1)));
        Assert.assertEquals(BluetoothDevice.BATTERY_LEVEL_UNKNOWN,
                RemoteDevices.getBatteryLevelFromXEventVsc(getXEventArray(3, 1)));
        Assert.assertEquals(BluetoothDevice.BATTERY_LEVEL_UNKNOWN,