summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/net/MobileDataStateTracker.java8
-rw-r--r--core/java/android/net/NetworkInfo.java2
-rw-r--r--services/java/com/android/server/ConnectivityService.java20
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);
}
/**