From 84905edb6315ac0af53141cf2f91591443d7422a Mon Sep 17 00:00:00 2001 From: Jaikumar Ganesh Date: Thu, 16 Sep 2010 18:24:42 -0700 Subject: [PATCH] Don't disconnect the same device before connecting. We Pair: Remote device sends incoming connection, we get connected. We get BondingState change and we connect. Settings app disconnects connected profiles and then connects without checking whether we are disconnecting the same device itself. How was it working before ? Settings app used to queue all commands. The disconnect followed by the connect would work but unnecessarily disconnect and then connect. With the queuing moved to framework, the connect fails since the disconnect status has not been broadcasted. Settings app shouldn't be disconnecting connected profiles. That logic should reside in the framework. There is an open bug and when the new APIs get implemented this will get removed. Change-Id: I32a7fa36ff3c3321691c55071498f985dcdcfe8e --- .../settings/bluetooth/CachedBluetoothDevice.java | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java index 48fd85d529..9b16005c49 100644 --- a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java +++ b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java @@ -86,10 +86,10 @@ public class CachedBluetoothDevice implements Comparable // See mConnectAttempted private static final long MAX_UUID_DELAY_FOR_AUTO_CONNECT = 5000; - + /** * Describes the current device and profile for logging. - * + * * @param profile Profile to describe * @return Description of the device and profile */ @@ -102,7 +102,7 @@ public class CachedBluetoothDevice implements Comparable return sb.toString(); } - + private String describe(Profile profile) { return describe(this, profile); } @@ -242,7 +242,7 @@ public class CachedBluetoothDevice implements Comparable .getProfileManager(mLocalManager, profile); if (profileManager.isPreferred(mDevice)) { ++preferredProfiles; - disconnectConnected(profile); + disconnectConnected(this, profile); connectInt(this, profile); } } @@ -265,7 +265,7 @@ public class CachedBluetoothDevice implements Comparable LocalBluetoothProfileManager profileManager = LocalBluetoothProfileManager .getProfileManager(mLocalManager, profile); profileManager.setPreferred(mDevice, false); - disconnectConnected(profile); + disconnectConnected(this, profile); connectInt(this, profile); } } @@ -275,19 +275,20 @@ public class CachedBluetoothDevice implements Comparable mConnectAttempted = SystemClock.elapsedRealtime(); // Reset the only-show-one-error-dialog tracking variable mIsConnectingErrorPossible = true; - disconnectConnected(profile); + disconnectConnected(this, profile); connectInt(this, profile); } - private void disconnectConnected(Profile profile) { + private void disconnectConnected(CachedBluetoothDevice device, Profile profile) { LocalBluetoothProfileManager profileManager = LocalBluetoothProfileManager.getProfileManager(mLocalManager, profile); CachedBluetoothDeviceManager cachedDeviceManager = mLocalManager.getCachedDeviceManager(); Set devices = profileManager.getConnectedDevices(); if (devices == null) return; - for (BluetoothDevice device : devices) { - CachedBluetoothDevice cachedDevice = cachedDeviceManager.findDevice(device); - if (cachedDevice != null) { + for (BluetoothDevice btDevice : devices) { + CachedBluetoothDevice cachedDevice = cachedDeviceManager.findDevice(btDevice); + + if (cachedDevice != null && !cachedDevice.equals(device)) { disconnectInt(cachedDevice, profile); } } -- 2.11.0