diff options
author | Ganesh Ganapathi Batta <ganeshg@broadcom.com> | 2012-08-29 14:32:26 -0700 |
---|---|---|
committer | Matthew Xie <mattx@google.com> | 2012-09-04 15:18:25 -0700 |
commit | 7951b43bd9a759b01ea994b341c102b03011ca3c (patch) | |
tree | 1c863d5e74ccf628d4c35ee30f6bed159c8d2d23 | |
parent | c888555f8907328a8625cb2301e081fcd143f2c5 (diff) | |
download | packages_apps_Settings-7951b43bd9a759b01ea994b341c102b03011ca3c.tar.gz packages_apps_Settings-7951b43bd9a759b01ea994b341c102b03011ca3c.tar.bz2 packages_apps_Settings-7951b43bd9a759b01ea994b341c102b03011ca3c.zip |
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
-rwxr-xr-x | src/com/android/settings/bluetooth/CachedBluetoothDevice.java | 15 | ||||
-rwxr-xr-x[-rw-r--r--] | src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java | 5 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java index ef223d5cf..4b19b9c11 100755 --- a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java +++ b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java @@ -119,6 +119,11 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> { Log.d(TAG, "onProfileStateChanged: profile " + profile + " 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); if (newProfileState == BluetoothProfile.STATE_CONNECTED) { if (!mProfiles.contains(profile)) { @@ -328,6 +333,16 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> { 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? private void fillData() { fetchName(); diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java b/src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java index 06be3c427..ff282cc67 100644..100755 --- a/src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java +++ b/src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java @@ -144,6 +144,11 @@ final class CachedBluetoothDeviceManager { if (cachedDevice.getBondState() != BluetoothDevice.BOND_BONDED) { cachedDevice.setVisible(false); 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(); } } } |