Merge "Import translations. DO NOT MERGE" into lmp-dev
diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
index bcb803b..e61b3fd 100755
--- a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
+++ b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
@@ -133,7 +133,9 @@
         }
         mProfileConnectionState.put(profile, newProfileState);
         if (newProfileState == BluetoothProfile.STATE_CONNECTED) {
-            if (!mProfiles.contains(profile)) {
+            if (profile instanceof MapProfile) {
+                profile.setPreferred(mDevice, true);
+            } else if (!mProfiles.contains(profile)) {
                 mRemovedProfiles.remove(profile);
                 mProfiles.add(profile);
                 if (profile instanceof PanProfile &&
@@ -142,15 +144,8 @@
                     mLocalNapRoleConnected = true;
                 }
             }
-            if (profile instanceof MapProfile) {
-                profile.setPreferred(mDevice, true);
-            }
         } else if (profile instanceof MapProfile &&
                 newProfileState == BluetoothProfile.STATE_DISCONNECTED) {
-            if (mProfiles.contains(profile)) {
-                mRemovedProfiles.add(profile);
-                mProfiles.remove(profile);
-            }
             profile.setPreferred(mDevice, false);
         } else if (mLocalNapRoleConnected && profile instanceof PanProfile &&
                 ((PanProfile) profile).isLocalRoleNap(mDevice) &&
diff --git a/src/com/android/settings/bluetooth/DeviceProfilesSettings.java b/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
index c94c2cf..757535a 100755
--- a/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
+++ b/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
@@ -154,6 +154,13 @@
             mProfileContainer.addPreference(pbapPref);
         }
 
+        final MapProfile mapProfile = mManager.getProfileManager().getMapProfile();
+        final int mapPermission = mCachedDevice.getMessagePermissionChoice();
+        if (mapPermission != CachedBluetoothDevice.ACCESS_UNKNOWN) {
+            CheckBoxPreference mapPreference = createProfilePreference(mapProfile);
+            mProfileContainer.addPreference(mapPreference);
+        }
+
         showOrHideProfileGroup();
     }
 
@@ -225,9 +232,13 @@
         boolean isConnected =
                 status == BluetoothProfile.STATE_CONNECTED;
 
-        if (isConnected) {
+        if (profilePref.isChecked()) {
             askDisconnect(mManager.getForegroundActivity(), profile);
         } else {
+            if (profile instanceof MapProfile) {
+                mCachedDevice.setMessagePermissionChoice(BluetoothDevice.ACCESS_ALLOWED);
+                refreshProfilePreference(profilePref, profile);
+            }
             if (profile.isPreferred(device)) {
                 // profile is preferred but not connected: disable auto-connect
                 profile.setPreferred(device, false);
@@ -259,6 +270,11 @@
             public void onClick(DialogInterface dialog, int which) {
                 device.disconnect(profile);
                 profile.setPreferred(device.getDevice(), false);
+                if (profile instanceof MapProfile) {
+                    device.setMessagePermissionChoice(BluetoothDevice.ACCESS_REJECTED);
+                    refreshProfilePreference(
+                            (CheckBoxPreference)findPreference(profile.toString()), profile);
+                }
             }
         };
 
@@ -297,6 +313,7 @@
                 mProfileContainer.removePreference(profilePref);
             }
         }
+
         showOrHideProfileGroup();
     }
 
@@ -307,7 +324,10 @@
         // Gray out checkbox while connecting and disconnecting.
         profilePref.setEnabled(!mCachedDevice.isBusy());
 
-        if (profile instanceof PbapServerProfile) {
+        if (profile instanceof MapProfile) {
+            profilePref.setChecked(mCachedDevice.getMessagePermissionChoice()
+                    == CachedBluetoothDevice.ACCESS_ALLOWED);
+        } else if (profile instanceof PbapServerProfile) {
             // Handle PBAP specially.
             profilePref.setChecked(mCachedDevice.getPhonebookPermissionChoice()
                     == CachedBluetoothDevice.ACCESS_ALLOWED);
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
index 8fff9648..2a6a759 100644
--- a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
+++ b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
@@ -309,6 +309,10 @@
         return mPbapProfile;
     }
 
+    MapProfile getMapProfile(){
+        return mMapProfile;
+    }
+
     /**
      * Fill in a list of LocalBluetoothProfile objects that are supported by
      * the local device and the remote device.
diff --git a/src/com/android/settings/bluetooth/MapProfile.java b/src/com/android/settings/bluetooth/MapProfile.java
index fb1b180..f47e24f 100644
--- a/src/com/android/settings/bluetooth/MapProfile.java
+++ b/src/com/android/settings/bluetooth/MapProfile.java
@@ -113,7 +113,7 @@
 
     public boolean connect(BluetoothDevice device) {
         if(V)Log.d(TAG,"connect() - should not get called");
-        return true; // MAP never connects out
+        return false; // MAP never connects out
     }
 
     public boolean disconnect(BluetoothDevice device) {