am 690edd3a: am 2a6edf50: am 50f86448: am 59a9884b: Merge "Do not change NetworkInfo.DetailedState." into jb-mr2-dev am: 8d55d44d27

Original change: undetermined

Change-Id: Ib3f0713976e8e23fe3d31078c133034376e2b1bb
diff --git a/core/java/android/net/NetworkInfo.java b/core/java/android/net/NetworkInfo.java
index dabc73a..4d2a70d 100644
--- a/core/java/android/net/NetworkInfo.java
+++ b/core/java/android/net/NetworkInfo.java
@@ -83,13 +83,7 @@
         /** Link has poor connectivity. */
         VERIFYING_POOR_LINK,
         /** Checking if network is a captive portal */
-        CAPTIVE_PORTAL_CHECK,
-        /**
-         * Network is connected to provisioning network
-         * TODO: Probably not needed when we add TYPE_PROVISIONING_NETWORK
-         * @hide
-         */
-        CONNECTED_TO_PROVISIONING_NETWORK
+        CAPTIVE_PORTAL_CHECK
     }
 
     /**
@@ -114,7 +108,6 @@
         stateMap.put(DetailedState.DISCONNECTED, State.DISCONNECTED);
         stateMap.put(DetailedState.FAILED, State.DISCONNECTED);
         stateMap.put(DetailedState.BLOCKED, State.DISCONNECTED);
-        stateMap.put(DetailedState.CONNECTED_TO_PROVISIONING_NETWORK, State.CONNECTED);
     }
 
     private int mNetworkType;
@@ -127,6 +120,8 @@
     private String mExtraInfo;
     private boolean mIsFailover;
     private boolean mIsRoaming;
+    private boolean mIsConnectedToProvisioningNetwork;
+
     /**
      * Indicates whether network connectivity is possible:
      */
@@ -155,6 +150,7 @@
         mState = State.UNKNOWN;
         mIsAvailable = false; // until we're told otherwise, assume unavailable
         mIsRoaming = false;
+        mIsConnectedToProvisioningNetwork = false;
     }
 
     /** {@hide} */
@@ -171,6 +167,7 @@
             mIsFailover = source.mIsFailover;
             mIsRoaming = source.mIsRoaming;
             mIsAvailable = source.mIsAvailable;
+            mIsConnectedToProvisioningNetwork = source.mIsConnectedToProvisioningNetwork;
         }
     }
 
@@ -329,6 +326,22 @@
         }
     }
 
+    /** {@hide} */
+    @VisibleForTesting
+    public boolean isConnectedToProvisioningNetwork() {
+        synchronized (this) {
+            return mIsConnectedToProvisioningNetwork;
+        }
+    }
+
+    /** {@hide} */
+    @VisibleForTesting
+    public void setIsConnectedToProvisioningNetwork(boolean val) {
+        synchronized (this) {
+            mIsConnectedToProvisioningNetwork = val;
+        }
+    }
+
     /**
      * Reports the current coarse-grained state of the network.
      * @return the coarse-grained state
@@ -412,7 +425,9 @@
             append(", extra: ").append(mExtraInfo == null ? "(none)" : mExtraInfo).
             append(", roaming: ").append(mIsRoaming).
             append(", failover: ").append(mIsFailover).
-            append(", isAvailable: ").append(mIsAvailable);
+            append(", isAvailable: ").append(mIsAvailable).
+            append(", isConnectedToProvisioningNetwork: ").
+                    append(mIsConnectedToProvisioningNetwork);
             return builder.toString();
         }
     }
@@ -440,6 +455,7 @@
             dest.writeInt(mIsFailover ? 1 : 0);
             dest.writeInt(mIsAvailable ? 1 : 0);
             dest.writeInt(mIsRoaming ? 1 : 0);
+            dest.writeInt(mIsConnectedToProvisioningNetwork ? 1 : 0);
             dest.writeString(mReason);
             dest.writeString(mExtraInfo);
         }
@@ -462,6 +478,7 @@
                 netInfo.mIsFailover = in.readInt() != 0;
                 netInfo.mIsAvailable = in.readInt() != 0;
                 netInfo.mIsRoaming = in.readInt() != 0;
+                netInfo.mIsConnectedToProvisioningNetwork = in.readInt() != 0;
                 netInfo.mReason = in.readString();
                 netInfo.mExtraInfo = in.readString();
                 return netInfo;
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 9bf2d3b..7f9dc26 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -965,8 +965,7 @@
         // Find the first Provisioning Network
         NetworkInfo provNi = null;
         for (NetworkInfo ni : getAllNetworkInfo()) {
-            if (ni.getDetailedState()
-                    == NetworkInfo.DetailedState.CONNECTED_TO_PROVISIONING_NETWORK) {
+            if (ni.isConnectedToProvisioningNetwork()) {
                 provNi = ni;
                 break;
             }
@@ -2919,7 +2918,8 @@
                     NetworkInfo.State state = info.getState();
 
                     if (VDBG || (state == NetworkInfo.State.CONNECTED) ||
-                            (state == NetworkInfo.State.DISCONNECTED)) {
+                            (state == NetworkInfo.State.DISCONNECTED) ||
+                            (state == NetworkInfo.State.SUSPENDED)) {
                         log("ConnectivityChange for " +
                             info.getTypeName() + ": " +
                             state + "/" + info.getDetailedState());
@@ -2934,7 +2934,8 @@
                     if (ConnectivityManager.isNetworkTypeMobile(info.getType())
                             && (0 != Settings.Global.getInt(mContext.getContentResolver(),
                                         Settings.Global.DEVICE_PROVISIONED, 0))
-                            && (state == NetworkInfo.State.CONNECTED)) {
+                            && ((state == NetworkInfo.State.CONNECTED)
+                                    || info.isConnectedToProvisioningNetwork())) {
                         checkMobileProvisioning(CheckMp.MAX_TIMEOUT_MS);
                     }
 
@@ -2947,8 +2948,7 @@
                     } else if (info.getDetailedState() ==
                             DetailedState.CAPTIVE_PORTAL_CHECK) {
                         handleCaptivePortalTrackerCheck(info);
-                    } else if (info.getDetailedState() ==
-                            DetailedState.CONNECTED_TO_PROVISIONING_NETWORK) {
+                    } else if (info.isConnectedToProvisioningNetwork()) {
                         /**
                          * TODO: Create ConnectivityManager.TYPE_MOBILE_PROVISIONING
                          * for now its an in between network, its a network that
@@ -4418,8 +4418,7 @@
         // If provisioning network handle as a special case,
         // otherwise launch browser with the intent directly.
         NetworkInfo ni = getProvisioningNetworkInfo();
-        if ((ni != null) && ni.getDetailedState() ==
-                    NetworkInfo.DetailedState.CONNECTED_TO_PROVISIONING_NETWORK) {
+        if ((ni != null) && ni.isConnectedToProvisioningNetwork()) {
             if (DBG) log("handleMobileProvisioningAction: on provisioning network");
             MobileDataStateTracker mdst = (MobileDataStateTracker)
                     mNetTrackers[ConnectivityManager.TYPE_MOBILE];