am f6adae78: am 47dad8fa: Merge "Fix bug 2619062 Music is routed to Phone speaker, though it is connected to A2DP media profile" into froyo

Merge commit 'f6adae7866e893afa05b5838bdd244648a66ac3f' into kraken

* commit 'f6adae7866e893afa05b5838bdd244648a66ac3f':
  Fix bug 2619062 Music is routed to Phone speaker, though it is
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 97b96bc..d55d0a5 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -1751,10 +1751,17 @@
 
     }
 
-    private void cancelA2dpDeviceTimeout(String address) {
+    private void cancelA2dpDeviceTimeout() {
         mAudioHandler.removeMessages(MSG_BTA2DP_DOCK_TIMEOUT);
     }
 
+    private boolean hasScheduledA2dpDockTimeout() {
+        return mAudioHandler.hasMessages(MSG_BTA2DP_DOCK_TIMEOUT);
+    }
+
+    /* cache of the address of the last dock the device was connected to */
+    private String mDockAddress;
+
     /**
      * Receiver for misc intent broadcasts the Phone app cares about.
      */
@@ -1805,7 +1812,15 @@
                               state == BluetoothA2dp.STATE_PLAYING)) {
                     if (btDevice.isBluetoothDock()) {
                         // this could be a reconnection after a transient disconnection
-                        cancelA2dpDeviceTimeout(address);
+                        cancelA2dpDeviceTimeout();
+                        mDockAddress = address;
+                    } else {
+                        // this could be a connection of another A2DP device before the timeout of
+                        // a dock: cancel the dock timeout, and make the dock unavailable now
+                        if(hasScheduledA2dpDockTimeout()) {
+                            cancelA2dpDeviceTimeout();
+                            makeA2dpDeviceUnavailableNow(mDockAddress);
+                        }
                     }
                     makeA2dpDeviceAvailable(address);
                 }