summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Greenwalt <robdroid@android.com>2009-09-10 15:06:20 -0700
committerRobert Greenwalt <robdroid@android.com>2009-09-10 18:01:01 -0700
commit8206ff30c23c76851bebc8d72a65e65b0f7f9a29 (patch)
tree82c437af24595ae95bc313124cb9df09108b1041
parentbcbcaa7edd32ba67c6290d79f7e7821c4b5b39ac (diff)
downloadframeworks_base-8206ff30c23c76851bebc8d72a65e65b0f7f9a29.zip
frameworks_base-8206ff30c23c76851bebc8d72a65e65b0f7f9a29.tar.gz
frameworks_base-8206ff30c23c76851bebc8d72a65e65b0f7f9a29.tar.bz2
Fix for multi-apn MMS access.
Mark cellular variants with the same availability, regardless of which are currently in use. Availability just means the radio is enabled and sees the network, but has no guarantees that we could connect to an APN if requested. Fix the requestRouteToHost logic to support apn switches without WIFI. bug:2093841
-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);
}
/**