OSDN Git Service

Fix bug managing wifi display routes.
authorJeff Brown <jeffbrown@google.com>
Thu, 9 May 2013 20:41:11 +0000 (13:41 -0700)
committerThe Android Automerger <android-build@android.com>
Fri, 10 May 2013 19:11:23 +0000 (12:11 -0700)
We could sometimes crash due to some inconsistencies in the
way the wifi display routes were updates when connecting,
disconnecting or scanning wifi displays.

Bug: 8837094
Change-Id: I10c7ccb163ec33c4ea107dfcb5074741049fe955

media/java/android/media/MediaRouter.java

index 61c55a5..9e8aeeb 100644 (file)
@@ -783,25 +783,21 @@ public class MediaRouter {
 
         for (int i = 0; i < newDisplays.length; i++) {
             final WifiDisplay d = newDisplays[i];
-            final WifiDisplay oldRemembered = findMatchingDisplay(d, oldDisplays);
-            if (oldRemembered == null) {
-                addRouteStatic(makeWifiDisplayRoute(d,
-                        findMatchingDisplay(d, availableDisplays) != null));
+            final boolean available = findMatchingDisplay(d, availableDisplays) != null;
+            RouteInfo route = findWifiDisplayRoute(d);
+            if (route == null) {
+                route = makeWifiDisplayRoute(d, available);
+                addRouteStatic(route);
                 wantScan = true;
             } else {
-                final boolean available = findMatchingDisplay(d, availableDisplays) != null;
-                final RouteInfo route = findWifiDisplayRoute(d);
                 updateWifiDisplayRoute(route, d, available, newStatus);
             }
             if (d.equals(activeDisplay)) {
-                final RouteInfo activeRoute = findWifiDisplayRoute(d);
-                if (activeRoute != null) {
-                    selectRouteStatic(activeRoute.getSupportedTypes(), activeRoute);
+                selectRouteStatic(route.getSupportedTypes(), route);
 
-                    // Don't scan if we're already connected to a wifi display,
-                    // the scanning process can cause a hiccup with some configurations.
-                    blockScan = true;
-                }
+                // Don't scan if we're already connected to a wifi display,
+                // the scanning process can cause a hiccup with some configurations.
+                blockScan = true;
             }
         }
         for (int i = 0; i < oldDisplays.length; i++) {