Merge "Allow disconnected BT profiles to be unchecked in Settings." into jb-mr1-dev
diff --git a/src/com/android/settings/bluetooth/DeviceProfilesSettings.java b/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
index 67d2258..335d888 100755
--- a/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
+++ b/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
@@ -241,7 +241,7 @@
             mCachedDevice.setName((String) newValue);
         } else if (preference instanceof CheckBoxPreference) {
             LocalBluetoothProfile prof = getProfileOf(preference);
-            onProfileClicked(prof);
+            onProfileClicked(prof, (CheckBoxPreference) preference);
             return false;   // checkbox will update from onDeviceAttributesChanged() callback
         } else {
             return false;
@@ -250,7 +250,7 @@
         return true;
     }
 
-    private void onProfileClicked(LocalBluetoothProfile profile) {
+    private void onProfileClicked(LocalBluetoothProfile profile, CheckBoxPreference profilePref) {
         BluetoothDevice device = mCachedDevice.getDevice();
 
         int status = profile.getConnectionStatus(device);
@@ -260,8 +260,14 @@
         if (isConnected) {
             askDisconnect(getActivity(), profile);
         } else {
-            profile.setPreferred(device, true);
-            mCachedDevice.connectProfile(profile);
+            if (profile.isPreferred(device)) {
+                // profile is preferred but not connected: disable auto-connect
+                profile.setPreferred(device, false);
+                refreshProfilePreference(profilePref, profile);
+            } else {
+                profile.setPreferred(device, true);
+                mCachedDevice.connectProfile(profile);
+            }
         }
     }
 
@@ -357,8 +363,4 @@
     private void unpairDevice() {
         mCachedDevice.unpair();
     }
-
-    private boolean getAutoConnect(LocalBluetoothProfile prof) {
-        return prof.isPreferred(mCachedDevice.getDevice());
-    }
 }
diff --git a/src/com/android/settings/bluetooth/PanProfile.java b/src/com/android/settings/bluetooth/PanProfile.java
index b9db77b..f6e0691 100755
--- a/src/com/android/settings/bluetooth/PanProfile.java
+++ b/src/com/android/settings/bluetooth/PanProfile.java
@@ -106,7 +106,8 @@
     }
 
     public boolean isPreferred(BluetoothDevice device) {
-        return true;
+        // return current connection status so profile checkbox is set correctly
+        return getConnectionStatus(device) == BluetoothProfile.STATE_CONNECTED;
     }
 
     public int getPreferred(BluetoothDevice device) {