Merge "DO NOT MERGE Do not kill sockets going default->hipri" into gingerbread

This commit is contained in:
Robert Greenwalt
2010-08-18 15:11:52 -07:00
committed by Android (Google) Code Review

View File

@@ -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