Clear profile connnection status of bonded devices when BT is turned off

When BT is turned off in mid of a profile connection, sometimes
profile connection status change message with status= DISCONNECTED
does not reach Settings app which results in stale connection status
for the device when BT is enabled next time. Fixed the issue
By explicitly clearing the connection status for all paired devices
when BT is turning OFF

Change-Id: I5d0c158636f3b62eff9094821abe2ef3a7cab16e
This commit is contained in:
Ganesh Ganapathi Batta
2012-08-29 14:32:26 -07:00
committed by Matthew Xie
parent c888555f89
commit 7951b43bd9
2 changed files with 20 additions and 0 deletions

View File

@@ -119,6 +119,11 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> {
Log.d(TAG, "onProfileStateChanged: profile " + profile + Log.d(TAG, "onProfileStateChanged: profile " + profile +
" newProfileState " + newProfileState); " newProfileState " + newProfileState);
} }
if (mLocalAdapter.getBluetoothState() == BluetoothAdapter.STATE_TURNING_OFF)
{
if (Utils.D) Log.d(TAG, " BT Turninig Off...Profile conn state change ignored...");
return;
}
mProfileConnectionState.put(profile, newProfileState); mProfileConnectionState.put(profile, newProfileState);
if (newProfileState == BluetoothProfile.STATE_CONNECTED) { if (newProfileState == BluetoothProfile.STATE_CONNECTED) {
if (!mProfiles.contains(profile)) { if (!mProfiles.contains(profile)) {
@@ -328,6 +333,16 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> {
return mProfileConnectionState.get(profile); return mProfileConnectionState.get(profile);
} }
public void clearProfileConnectionState ()
{
if (Utils.D) {
Log.d(TAG," Clearing all connection state for dev:" + mDevice.getName());
}
for (LocalBluetoothProfile profile :getProfiles()) {
mProfileConnectionState.put(profile, BluetoothProfile.STATE_DISCONNECTED);
}
}
// TODO: do any of these need to run async on a background thread? // TODO: do any of these need to run async on a background thread?
private void fillData() { private void fillData() {
fetchName(); fetchName();

View File

@@ -144,6 +144,11 @@ final class CachedBluetoothDeviceManager {
if (cachedDevice.getBondState() != BluetoothDevice.BOND_BONDED) { if (cachedDevice.getBondState() != BluetoothDevice.BOND_BONDED) {
cachedDevice.setVisible(false); cachedDevice.setVisible(false);
mCachedDevices.remove(i); mCachedDevices.remove(i);
} else {
// For bonded devices, we need to clear the connection status so that
// when BT is enabled next time, device connection status shall be retrieved
// by making a binder call.
cachedDevice.clearProfileConnectionState();
} }
} }
} }