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:
committed by
Matthew Xie
parent
c888555f89
commit
7951b43bd9
@@ -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();
|
||||
|
5
src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java
Normal file → Executable file
5
src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java
Normal file → Executable file
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user