OSDN Git Service

Infer legacy network type for ConnectivityManager.requestNetwork
authorYe Wen <ywen@google.com>
Mon, 21 Jul 2014 21:19:01 +0000 (14:19 -0700)
committerYe Wen <ywen@google.com>
Wed, 23 Jul 2014 18:41:17 +0000 (11:41 -0700)
ConnectivityManager.requestNetwork pass TYPE_NONE to
sendRequestForNetwork which prevents it from being used with legacy API
requestRouteToHostAddress. This CL infers the legacy network type
automatically from the network capabilities.

b/16324360

Change-Id: I591d38f875f42f56e8cfc157db2069c9eee0ee26

core/java/android/net/ConnectivityManager.java

index 13364cd..e31f012 100644 (file)
@@ -1084,6 +1084,65 @@ public class ConnectivityManager {
         return null;
     }
 
+    private int inferLegacyTypeForNetworkCapabilities(NetworkCapabilities netCap) {
+        if (netCap == null) {
+            return TYPE_NONE;
+        }
+        if (!netCap.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
+            return TYPE_NONE;
+        }
+        if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_CBS)) {
+            if (netCap.equals(networkCapabilitiesForFeature(TYPE_MOBILE, "enableCBS"))) {
+                return TYPE_MOBILE_CBS;
+            } else {
+                return TYPE_NONE;
+            }
+        }
+        if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_IMS)) {
+            if (netCap.equals(networkCapabilitiesForFeature(TYPE_MOBILE, "enableIMS"))) {
+                return TYPE_MOBILE_IMS;
+            } else {
+                return TYPE_NONE;
+            }
+        }
+        if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_FOTA)) {
+            if (netCap.equals(networkCapabilitiesForFeature(TYPE_MOBILE, "enableFOTA"))) {
+                return TYPE_MOBILE_FOTA;
+            } else {
+                return TYPE_NONE;
+            }
+        }
+        if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_DUN)) {
+            if (netCap.equals(networkCapabilitiesForFeature(TYPE_MOBILE, "enableDUN"))) {
+                return TYPE_MOBILE_DUN;
+            } else {
+                return TYPE_NONE;
+            }
+        }
+        if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_SUPL)) {
+            if (netCap.equals(networkCapabilitiesForFeature(TYPE_MOBILE, "enableSUPL"))) {
+                return TYPE_MOBILE_SUPL;
+            } else {
+                return TYPE_NONE;
+            }
+        }
+        if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_MMS)) {
+            if (netCap.equals(networkCapabilitiesForFeature(TYPE_MOBILE, "enableMMS"))) {
+                return TYPE_MOBILE_MMS;
+            } else {
+                return TYPE_NONE;
+            }
+        }
+        if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) {
+            if (netCap.equals(networkCapabilitiesForFeature(TYPE_MOBILE, "enableHIPRI"))) {
+                return TYPE_MOBILE_HIPRI;
+            } else {
+                return TYPE_NONE;
+            }
+        }
+        return TYPE_NONE;
+    }
+
     private int legacyTypeForNetworkCapabilities(NetworkCapabilities netCap) {
         if (netCap == null) return TYPE_NONE;
         if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_CBS)) {
@@ -1694,7 +1753,7 @@ public class ConnectivityManager {
 
     /**
      * Report a problem network to the framework.  This provides a hint to the system
-     * that there might be connectivity problems on this network and may cause 
+     * that there might be connectivity problems on this network and may cause
      * the framework to re-evaluate network connectivity and/or switch to another
      * network.
      *
@@ -2344,7 +2403,7 @@ public class ConnectivityManager {
      */
     public void requestNetwork(NetworkRequest request, NetworkCallback networkCallback) {
         sendRequestForNetwork(request.networkCapabilities, networkCallback, 0,
-                REQUEST, TYPE_NONE);
+                REQUEST, inferLegacyTypeForNetworkCapabilities(request.networkCapabilities));
     }
 
     /**
@@ -2366,7 +2425,7 @@ public class ConnectivityManager {
     public void requestNetwork(NetworkRequest request, NetworkCallback networkCallback,
             int timeoutMs) {
         sendRequestForNetwork(request.networkCapabilities, networkCallback, timeoutMs,
-                REQUEST, TYPE_NONE);
+                REQUEST, inferLegacyTypeForNetworkCapabilities(request.networkCapabilities));
     }
 
     /**