diff options
-rw-r--r-- | buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt | 2 | ||||
-rw-r--r-- | mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRoute2ProviderServiceAdapter.java | 42 |
2 files changed, 36 insertions, 8 deletions
diff --git a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt index 17469a93644..89a3599901c 100644 --- a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt +++ b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt @@ -78,7 +78,7 @@ object LibraryVersions { val LOADER = Version("1.2.0-alpha01") val MEDIA = Version("1.3.0-alpha01") val MEDIA2 = Version("1.1.0-alpha02") - val MEDIAROUTER = Version("1.2.4") + val MEDIAROUTER = Version("1.2.5") val NAVIGATION = Version("2.4.0-alpha01") val PAGING = Version("3.0.0-alpha07") val PALETTE = Version("1.1.0-alpha01") diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRoute2ProviderServiceAdapter.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRoute2ProviderServiceAdapter.java index a2796299f8e..966ceb4b332 100644 --- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRoute2ProviderServiceAdapter.java +++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRoute2ProviderServiceAdapter.java @@ -292,10 +292,15 @@ class MediaRoute2ProviderServiceAdapter extends MediaRoute2ProviderService { List<MediaRouteDescriptor> routeDescriptors = (descriptor == null) ? Collections.emptyList() : descriptor.getRoutes(); - Map<String, MediaRouteDescriptor> descriptorMap = - routeDescriptors.stream().filter(Objects::nonNull) - // Ignores duplicated route IDs. - .collect(Collectors.toMap(r -> r.getId(), r -> r, (fst, snd) -> fst)); + Map<String, MediaRouteDescriptor> descriptorMap = new ArrayMap<>(); + for (MediaRouteDescriptor desc : routeDescriptors) { + // If duplicate ids exist, the last one survives. + // Aligned with MediaRouter implementation. + if (desc == null) { + continue; + } + descriptorMap.put(desc.getId(), desc); + } updateStaticSessions(descriptorMap); // Handle duplicated IDs @@ -487,11 +492,18 @@ class MediaRoute2ProviderServiceAdapter extends MediaRoute2ProviderService { RoutingSessionInfo.Builder builder = new RoutingSessionInfo.Builder(sessionId, packageName) - .addSelectedRoute(routeId) .setName(descriptor.getName()) .setVolumeHandling(descriptor.getVolumeHandling()) .setVolume(descriptor.getVolume()) .setVolumeMax(descriptor.getVolumeMax()); + + if (descriptor.getGroupMemberIds().isEmpty()) { + builder.addSelectedRoute(routeId); + } else { + for (String memberId : descriptor.getGroupMemberIds()) { + builder.addSelectedRoute(memberId); + } + } sessionRecord.setSessionInfo(builder.build()); } @@ -586,7 +598,7 @@ class MediaRoute2ProviderServiceAdapter extends MediaRoute2ProviderService { } @Override - public boolean onControlRequest(Intent intent, + public boolean onControlRequest(@NonNull Intent intent, MediaRouter.ControlRequestCallback callback) { return mRouteController.onControlRequest(intent, callback); } @@ -602,11 +614,12 @@ class MediaRoute2ProviderServiceAdapter extends MediaRoute2ProviderService { } @Override - public void onRemoveMemberRoute(String routeId) { + public void onRemoveMemberRoute(@NonNull String routeId) { // Do nothing. } } + @RequiresApi(api = Build.VERSION_CODES.R) final class SessionRecord { /** * A flag indicating whether the session is created from @@ -707,6 +720,16 @@ class MediaRoute2ProviderServiceAdapter extends MediaRoute2ProviderService { .setVolumeMax(groupRoute.getVolumeMax()) .setVolumeHandling(groupRoute.getVolumeHandling()); + builder.clearSelectedRoutes(); + + if (groupRoute.getGroupMemberIds().isEmpty()) { + builder.addSelectedRoute(mRouteId); + } else { + for (String memberRouteId : groupRoute.getGroupMemberIds()) { + builder.addSelectedRoute(memberRouteId); + } + } + Bundle controlHints = sessionInfo.getControlHints(); if (controlHints == null) { Log.w(TAG, "updateSessionInfo: controlHints is null. " @@ -752,6 +775,11 @@ class MediaRoute2ProviderServiceAdapter extends MediaRoute2ProviderService { } } + if (DEBUG) { + Log.d(TAG, "updateSessionInfo: groupRoute=" + groupRoute + + ", sessionInfo=" + mSessionInfo); + } + if ((mFlags & (SESSION_FLAG_MR2 | SESSION_FLAG_DYNAMIC)) == (SESSION_FLAG_MR2 | SESSION_FLAG_DYNAMIC) && groupRoute != null) { updateMemberRouteControllers(groupRoute.getId(), sessionInfo, mSessionInfo); |