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

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

Fix auto connection priority handling.

Bug: 3027023
1. user is connected to a headset. Headset is turned off.
2. User connects to another device. The priority of the first
   headset must be set to ON. We only have 1 device set at AUTO_CONNECT
   priority.

1. A remote headset sends an incoming connection. Don't set
   AUTO_CONNECT till its gets connected.
2. For outgoing connections, set it to AUTO_CONNECT in Connecting state
   since the user initated this connection.

Change-Id: Iaa211bf22b1fd99850875f7eda686c47142173ba
parent 844a6b3c
Loading
Loading
Loading
Loading
+8 −13
Original line number Diff line number Diff line
@@ -71,7 +71,6 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
    private final BluetoothService mBluetoothService;
    private final BluetoothAdapter mAdapter;
    private int   mTargetA2dpState;
    private boolean mAdjustedPriority = false;

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
@@ -326,7 +325,10 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {

        String path = mBluetoothService.getObjectPathFromAddress(device.getAddress());

        // State is DISCONNECTED
        // State is DISCONNECTED and we are connecting.
        if (getSinkPriority(device) < BluetoothA2dp.PRIORITY_AUTO_CONNECT) {
            setSinkPriority(device, BluetoothA2dp.PRIORITY_AUTO_CONNECT);
        }
        handleSinkStateChange(device, state, BluetoothA2dp.STATE_CONNECTING);

        if (!connectSinkNative(path)) {
@@ -491,14 +493,10 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
            mTargetA2dpState = -1;

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

            if (state == BluetoothA2dp.STATE_CONNECTED) {
                // We will only have 1 device with AUTO_CONNECT priority
                // To be backward compatible set everyone else to have PRIORITY_ON
                adjustOtherSinkPriorities(device);
@@ -515,15 +513,12 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
    }

    private void adjustOtherSinkPriorities(BluetoothDevice connectedDevice) {
        if (!mAdjustedPriority) {
        for (BluetoothDevice device : mAdapter.getBondedDevices()) {
            if (getSinkPriority(device) >= BluetoothA2dp.PRIORITY_AUTO_CONNECT &&
                !device.equals(connectedDevice)) {
                setSinkPriority(device, BluetoothA2dp.PRIORITY_ON);
            }
        }
            mAdjustedPriority = true;
        }
    }

    private synchronized Set<BluetoothDevice> lookupSinksMatchingStates(int[] states) {