Merge "Allow multiple simultaneous connections for BT input devices." into honeycomb
diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
index 46391d3..88964e0 100644
--- a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
+++ b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
@@ -279,7 +279,7 @@
     }
 
     private void connectWithoutResettingTimer(boolean connectAllProfiles) {
-        // Try to initialize the profiles if there were not.
+        // Try to initialize the profiles if they were not.
         if (mProfiles.size() == 0) {
             if (!updateProfiles()) {
                 // If UUIDs are not available yet, connect will be happen
@@ -299,7 +299,6 @@
                         .getProfileManager(mLocalManager, profile);
                 if (profileManager.isPreferred(mDevice)) {
                     ++preferredProfiles;
-                    disconnectConnected(this, profile);
                     connectInt(this, profile);
                 }
             }
@@ -322,7 +321,6 @@
                 LocalBluetoothProfileManager profileManager = LocalBluetoothProfileManager
                         .getProfileManager(mLocalManager, profile);
                 profileManager.setPreferred(mDevice, true);
-                disconnectConnected(this, profile);
                 connectInt(this, profile);
             }
         }
@@ -332,25 +330,9 @@
         mConnectAttempted = SystemClock.elapsedRealtime();
         // Reset the only-show-one-error-dialog tracking variable
         mIsConnectingErrorPossible = true;
-        disconnectConnected(this, profile);
         connectInt(this, profile);
     }
 
-    private void disconnectConnected(CachedBluetoothDevice device, Profile profile) {
-        LocalBluetoothProfileManager profileManager =
-            LocalBluetoothProfileManager.getProfileManager(mLocalManager, profile);
-        CachedBluetoothDeviceManager cachedDeviceManager = mLocalManager.getCachedDeviceManager();
-        List<BluetoothDevice> devices = profileManager.getConnectedDevices();
-        if (devices == null) return;
-        for (BluetoothDevice btDevice : devices) {
-            CachedBluetoothDevice cachedDevice = cachedDeviceManager.findDevice(btDevice);
-
-            if (cachedDevice != null && !cachedDevice.equals(device)) {
-                cachedDevice.disconnect(profile);
-            }
-        }
-    }
-
     private boolean connectInt(CachedBluetoothDevice cachedDevice, Profile profile) {
         if (!cachedDevice.ensurePaired()) return false;
 
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
index 5c8d868..a2ac743 100644
--- a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
+++ b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
@@ -471,6 +471,12 @@
 
         @Override
         public boolean connect(BluetoothDevice device) {
+            List<BluetoothDevice> sinks = getConnectedDevices();
+            if (sinks != null) {
+                for (BluetoothDevice sink : sinks) {
+                    mService.disconnect(sink);
+                }
+            }
             return mService.connect(device);
         }
 
@@ -727,6 +733,12 @@
 
         @Override
         public boolean connect(BluetoothDevice device) {
+            List<BluetoothDevice> sinks = getConnectedDevices();
+            if (sinks != null) {
+                for (BluetoothDevice sink : sinks) {
+                    mService.disconnect(sink);
+                }
+            }
             return mService.connect(device);
         }