Make sure callback handler is in place before callbacks handled.

When making Network requests in ConnectivityManager, make sure we install the
callback prior to a response from ConnectivityService arriving causing us to
search for the callback and inadvertently not find it.

bug:15928097
Change-Id: Ie5feb9cc8f5effc19870f54dba07218b2e11d82a
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index a8b324a..05e179d 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -2208,15 +2208,15 @@
         if (need == null) throw new IllegalArgumentException("null NetworkCapabilities");
         try {
             incCallbackHandlerRefCount();
-            if (action == LISTEN) {
-                networkCallback.networkRequest = mService.listenForNetwork(need,
-                        new Messenger(sCallbackHandler), new Binder());
-            } else {
-                networkCallback.networkRequest = mService.requestNetwork(need,
-                        new Messenger(sCallbackHandler), timeoutSec, new Binder(), legacyType);
-            }
-            if (networkCallback.networkRequest != null) {
-                synchronized(sNetworkCallback) {
+            synchronized(sNetworkCallback) {
+                if (action == LISTEN) {
+                    networkCallback.networkRequest = mService.listenForNetwork(need,
+                            new Messenger(sCallbackHandler), new Binder());
+                } else {
+                    networkCallback.networkRequest = mService.requestNetwork(need,
+                            new Messenger(sCallbackHandler), timeoutSec, new Binder(), legacyType);
+                }
+                if (networkCallback.networkRequest != null) {
                     sNetworkCallback.put(networkCallback.networkRequest, networkCallback);
                 }
             }