Fixed multiple MAP issues.
+ Bluetooth Settings properly stores the MAP state as a shared preference. + A Bluetooth's Settings profile will display MAP even if it was previously denied. Bug: 17391677 Change-Id: I94dd7d1a75cc4fe09647c85d84d9e3651a07a673
This commit is contained in:
@@ -133,7 +133,9 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> {
|
|||||||
}
|
}
|
||||||
mProfileConnectionState.put(profile, newProfileState);
|
mProfileConnectionState.put(profile, newProfileState);
|
||||||
if (newProfileState == BluetoothProfile.STATE_CONNECTED) {
|
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);
|
mRemovedProfiles.remove(profile);
|
||||||
mProfiles.add(profile);
|
mProfiles.add(profile);
|
||||||
if (profile instanceof PanProfile &&
|
if (profile instanceof PanProfile &&
|
||||||
@@ -142,15 +144,8 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> {
|
|||||||
mLocalNapRoleConnected = true;
|
mLocalNapRoleConnected = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (profile instanceof MapProfile) {
|
|
||||||
profile.setPreferred(mDevice, true);
|
|
||||||
}
|
|
||||||
} else if (profile instanceof MapProfile &&
|
} else if (profile instanceof MapProfile &&
|
||||||
newProfileState == BluetoothProfile.STATE_DISCONNECTED) {
|
newProfileState == BluetoothProfile.STATE_DISCONNECTED) {
|
||||||
if (mProfiles.contains(profile)) {
|
|
||||||
mRemovedProfiles.add(profile);
|
|
||||||
mProfiles.remove(profile);
|
|
||||||
}
|
|
||||||
profile.setPreferred(mDevice, false);
|
profile.setPreferred(mDevice, false);
|
||||||
} else if (mLocalNapRoleConnected && profile instanceof PanProfile &&
|
} else if (mLocalNapRoleConnected && profile instanceof PanProfile &&
|
||||||
((PanProfile) profile).isLocalRoleNap(mDevice) &&
|
((PanProfile) profile).isLocalRoleNap(mDevice) &&
|
||||||
|
@@ -154,6 +154,13 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
|
|||||||
mProfileContainer.addPreference(pbapPref);
|
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();
|
showOrHideProfileGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,9 +232,13 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
|
|||||||
boolean isConnected =
|
boolean isConnected =
|
||||||
status == BluetoothProfile.STATE_CONNECTED;
|
status == BluetoothProfile.STATE_CONNECTED;
|
||||||
|
|
||||||
if (isConnected) {
|
if (profilePref.isChecked()) {
|
||||||
askDisconnect(mManager.getForegroundActivity(), profile);
|
askDisconnect(mManager.getForegroundActivity(), profile);
|
||||||
} else {
|
} else {
|
||||||
|
if (profile instanceof MapProfile) {
|
||||||
|
mCachedDevice.setMessagePermissionChoice(BluetoothDevice.ACCESS_ALLOWED);
|
||||||
|
refreshProfilePreference(profilePref, profile);
|
||||||
|
}
|
||||||
if (profile.isPreferred(device)) {
|
if (profile.isPreferred(device)) {
|
||||||
// profile is preferred but not connected: disable auto-connect
|
// profile is preferred but not connected: disable auto-connect
|
||||||
profile.setPreferred(device, false);
|
profile.setPreferred(device, false);
|
||||||
@@ -259,6 +270,11 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
|
|||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
device.disconnect(profile);
|
device.disconnect(profile);
|
||||||
profile.setPreferred(device.getDevice(), false);
|
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);
|
mProfileContainer.removePreference(profilePref);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
showOrHideProfileGroup();
|
showOrHideProfileGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,7 +324,10 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
|
|||||||
// Gray out checkbox while connecting and disconnecting.
|
// Gray out checkbox while connecting and disconnecting.
|
||||||
profilePref.setEnabled(!mCachedDevice.isBusy());
|
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.
|
// Handle PBAP specially.
|
||||||
profilePref.setChecked(mCachedDevice.getPhonebookPermissionChoice()
|
profilePref.setChecked(mCachedDevice.getPhonebookPermissionChoice()
|
||||||
== CachedBluetoothDevice.ACCESS_ALLOWED);
|
== CachedBluetoothDevice.ACCESS_ALLOWED);
|
||||||
|
@@ -309,6 +309,10 @@ final class LocalBluetoothProfileManager {
|
|||||||
return mPbapProfile;
|
return mPbapProfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MapProfile getMapProfile(){
|
||||||
|
return mMapProfile;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fill in a list of LocalBluetoothProfile objects that are supported by
|
* Fill in a list of LocalBluetoothProfile objects that are supported by
|
||||||
* the local device and the remote device.
|
* the local device and the remote device.
|
||||||
|
@@ -113,7 +113,7 @@ final class MapProfile implements LocalBluetoothProfile {
|
|||||||
|
|
||||||
public boolean connect(BluetoothDevice device) {
|
public boolean connect(BluetoothDevice device) {
|
||||||
if(V)Log.d(TAG,"connect() - should not get called");
|
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) {
|
public boolean disconnect(BluetoothDevice device) {
|
||||||
|
Reference in New Issue
Block a user