fix persistent audio on, Donot connect_audio when enter CONNECTED state

Change-Id: Ieb2c327ab562c02f293fa616e555ed5a8dc55570
diff --git a/src/com/android/bluetooth/hfp/HeadsetStateMachine.java b/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
index cdefde7..ab98f0d 100755
--- a/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
+++ b/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
@@ -260,6 +260,9 @@
                     mCurrentDevice = device;
                     transitionTo(mConnected);
                 }
+                if (isInCall()) {
+                    deferMessage(obtainMessage(CONNECT_AUDIO, mCurrentDevice));
+                }
                 break;
             case HeadsetHalConstants.CONNECTION_STATE_DISCONNECTING:
                 Log.w(TAG, "Ignore HF DISCONNECTING event, device: " + device);
@@ -284,6 +287,7 @@
             boolean retValue = HANDLED;
             switch(message.what) {
                 case CONNECT:
+                case CONNECT_AUDIO:
                     deferMessage(message);
                     break;
                 case CONNECT_TIMEOUT:
@@ -422,6 +426,10 @@
                         mIncomingDevice = null;
                         transitionTo(mConnected);
                     }
+                    // All the above conditions go from disconnect/connecting to connected
+                    if (isInCall()) {
+                        deferMessage(obtainMessage(CONNECT_AUDIO, mCurrentDevice));
+                    }
                 }
                 break;
             case HeadsetHalConstants.CONNECTION_STATE_CONNECTING:
@@ -470,9 +478,6 @@
         @Override
         public void enter() {
             log("Enter Connected: " + getCurrentMessage().what);
-            if (isInCall()) {
-                sendMessage(CONNECT_AUDIO);
-            }
         }
 
         @Override
@@ -671,7 +676,7 @@
 
         @Override
         public void enter() {
-            log("Enter Audio: " + getCurrentMessage().what);
+            log("Enter AudioOn: " + getCurrentMessage().what);
             mAudioManager.setParameters(HEADSET_NAME + "=" + getCurrentDeviceName() + ";" +
                                         HEADSET_NREC + "=on");
         }
@@ -688,13 +693,19 @@
 
             boolean retValue = HANDLED;
             switch(message.what) {
+                case DISCONNECT:
+                    deferMessage(obtainMessage(DISCONNECT, message.obj));
+                    // fall through
                 case DISCONNECT_AUDIO:
-                    // TODO(BT) when failure broadcast a audio disconnecting to connected intent
-                    //          check if device matches mCurrentDevice
-                    disconnectAudioNative(getByteAddress(mCurrentDevice));
+                    {
+                        BluetoothDevice device = (BluetoothDevice) message.obj;
+                        if (device != null && !mCurrentDevice.equals(device)) {
+                            break;
+                        }
+                        disconnectAudioNative(getByteAddress(mCurrentDevice));
+                    }
                     break;
                 case VOICE_RECOGNITION_START:
-                    // TODO(BT) should we check if device matches mCurrentDevice?
                     startVoiceRecognitionNative();
                     break;
                 case VOICE_RECOGNITION_STOP: