| Index: chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/DiscoveryCallback.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/DiscoveryCallback.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/DiscoveryCallback.java
|
| index 0ddd354d141cda4f4fcfb865ad7752e2b2e74b1d..53905faeed97a8f6a8dd4721c723b549bf838124 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/DiscoveryCallback.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/DiscoveryCallback.java
|
| @@ -4,9 +4,9 @@
|
|
|
| package org.chromium.chrome.browser.media.router.cast;
|
|
|
| +import android.support.v7.media.MediaRouteSelector;
|
| import android.support.v7.media.MediaRouter;
|
|
|
| -import org.chromium.chrome.browser.media.router.ChromeMediaRouter;
|
| import org.chromium.chrome.browser.media.router.DiscoveryDelegate;
|
|
|
| import java.util.ArrayList;
|
| @@ -21,16 +21,18 @@ import java.util.Set;
|
| */
|
| public class DiscoveryCallback extends MediaRouter.Callback {
|
| private final DiscoveryDelegate mDiscoveryDelegate;
|
| + private final MediaRouteSelector mRouteSelector;
|
| private Set<String> mSourceUrns = new HashSet<String>();
|
| private List<MediaSink> mSinks = new ArrayList<MediaSink>();
|
|
|
| public DiscoveryCallback(String sourceUrn, List<MediaSink> knownSinks,
|
| - DiscoveryDelegate delegate) {
|
| + DiscoveryDelegate delegate, MediaRouteSelector selector) {
|
| assert delegate != null;
|
| assert sourceUrn != null && !sourceUrn.isEmpty();
|
|
|
| mSinks.addAll(knownSinks);
|
| mDiscoveryDelegate = delegate;
|
| + mRouteSelector = selector;
|
|
|
| addSourceUrn(sourceUrn);
|
| }
|
| @@ -51,6 +53,8 @@ public class DiscoveryCallback extends MediaRouter.Callback {
|
|
|
| @Override
|
| public void onRouteAdded(MediaRouter router, MediaRouter.RouteInfo route) {
|
| + if (route == null || !route.matchesSelector(mRouteSelector)) return;
|
| +
|
| MediaSink sink = MediaSink.fromRoute(route);
|
| if (mSinks.contains(sink)) return;
|
| mSinks.add(sink);
|
| @@ -65,6 +69,19 @@ public class DiscoveryCallback extends MediaRouter.Callback {
|
| updateChromeMediaRouter();
|
| }
|
|
|
| + @Override
|
| + public void onRouteChanged(MediaRouter router, MediaRouter.RouteInfo route) {
|
| + // Sometimes onRouteAdded is not called for the route as it doesn't yet match the selector.
|
| + // onRouteChanged() will be called later when the matching category is added.
|
| + if (route == null) return;
|
| +
|
| + if (route.matchesSelector(mRouteSelector)) {
|
| + onRouteAdded(router, route);
|
| + } else {
|
| + onRouteRemoved(router, route);
|
| + }
|
| + }
|
| +
|
| private void updateChromeMediaRouter() {
|
| for (String sourceUrn : mSourceUrns) {
|
| mDiscoveryDelegate.onSinksReceived(sourceUrn, new ArrayList<MediaSink>(mSinks));
|
|
|