summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGanesh Ganapathi Batta <ganeshg@broadcom.com>2012-08-29 14:32:26 -0700
committerMatthew Xie <mattx@google.com>2012-09-04 15:18:25 -0700
commit7951b43bd9a759b01ea994b341c102b03011ca3c (patch)
tree1c863d5e74ccf628d4c35ee30f6bed159c8d2d23
parentc888555f8907328a8625cb2301e081fcd143f2c5 (diff)
downloadpackages_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-xsrc/com/android/settings/bluetooth/CachedBluetoothDevice.java15
-rwxr-xr-x[-rw-r--r--]src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java5
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();
}
}
}