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
diff --git a/src/com/android/bluetooth/btservice/RemoteDevices.java b/src/com/android/bluetooth/btservice/RemoteDevices.java
index 0ace54c..96b6592 100644
--- a/src/com/android/bluetooth/btservice/RemoteDevices.java
+++ b/src/com/android/bluetooth/btservice/RemoteDevices.java
@@ -829,13 +829,13 @@
         }
         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) {
diff --git a/tests/unit/src/com/android/bluetooth/btservice/RemoteDevicesTest.java b/tests/unit/src/com/android/bluetooth/btservice/RemoteDevicesTest.java
index 35215ef..bc5f0dc 100644
--- a/tests/unit/src/com/android/bluetooth/btservice/RemoteDevicesTest.java
+++ b/tests/unit/src/com/android/bluetooth/btservice/RemoteDevicesTest.java
@@ -336,7 +336,7 @@
                 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 @@
 
     @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,