Properly switch MediaRouter to wired audio over a2dp.

The system gives priority to physically connected
headphones/speakers/docks/etc. Reflect this in MediaRouter and
associated UI.

Bug 6777592

Change-Id: Ibabf3d7512207117e892c99f004443490c3d0612
diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java
index 357bf4e..a256079 100644
--- a/media/java/android/media/MediaRouter.java
+++ b/media/java/android/media/MediaRouter.java
@@ -126,6 +126,15 @@
                 sStatic.mDefaultAudio.mNameResId = name;
                 dispatchRouteChanged(sStatic.mDefaultAudio);
             }
+
+            boolean a2dpEnabled;
+            try {
+                a2dpEnabled = mAudioService.isBluetoothA2dpOn();
+            } catch (RemoteException e) {
+                Log.e(TAG, "Error querying Bluetooth A2DP state", e);
+                a2dpEnabled = false;
+            }
+
             if (!TextUtils.equals(newRoutes.mBluetoothName, mCurRoutesInfo.mBluetoothName)) {
                 mCurRoutesInfo.mBluetoothName = newRoutes.mBluetoothName;
                 if (mCurRoutesInfo.mBluetoothName != null) {
@@ -135,13 +144,6 @@
                         info.mSupportedTypes = ROUTE_TYPE_LIVE_AUDIO;
                         sStatic.mBluetoothA2dpRoute = info;
                         addRoute(sStatic.mBluetoothA2dpRoute);
-                        try {
-                            if (mAudioService.isBluetoothA2dpOn()) {
-                                selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mBluetoothA2dpRoute);
-                            }
-                        } catch (RemoteException e) {
-                            Log.e(TAG, "Error selecting Bluetooth A2DP route", e);
-                        }
                     } else {
                         sStatic.mBluetoothA2dpRoute.mName = mCurRoutesInfo.mBluetoothName;
                         dispatchRouteChanged(sStatic.mBluetoothA2dpRoute);
@@ -151,6 +153,16 @@
                     sStatic.mBluetoothA2dpRoute = null;
                 }
             }
+
+            if (mBluetoothA2dpRoute != null) {
+                if (mCurRoutesInfo.mMainType != AudioRoutesInfo.MAIN_SPEAKER &&
+                        mSelectedRoute == mBluetoothA2dpRoute) {
+                    selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mDefaultAudio);
+                } else if (mCurRoutesInfo.mMainType == AudioRoutesInfo.MAIN_SPEAKER &&
+                        mSelectedRoute == mDefaultAudio && a2dpEnabled) {
+                    selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mBluetoothA2dpRoute);
+                }
+            }
         }
     }