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

Commit 3ffc5f1e authored by Jack He's avatar Jack He
Browse files

Add APIs to get remote device's battery level (1/2)

* Add BluetoothDevice.getBatteryLevel() API to retreive battery level
  information of remote device
* Add BluetoothDevice.ACTION_BATTERY_LEVEL_CHANGED intent to notify user
  that remote device's battery level has changed

Bug: 35874078
Test: make, pair with devices and use them
Change-Id: I41051ee25383f5f3a1e505aef6f8c526385f58bd
Merged-In: I41051ee25383f5f3a1e505aef6f8c526385f58bd
(cherry picked from commit 1d312bfa78c25e0e1d6ea25b2c027e2efdd5a418)
parent 6dd28a39
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
@@ -202,6 +202,34 @@ public final class BluetoothDevice implements Parcelable {
    public static final String ACTION_BOND_STATE_CHANGED =
            "android.bluetooth.device.action.BOND_STATE_CHANGED";

    /**
     * Broadcast Action: Indicates the battery level of a remote device has
     * been retrieved for the first time, or changed since the last retrieval
     * <p>Always contains the extra fields {@link #EXTRA_DEVICE} and {@link
     * #EXTRA_BATTERY_LEVEL}.
     * <p>Requires {@link android.Manifest.permission#BLUETOOTH} to receive.
     * @hide
     */
    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
    public static final String ACTION_BATTERY_LEVEL_CHANGED =
            "android.bluetooth.device.action.BATTERY_LEVEL_CHANGED";

    /**
     * Used as an Integer extra field in {@link #ACTION_BATTERY_LEVEL_CHANGED}
     * intent. It contains the most recently retrieved battery level information
     * ranging from 0% to 100% for a remote device, {@link #BATTERY_LEVEL_UNKNOWN}
     * when the valid is unknown or there is an error
     * @hide
     */
    public static final String EXTRA_BATTERY_LEVEL =
            "android.bluetooth.device.extra.BATTERY_LEVEL";

    /**
     * Used as the unknown value for {@link #EXTRA_BATTERY_LEVEL} and {@link #getBatteryLevel()}
     * @hide
     */
    public static final int BATTERY_LEVEL_UNKNOWN = -1;

    /**
     * Used as a Parcelable {@link BluetoothDevice} extra field in every intent
     * broadcast by this class. It contains the {@link BluetoothDevice} that
@@ -860,6 +888,27 @@ public final class BluetoothDevice implements Parcelable {
        return name;
    }

    /**
     * Get the most recent identified battery level of this Bluetooth device
     * <p>Requires {@link android.Manifest.permission#BLUETOOTH}
     *
     * @return Battery level in percents from 0 to 100, or {@link #BATTERY_LEVEL_UNKNOWN} if
     *         Bluetooth is disabled, or device is disconnected, or does not have any battery
     *         reporting service, or return value is invalid
     * @hide
     */
    @RequiresPermission(Manifest.permission.BLUETOOTH)
    public int getBatteryLevel() {
        if (sService == null) {
            Log.e(TAG, "Bluetooth disabled. Cannot get remote device battery level");
            return BATTERY_LEVEL_UNKNOWN;
        }
        try {
            return sService.getBatteryLevel(this);
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        return BATTERY_LEVEL_UNKNOWN;
    }

    /**
     * Start the bonding (pairing) process with the remote device.
     * <p>This is an asynchronous call, it will return immediately. Register
+5 −6
Original line number Diff line number Diff line
@@ -227,14 +227,13 @@ public final class BluetoothHeadset implements BluetoothProfile {
     *
     * <p>This intent will have 3 extras:
     * <ul>
     *   <li> {@link #EXTRA_IND_ID} - The Assigned number of headset Indicator which is supported by
                                        the headset ( as indicated by AT+BIND
                                        command in the SLC sequence).or whose value
                                        is changed (indicated by AT+BIEV command)</li>
     *   <li> {@link #EXTRA_IND_VALUE}- The updated value of headset indicator. </li>
     *   <li> {@link #EXTRA_HF_INDICATORS_IND_ID} - The Assigned number of headset Indicator which
     *              is supported by the headset ( as indicated by AT+BIND command in the SLC
     *              sequence).or whose value is changed (indicated by AT+BIEV command) </li>
     *   <li> {@link #EXTRA_HF_INDICATORS_IND_VALUE}- The updated value of headset indicator. </li>
     *   <li> {@link BluetoothDevice#EXTRA_DEVICE} - The remote device. </li>
     * </ul>
     * <p>{@link #EXTRA_IND_ID} is defined by Bluetooth SIG and each of the indicators are
     * <p>{@link #EXTRA_HF_INDICATORS_IND_ID} is defined by Bluetooth SIG and each of the indicators are
     * given an assigned number. Below shows the assigned number of Indicator added so far
     * - Enhanced Safety - 1
     * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission to
+1 −0
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ interface IBluetooth
    ParcelUuid[] getRemoteUuids(in BluetoothDevice device);
    boolean fetchRemoteUuids(in BluetoothDevice device);
    boolean sdpSearch(in BluetoothDevice device, in ParcelUuid uuid);
    int getBatteryLevel(in BluetoothDevice device);

    boolean setPin(in BluetoothDevice device, boolean accept, int len, in byte[] pinCode);
    boolean setPasskey(in BluetoothDevice device, boolean accept, int len, in byte[]