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
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user