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

Commit 7c2539e2 authored by Bryce Lee's avatar Bryce Lee
Browse files

DO NOT MERGE ANYWHERE Add way to query for supported Bluetooth profiles.



Currently there is no way to get the profiles supported by the Bluetooth
adapter. Asking for a profile proxy of an unsupported profile does not
fail and can lead to code indefinitely waiting for the proxy response. This
new code will allow for checking the supported profiles before asking for
the proxies.

Bug: 26451648
Change-Id: Ie209f08058205eea39513c03b626788f5fed3293
Signed-off-by: default avatarBryce Lee <brycelee@google.com>
parent dcd0b05d
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -1420,6 +1420,36 @@ public final class BluetoothAdapter {
        return null;
    }

    /**
     * Gets the currently supported profiles by the adapter.
     *
     *<p> This can be used to check whether a profile is supported before attempting
     * to connect to its respective proxy.
     *
     * @return a list of integers indicating the ids of supported profiles as defined in
     * {@link BluetoothProfile}.
     * @hide
     */
    public List<Integer> getSupportedProfiles() {
        final ArrayList<Integer> supportedProfiles = new ArrayList<Integer>();

        try {
            synchronized (mManagerCallback) {
                if (mService != null) {
                    final long supportedProfilesBitMask = mService.getSupportedProfiles();

                    for (int i = 0; i <= BluetoothProfile.MAX_PROFILE_ID; i++) {
                        if ((supportedProfilesBitMask & (1 << i)) != 0) {
                            supportedProfiles.add(i);
                        }
                    }
                }
            }
        } catch (RemoteException e) {Log.e(TAG, "getSupportedProfiles:", e);}

        return supportedProfiles;
    }

    /**
     * Get the current connection state of the local Bluetooth adapter.
     * This can be used to check whether the local Bluetooth adapter is connected
+8 −0
Original line number Diff line number Diff line
@@ -130,6 +130,14 @@ public interface BluetoothProfile {
     */
    public static final int HEADSET_CLIENT = 16;


    /**
     * Max profile ID. This value should be updated whenever a new profile is added to match
     * the largest value assigned to a profile.
     * @hide
     */
    public static final int MAX_PROFILE_ID = 16;

    /**
     * Default priority for devices that we try to auto-connect to and
     * and allow incoming connections for the profile
+1 −0
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ interface IBluetooth
    boolean cancelBondProcess(in BluetoothDevice device);
    boolean removeBond(in BluetoothDevice device);
    int getBondState(in BluetoothDevice device);
    long getSupportedProfiles();
    int getConnectionState(in BluetoothDevice device);

    String getRemoteName(in BluetoothDevice device);