diff options
-rw-r--r-- | core/java/android/net/MobileDataStateTracker.java | 8 | ||||
-rw-r--r-- | core/java/android/net/NetworkInfo.java | 2 | ||||
-rw-r--r-- | services/java/com/android/server/ConnectivityService.java | 20 |
3 files changed, 13 insertions, 17 deletions
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java index f88fcdc..d8db4c1 100644 --- a/core/java/android/net/MobileDataStateTracker.java +++ b/core/java/android/net/MobileDataStateTracker.java @@ -145,12 +145,14 @@ public class MobileDataStateTracker extends NetworkStateTracker { if (DBG) Log.d(TAG, mApnType + " Received " + intent.getAction() + " broadcast - state = " + state + ", oldstate = " + mMobileDataState + ", unavailable = " + unavailable + ", reason = " + - (reason == null ? "(unspecified)" : reason)); + (reason == null ? "(unspecified)" : reason) + + ", apnTypeList = " + apnTypeList); + // set this regardless of the apnTypeList. It's all the same radio/network + // underneath + mNetworkInfo.setIsAvailable(!unavailable); if (isApnTypeIncluded(apnTypeList)) { - // set this even if the apn isn't Enabled - mNetworkInfo.setIsAvailable(!unavailable); if (mEnabled == false) { // if we're not enabled but the APN Type is supported by this connection // we should record the interface name if one's provided. If the user diff --git a/core/java/android/net/NetworkInfo.java b/core/java/android/net/NetworkInfo.java index 9f53937..649cb8c 100644 --- a/core/java/android/net/NetworkInfo.java +++ b/core/java/android/net/NetworkInfo.java @@ -131,7 +131,7 @@ public class NetworkInfo implements Parcelable { mSubtypeName = subtypeName; setDetailedState(DetailedState.IDLE, null, null); mState = State.UNKNOWN; - mIsAvailable = true; + mIsAvailable = false; // until we're told otherwise, assume unavailable mIsRoaming = false; } diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index e26dd13..408a4d2 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -640,20 +640,14 @@ public class ConnectivityService extends IConnectivityManager.Stub { return false; } NetworkStateTracker tracker = mNetTrackers[networkType]; - /* - * If there's only one connected network, and it's the one requested, - * then we don't have to do anything - the requested route already - * exists. If it's not the requested network, then it's not possible - * to establish the requested route. Finally, if there is more than - * one connected network, then we must insert an entry in the routing - * table. - */ - if (getNumConnectedNetworks() > 1) { - return tracker.requestRouteToHost(hostAddress); - } else { - return (mNetAttributes[networkType].isDefault() && - tracker.getNetworkInfo().isConnected()); + + if (!tracker.getNetworkInfo().isConnected() || tracker.isTeardownRequested()) { + if (DBG) { + Log.d(TAG, "requestRouteToHost on down network (" + networkType + " - dropped"); + } + return false; } + return tracker.requestRouteToHost(hostAddress); } /** |