diff options
-rw-r--r-- | services/core/java/com/android/server/ConnectivityService.java | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 86f8777..9945909 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -5720,6 +5720,17 @@ public class ConnectivityService extends IConnectivityManager.Stub { oldNetwork.asyncChannel.disconnect(); } + private void makeDefault(NetworkAgentInfo newNetwork) { + if (VDBG) log("Switching to new default network: " + newNetwork); + setupDataActivityTracking(newNetwork); + try { + mNetd.setDefaultNetId(newNetwork.network.netId); + } catch (Exception e) { + loge("Exception setting default network :" + e); + } + handleApplyDefaultProxy(newNetwork.linkProperties.getHttpProxy()); + } + private void handleConnectionValidated(NetworkAgentInfo newNetwork) { if (newNetwork == null) { loge("Unknown NetworkAgentInfo in handleConnectionValidated"); @@ -5813,16 +5824,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { } if (keep) { if (isNewDefault) { - if (VDBG) log("Switching to new default network: " + newNetwork); - setupDataActivityTracking(newNetwork); - try { - mNetd.setDefaultNetId(newNetwork.network.netId); - } catch (Exception e) { - loge("Exception setting default network :" + e); - } - if (newNetwork.equals(mNetworkForRequestId.get(mDefaultRequest.requestId))) { - handleApplyDefaultProxy(newNetwork.linkProperties.getHttpProxy()); - } + makeDefault(newNetwork); synchronized (ConnectivityService.this) { // have a new default network, release the transition wakelock in // a second if it's held. The second pause is to allow apps @@ -5919,6 +5921,13 @@ public class ConnectivityService extends IConnectivityManager.Stub { } // TODO: support proxy per network. } + // Make default network if we have no default. Any network is better than no network. + if (mNetworkForRequestId.get(mDefaultRequest.requestId) == null && + networkAgent.isVPN() == false && + mDefaultRequest.networkCapabilities.satisfiedByNetworkCapabilities( + networkAgent.networkCapabilities)) { + makeDefault(networkAgent); + } } else if (state == NetworkInfo.State.DISCONNECTED || state == NetworkInfo.State.SUSPENDED) { networkAgent.asyncChannel.disconnect(); |