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

Commit 577dd1f3 authored by Jaikumar Ganesh's avatar Jaikumar Ganesh
Browse files

Accept incoming connections if no other sink is in NonDisconnecting state.

Bluez sends SINK_STATE_CHANGE before onAgentAuthorize, so
we may be already in CONNECTING state. This will happen with
some A2DP kits which don't like us connecting and thus we will
never be able to connect to them.

Bug:2335345
Dr No: Hiroshi
parent 24780ea6
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -21,14 +21,15 @@ import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothUuid;
import android.os.ParcelUuid;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.os.ParcelUuid;
import android.util.Log;

import java.util.HashMap;
import java.util.Set;

/**
 * TODO: Move this to
@@ -553,7 +554,7 @@ class BluetoothEventLoop {
        if (mBluetoothService.isEnabled() &&
                (BluetoothUuid.isAudioSource(uuid) || BluetoothUuid.isAvrcpTarget(uuid)
                        || BluetoothUuid.isAdvAudioDist(uuid)) &&
                        (a2dp.getNonDisconnectedSinks().size() == 0)) {
                        !isOtherSinkInNonDisconnectingState(address)) {
            BluetoothDevice device = mAdapter.getRemoteDevice(address);
            authorized = a2dp.getSinkPriority(device) > BluetoothA2dp.PRIORITY_OFF;
            if (authorized) {
@@ -568,6 +569,16 @@ class BluetoothEventLoop {
        return authorized;
    }

    boolean isOtherSinkInNonDisconnectingState(String address) {
        BluetoothA2dp a2dp = new BluetoothA2dp(mContext);
        Set<BluetoothDevice> devices = a2dp.getNonDisconnectedSinks();
        if (devices.size() == 0) return false;
        for(BluetoothDevice dev: devices) {
            if (!dev.getAddress().equals(address)) return true;
        }
        return false;
    }

    private void onAgentCancel() {
        Intent intent = new Intent(BluetoothDevice.ACTION_PAIRING_CANCEL);
        mContext.sendBroadcast(intent, BLUETOOTH_ADMIN_PERM);