From 0f6d6bdb0ef812e047e0022307c9b5578c311042 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Thu, 9 Apr 2015 14:35:26 +0900 Subject: [PATCH] Make CALLBACK_PRECHECK actually work. Currently, CALLBACK_PRECHECK is never fired, because we attempt to send it just after a network has connected, before matching requests to that network. So notifyNetworkCallbacks scans the list of requests for the network, finds none, and does nothing. Bug: 20038463 Change-Id: Ib0c6377c45990e358f926217d7c7defa74c1d59b --- .../core/java/com/android/server/ConnectivityService.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 484908d423..557d034152 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -4237,9 +4237,10 @@ public class ConnectivityService extends IConnectivityManager.Stub networkAgent.created = true; updateLinkProperties(networkAgent, null); notifyIfacesChanged(); - notifyNetworkCallbacks(networkAgent, ConnectivityManager.CALLBACK_PRECHECK); + networkAgent.networkMonitor.sendMessage(NetworkMonitor.CMD_NETWORK_CONNECTED); scheduleUnvalidatedPrompt(networkAgent); + if (networkAgent.isVPN()) { // Temporarily disable the default proxy (not global). synchronized (mProxyLock) { @@ -4252,9 +4253,13 @@ public class ConnectivityService extends IConnectivityManager.Stub } // TODO: support proxy per network. } + // Consider network even though it is not yet validated. rematchNetworkAndRequests(networkAgent, NascentState.NOT_JUST_VALIDATED, ReapUnvalidatedNetworks.REAP); + + // This has to happen after matching the requests, because callbacks are just requests. + notifyNetworkCallbacks(networkAgent, ConnectivityManager.CALLBACK_PRECHECK); } else if (state == NetworkInfo.State.DISCONNECTED || state == NetworkInfo.State.SUSPENDED) { networkAgent.asyncChannel.disconnect();