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));