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

Commit aafff8a0 authored by Jaikumar Ganesh's avatar Jaikumar Ganesh
Browse files

Add a new priority for Auto Connection of A2DP.

1. PRIORITY_OFF is when user unchecks A2DP connection profile box.
2. By default, when you bond, it will be PRIORITY_ON.
3. When the profile gets connected, the priority gets set to
   PRIORITY_AUTO_CONNECT. This means that we will connect
   automatically to this profile.
4. When the user disconnects, we downgrade the priority to PRIORITY_ON,
   which means we won't reconnect automatically.

a) We need to make a similar change to Handsfree profile.
b) We need to rework the profile management design and code which
  will fix the 6 second timer that we have for A2DP reconnection.
parent 1e22cffa
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -74,9 +74,12 @@ public final class BluetoothA2dp {
    /** Playing implies connected */
    public static final int STATE_PLAYING    = 4;

    /** Default priority for a2dp devices that we try to auto-connect
     * and allow incoming connections */
    public static final int PRIORITY_AUTO_CONNECT = 1000;
    /** Default priority for a2dp devices that should allow incoming
     * connections */
    public static final int PRIORITY_AUTO = 100;
    public static final int PRIORITY_ON = 100;
    /** Default priority for a2dp devices that should not allow incoming
     * connections */
    public static final int PRIORITY_OFF = 0;
+14 −3
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
                                                   BluetoothDevice.ERROR);
                switch(bondState) {
                case BluetoothDevice.BOND_BONDED:
                    setSinkPriority(device, BluetoothA2dp.PRIORITY_AUTO);
                    setSinkPriority(device, BluetoothA2dp.PRIORITY_ON);
                    break;
                case BluetoothDevice.BOND_BONDING:
                case BluetoothDevice.BOND_NONE:
@@ -104,7 +104,7 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
                    break;
                }
            } else if (action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)) {
                if (getSinkPriority(device) > BluetoothA2dp.PRIORITY_OFF &&
                if (getSinkPriority(device) == BluetoothA2dp.PRIORITY_AUTO_CONNECT &&
                        isSinkDevice(device)) {
                    // This device is a preferred sink. Make an A2DP connection
                    // after a delay. We delay to avoid connection collisions,
@@ -171,7 +171,7 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
                // check bluetooth is still on, device is still preferred, and
                // nothing is currently connected
                if (mBluetoothService.isEnabled() &&
                        getSinkPriority(device) > BluetoothA2dp.PRIORITY_OFF &&
                        getSinkPriority(device) == BluetoothA2dp.PRIORITY_AUTO_CONNECT &&
                        lookupSinksMatchingStates(new int[] {
                            BluetoothA2dp.STATE_CONNECTING,
                            BluetoothA2dp.STATE_CONNECTED,
@@ -328,6 +328,9 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
            return true;
        }

        // Sink is being disconnected, downgrade priority from AUTO_CONNECT.
        setSinkPriority(device, BluetoothA2dp.PRIORITY_ON);

        // State is CONNECTING or CONNECTED or PLAYING
        if (!disconnectSinkNative(path)) {
            return false;
@@ -450,6 +453,14 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
            if (state == BluetoothA2dp.STATE_CONNECTING) {
                mAudioManager.setParameters("A2dpSuspended=false");
            }

            if (state == BluetoothA2dp.STATE_CONNECTING ||
                    state == BluetoothA2dp.STATE_CONNECTED) {
                // We have connected or attempting to connect.
                // Bump priority
                setSinkPriority(device, BluetoothA2dp.PRIORITY_AUTO_CONNECT);
            }

            Intent intent = new Intent(BluetoothA2dp.ACTION_SINK_STATE_CHANGED);
            intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
            intent.putExtra(BluetoothA2dp.EXTRA_PREVIOUS_SINK_STATE, prevState);