Don't send NetworkMonitor bcast until systemReady

bug:16913951
Change-Id: I26c5c3353c2d8821452f81765875958d5b9d385b
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index b229c4f3..dd5a7ea 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -372,6 +372,11 @@
      */
     private static final int EVENT_EXPIRE_NET_TRANSITION_WAKELOCK = 24;
 
+    /**
+     * Used internally to indicate the system is ready.
+     */
+    private static final int EVENT_SYSTEM_READY = 25;
+
 
     /** Handler used for internal events. */
     final private InternalHandler mHandler;
@@ -1437,6 +1442,8 @@
             final IntentFilter filter = new IntentFilter(Intent.ACTION_USER_PRESENT);
             mContext.registerReceiver(mUserPresentReceiver, filter);
         }
+
+        mHandler.sendMessage(mHandler.obtainMessage(EVENT_SYSTEM_READY));
     }
 
     private BroadcastReceiver mUserPresentReceiver = new BroadcastReceiver() {
@@ -2270,6 +2277,12 @@
                     handleReleaseNetworkRequest((NetworkRequest) msg.obj, msg.arg1);
                     break;
                 }
+                case EVENT_SYSTEM_READY: {
+                    for (NetworkAgentInfo nai : mNetworkAgentInfos.values()) {
+                        nai.networkMonitor.systemReady = true;
+                    }
+                    break;
+                }
             }
         }
     }
@@ -4108,6 +4121,9 @@
             new NetworkInfo(networkInfo), new LinkProperties(linkProperties),
             new NetworkCapabilities(networkCapabilities), currentScore, mContext, mTrackerHandler,
             networkMisc);
+        synchronized (this) {
+            nai.networkMonitor.systemReady = mSystemReady;
+        }
         if (VDBG) log("registerNetworkAgent " + nai);
         mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_AGENT, nai));
     }
diff --git a/services/core/java/com/android/server/connectivity/NetworkMonitor.java b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
index ae5eda3..5057994 100644
--- a/services/core/java/com/android/server/connectivity/NetworkMonitor.java
+++ b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
@@ -217,6 +217,8 @@
     private String mServer;
     private boolean mIsCaptivePortalCheckEnabled = false;
 
+    public boolean systemReady = false;
+
     private State mDefaultState = new DefaultState();
     private State mOfflineState = new OfflineState();
     private State mValidatedState = new ValidatedState();
@@ -709,6 +711,8 @@
             return;
         }
 
+        if (systemReady == false) return;
+
         Intent latencyBroadcast = new Intent(ACTION_NETWORK_CONDITIONS_MEASURED);
         switch (mNetworkAgentInfo.networkInfo.getType()) {
             case ConnectivityManager.TYPE_WIFI: