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