OSDN Git Service

am c4ef9bf8: am dc5f87ff: am 709ddd5c: Merge "Fixed multiple MAP issues." into lmp-dev
authorPauloftheWest <paulofthewest@google.com>
Mon, 29 Sep 2014 21:00:27 +0000 (21:00 +0000)
committerAndroid Git Automerger <android-git-automerger@android.com>
Mon, 29 Sep 2014 21:00:27 +0000 (21:00 +0000)
* commit 'c4ef9bf82440764609356b3364e066a4b35a0114':
  Fixed multiple MAP issues.

src/com/android/settings/bluetooth/CachedBluetoothDevice.java
src/com/android/settings/bluetooth/DeviceProfilesSettings.java
src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
src/com/android/settings/bluetooth/MapProfile.java

index bcb803b..e61b3fd 100755 (executable)
@@ -133,7 +133,9 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> {
         }
         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 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> {
                     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) &&
index c94c2cf..757535a 100755 (executable)
@@ -154,6 +154,13 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
             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 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
         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 final class DeviceProfilesSettings extends SettingsPreferenceFragment
             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 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
                 mProfileContainer.removePreference(profilePref);
             }
         }
+
         showOrHideProfileGroup();
     }
 
@@ -307,7 +324,10 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
         // 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);
index 8fff964..2a6a759 100644 (file)
@@ -309,6 +309,10 @@ final class LocalBluetoothProfileManager {
         return mPbapProfile;
     }
 
+    MapProfile getMapProfile(){
+        return mMapProfile;
+    }
+
     /**
      * Fill in a list of LocalBluetoothProfile objects that are supported by
      * the local device and the remote device.
index fb1b180..f47e24f 100644 (file)
@@ -113,7 +113,7 @@ final class MapProfile implements LocalBluetoothProfile {
 
     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) {