Loading core/java/android/net/MobileDataStateTracker.java +105 −74 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.os.RemoteException; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.ServiceManager; import com.android.internal.telephony.ITelephony; Loading Loading @@ -50,7 +51,6 @@ public class MobileDataStateTracker implements NetworkStateTracker { private ITelephony mPhoneService; private String mApnType; private BroadcastReceiver mStateReceiver; private static String[] sDnsPropNames; private NetworkInfo mNetworkInfo; private boolean mTeardownRequested = false; Loading @@ -61,6 +61,10 @@ public class MobileDataStateTracker implements NetworkStateTracker { private int mDefaultGatewayAddr = 0; private boolean mDefaultRouteSet = false; // 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 Loading @@ -76,6 +80,10 @@ public class MobileDataStateTracker implements NetworkStateTracker { TelephonyManager.getDefault().getNetworkType(), tag, TelephonyManager.getDefault().getNetworkTypeName()); mApnType = networkTypeToApnType(netType); if (netType == ConnectivityManager.TYPE_MOBILE || netType == ConnectivityManager.TYPE_MOBILE_HIPRI) { mIsDefaultOrHipri = true; } mPhoneService = null; Loading @@ -90,7 +98,6 @@ public class MobileDataStateTracker implements NetworkStateTracker { "net.gprs.dns2", "net.ppp0.dns1", "net.ppp0.dns2"}; } /** Loading Loading @@ -141,8 +148,7 @@ public class MobileDataStateTracker implements NetworkStateTracker { filter.addAction(TelephonyIntents.ACTION_DATA_CONNECTION_FAILED); filter.addAction(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED); mStateReceiver = new MobileDataStateReceiver(); mContext.registerReceiver(mStateReceiver, filter); mContext.registerReceiver(new MobileDataStateReceiver(), filter); mMobileDataState = Phone.DataState.DISCONNECTED; } Loading Loading @@ -173,8 +179,9 @@ public class MobileDataStateTracker implements NetworkStateTracker { } private class MobileDataStateReceiver extends BroadcastReceiver { IConnectivityManager mConnectivityManager; public void onReceive(Context context, Intent intent) { synchronized(this) { if (intent.getAction().equals(TelephonyIntents. ACTION_ANY_DATA_CONNECTION_STATE_CHANGED)) { String apnType = intent.getStringExtra(Phone.DATA_APN_TYPE_KEY); Loading Loading @@ -204,7 +211,32 @@ public class MobileDataStateTracker implements NetworkStateTracker { } setDetailedState(DetailedState.DISCONNECTED, reason, apnName); if (mNetworkProperties != 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) { IBinder b = ServiceManager.getService( mContext.CONNECTIVITY_SERVICE); mConnectivityManager = IConnectivityManager.Stub.asInterface(b); } try { if (mConnectivityManager != null) { NetworkInfo info = mConnectivityManager.getNetworkInfo( typeToCheck); if (info.isConnected() == true) { doReset = false; } } } catch (RemoteException e) { // just go ahead with the reset Log.e(TAG, "Exception trying to contact ConnService: " + e); } } if (doReset && mNetworkProperties != null) { String iface = mNetworkProperties.getInterfaceName(); if (iface != null) NetworkUtils.resetConnections(iface); } Loading Loading @@ -251,7 +283,6 @@ public class MobileDataStateTracker implements NetworkStateTracker { setSubtype(tm.getNetworkType(), tm.getNetworkTypeName()); } } } private void getPhoneService(boolean forceRefresh) { if ((mPhoneService == null) || forceRefresh) { Loading Loading
core/java/android/net/MobileDataStateTracker.java +105 −74 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.os.RemoteException; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.ServiceManager; import com.android.internal.telephony.ITelephony; Loading Loading @@ -50,7 +51,6 @@ public class MobileDataStateTracker implements NetworkStateTracker { private ITelephony mPhoneService; private String mApnType; private BroadcastReceiver mStateReceiver; private static String[] sDnsPropNames; private NetworkInfo mNetworkInfo; private boolean mTeardownRequested = false; Loading @@ -61,6 +61,10 @@ public class MobileDataStateTracker implements NetworkStateTracker { private int mDefaultGatewayAddr = 0; private boolean mDefaultRouteSet = false; // 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 Loading @@ -76,6 +80,10 @@ public class MobileDataStateTracker implements NetworkStateTracker { TelephonyManager.getDefault().getNetworkType(), tag, TelephonyManager.getDefault().getNetworkTypeName()); mApnType = networkTypeToApnType(netType); if (netType == ConnectivityManager.TYPE_MOBILE || netType == ConnectivityManager.TYPE_MOBILE_HIPRI) { mIsDefaultOrHipri = true; } mPhoneService = null; Loading @@ -90,7 +98,6 @@ public class MobileDataStateTracker implements NetworkStateTracker { "net.gprs.dns2", "net.ppp0.dns1", "net.ppp0.dns2"}; } /** Loading Loading @@ -141,8 +148,7 @@ public class MobileDataStateTracker implements NetworkStateTracker { filter.addAction(TelephonyIntents.ACTION_DATA_CONNECTION_FAILED); filter.addAction(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED); mStateReceiver = new MobileDataStateReceiver(); mContext.registerReceiver(mStateReceiver, filter); mContext.registerReceiver(new MobileDataStateReceiver(), filter); mMobileDataState = Phone.DataState.DISCONNECTED; } Loading Loading @@ -173,8 +179,9 @@ public class MobileDataStateTracker implements NetworkStateTracker { } private class MobileDataStateReceiver extends BroadcastReceiver { IConnectivityManager mConnectivityManager; public void onReceive(Context context, Intent intent) { synchronized(this) { if (intent.getAction().equals(TelephonyIntents. ACTION_ANY_DATA_CONNECTION_STATE_CHANGED)) { String apnType = intent.getStringExtra(Phone.DATA_APN_TYPE_KEY); Loading Loading @@ -204,7 +211,32 @@ public class MobileDataStateTracker implements NetworkStateTracker { } setDetailedState(DetailedState.DISCONNECTED, reason, apnName); if (mNetworkProperties != 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) { IBinder b = ServiceManager.getService( mContext.CONNECTIVITY_SERVICE); mConnectivityManager = IConnectivityManager.Stub.asInterface(b); } try { if (mConnectivityManager != null) { NetworkInfo info = mConnectivityManager.getNetworkInfo( typeToCheck); if (info.isConnected() == true) { doReset = false; } } } catch (RemoteException e) { // just go ahead with the reset Log.e(TAG, "Exception trying to contact ConnService: " + e); } } if (doReset && mNetworkProperties != null) { String iface = mNetworkProperties.getInterfaceName(); if (iface != null) NetworkUtils.resetConnections(iface); } Loading Loading @@ -251,7 +283,6 @@ public class MobileDataStateTracker implements NetworkStateTracker { setSubtype(tm.getNetworkType(), tm.getNetworkTypeName()); } } } private void getPhoneService(boolean forceRefresh) { if ((mPhoneService == null) || forceRefresh) { Loading