Implement sample app route selection for legacy MediaRouter

Useful for debugging setBluetoothA2dpOn(false) bugs.

Bug: b/294968421
Test: Manually using the sample routing app.
Change-Id: I31fb154b008d6b526e69bc6a601234d9ffac2343
diff --git a/samples/MediaRoutingDemo/src/main/java/com/example/androidx/mediarouting/activities/systemrouting/source/MediaRouterSystemRoutesSource.java b/samples/MediaRoutingDemo/src/main/java/com/example/androidx/mediarouting/activities/systemrouting/source/MediaRouterSystemRoutesSource.java
index cad6fa1..21d112f 100644
--- a/samples/MediaRoutingDemo/src/main/java/com/example/androidx/mediarouting/activities/systemrouting/source/MediaRouterSystemRoutesSource.java
+++ b/samples/MediaRoutingDemo/src/main/java/com/example/androidx/mediarouting/activities/systemrouting/source/MediaRouterSystemRoutesSource.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.media.MediaRouter;
+import android.text.TextUtils;
 
 import androidx.annotation.NonNull;
 
@@ -43,7 +44,23 @@
 
                 @Override
                 public void onRouteRemoved(MediaRouter router, MediaRouter.RouteInfo info) {
-                    super.onRouteRemoved(router, info);
+                    mOnRoutesChangedListener.run();
+                }
+
+                @Override
+                public void onRouteChanged(MediaRouter router, MediaRouter.RouteInfo info) {
+                    mOnRoutesChangedListener.run();
+                }
+
+                @Override
+                public void onRouteUnselected(
+                        MediaRouter router, int type, MediaRouter.RouteInfo info) {
+                    mOnRoutesChangedListener.run();
+                }
+
+                @Override
+                public void onRouteSelected(
+                        MediaRouter router, int type, MediaRouter.RouteInfo info) {
                     mOnRoutesChangedListener.run();
                 }
             };
@@ -83,11 +100,13 @@
 
         List<SystemRouteItem> out = new ArrayList<>();
 
+        MediaRouter.RouteInfo selectedRoute =
+                mMediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_AUDIO);
         for (int i = 0; i < count; i++) {
             MediaRouter.RouteInfo info = mMediaRouter.getRouteAt(i);
             if (info.getPlaybackType() == MediaRouter.RouteInfo.PLAYBACK_TYPE_LOCAL) {
                 // We are only interested in system routes.
-                out.add(createRouteItemFor(info));
+                out.add(createRouteItemFor(info, /* isSelected= */ selectedRoute == info));
             }
         }
 
@@ -96,15 +115,27 @@
 
     @Override
     public boolean select(@NonNull SystemRouteItem item) {
-        throw new UnsupportedOperationException();
+        int routeCount = mMediaRouter.getRouteCount();
+        for (int i = 0; i < routeCount; i++) {
+            MediaRouter.RouteInfo route = mMediaRouter.getRouteAt(i);
+            if (TextUtils.equals(route.getName().toString(), item.mId)) {
+                mMediaRouter.selectRoute(MediaRouter.ROUTE_TYPE_LIVE_AUDIO, route);
+                return true;
+            }
+        }
+        return false;
     }
 
     @NonNull
-    private SystemRouteItem createRouteItemFor(@NonNull MediaRouter.RouteInfo routeInfo) {
+    private SystemRouteItem createRouteItemFor(
+            @NonNull MediaRouter.RouteInfo routeInfo, boolean isSelected) {
         SystemRouteItem.Builder builder =
                 new SystemRouteItem.Builder(getSourceId(), /* id= */ routeInfo.getName().toString())
                         .setName(routeInfo.getName().toString());
-
+        builder.setSelectionSupportState(
+                isSelected
+                        ? SystemRouteItem.SelectionSupportState.RESELECTABLE
+                        : SystemRouteItem.SelectionSupportState.SELECTABLE);
         CharSequence description = routeInfo.getDescription();
         if (description != null) {
             builder.setDescription(String.valueOf(description));