diff options
| author | Robert Greenwalt <robdroid@android.com> | 2010-08-18 15:11:52 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-08-18 15:11:52 -0700 |
| commit | 6b2c56a299eb05deef2b887549e29e9e9f0f2cf6 (patch) | |
| tree | 845063ea7f7af509eefe2cc434ea447e0649107f | |
| parent | 11709ab07ca2eb97dfa3fc7bb3e0996e65908ade (diff) | |
| parent | a22ae073cc727eb4cf2c6734d6ba7336d6d9e2b4 (diff) | |
| download | frameworks_base-6b2c56a299eb05deef2b887549e29e9e9f0f2cf6.zip frameworks_base-6b2c56a299eb05deef2b887549e29e9e9f0f2cf6.tar.gz frameworks_base-6b2c56a299eb05deef2b887549e29e9e9f0f2cf6.tar.bz2 | |
Merge "DO NOT MERGE Do not kill sockets going default->hipri" into gingerbread
| -rw-r--r-- | core/java/android/net/MobileDataStateTracker.java | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java index 214510d..c34cb2f 100644 --- a/core/java/android/net/MobileDataStateTracker.java +++ b/core/java/android/net/MobileDataStateTracker.java @@ -53,6 +53,10 @@ public class MobileDataStateTracker extends NetworkStateTracker { private boolean mEnabled; private BroadcastReceiver mStateReceiver; + // DEFAULT and HIPRI are the same connection. If we're one of these we need to check if + // the other is also disconnected before we reset sockets + private boolean mIsDefaultOrHipri = false; + /** * Create a new MobileDataStateTracker * @param context the application context of the caller @@ -71,6 +75,10 @@ public class MobileDataStateTracker extends NetworkStateTracker { } else { mApnTypeToWatchFor = mApnType; } + if (netType == ConnectivityManager.TYPE_MOBILE || + netType == ConnectivityManager.TYPE_MOBILE_HIPRI) { + mIsDefaultOrHipri = true; + } mPhoneService = null; if(netType == ConnectivityManager.TYPE_MOBILE) { @@ -138,6 +146,7 @@ public class MobileDataStateTracker extends NetworkStateTracker { } private class MobileDataStateReceiver extends BroadcastReceiver { + ConnectivityManager mConnectivityManager; public void onReceive(Context context, Intent intent) { synchronized(this) { if (intent.getAction().equals(TelephonyIntents. @@ -190,7 +199,26 @@ public class MobileDataStateTracker extends NetworkStateTracker { } setDetailedState(DetailedState.DISCONNECTED, reason, apnName); - if (mInterfaceName != null) { + boolean doReset = true; + if (mIsDefaultOrHipri == true) { + // both default and hipri must go down before we reset + int typeToCheck = (Phone.APN_TYPE_DEFAULT.equals(mApnType) ? + ConnectivityManager.TYPE_MOBILE_HIPRI : + ConnectivityManager.TYPE_MOBILE); + if (mConnectivityManager == null) { + mConnectivityManager = + (ConnectivityManager)context.getSystemService( + Context.CONNECTIVITY_SERVICE); + } + if (mConnectivityManager != null) { + NetworkInfo info = mConnectivityManager.getNetworkInfo( + typeToCheck); + if (info != null && info.isConnected() == true) { + doReset = false; + } + } + } + if (doReset && mInterfaceName != null) { NetworkUtils.resetConnections(mInterfaceName); } // can't do this here - ConnectivityService needs it to clear stuff |
