OSDN Git Service

Moving STATE_DISCONNECTED broadcast.
authorTyler Gunn <tgunn@google.com>
Wed, 8 Oct 2014 21:12:38 +0000 (14:12 -0700)
committerTyler Gunn <tgunn@google.com>
Wed, 8 Oct 2014 21:12:38 +0000 (14:12 -0700)
In Telecom we were seeing a bug where we received an
ACTION_CONNECTION_STATE_CHANGEDSTATE intent indicating the disconnection
of a bluetooth headset.  The BluetoothManager in Telecom would then
query the Bluetooth service to see if there are any devices.  Despite
being informed that the device in use was disconnected, it still showed
up as connected.

To fix this, I moved the state broadcast AFTER the disconnected device is
removed from the headset state machine.  Looking through all other
disconnect broadcasts in that file, the disconnection happens AFTER in
all other cases as well.

Bug: 17899941
Change-Id: Ice4b2a5b1093e04ffe4c3241a3379aba56898792

src/com/android/bluetooth/hfp/HeadsetStateMachine.java

index abae8f0..3754632 100755 (executable)
@@ -990,8 +990,6 @@ final class HeadsetStateMachine extends StateMachine {
             switch (state) {
                 case HeadsetHalConstants.CONNECTION_STATE_DISCONNECTED:
                     if (mConnectedDevicesList.contains(device)) {
-                        broadcastConnectionState(device, BluetoothProfile.STATE_DISCONNECTED,
-                                                 BluetoothProfile.STATE_CONNECTED);
                         processWBSEvent(0, device); /* disable WBS audio parameters */
                         synchronized (HeadsetStateMachine.this) {
                             mConnectedDevicesList.remove(device);
@@ -1008,6 +1006,8 @@ final class HeadsetStateMachine extends StateMachine {
                                 processMultiHFConnected(device);
                             }
                         }
+                        broadcastConnectionState(device, BluetoothProfile.STATE_DISCONNECTED,
+                                                 BluetoothProfile.STATE_CONNECTED);
                     } else {
                         Log.e(TAG, "Disconnected from unknown device: " + device);
                     }