Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fa64bcfb authored by Robert Greenwalt's avatar Robert Greenwalt Committed by Android (Google) Code Review
Browse files

Merge "Don't reset connections switching default->hipri"

parents ec37c885 153b4374
Loading
Loading
Loading
Loading
+105 −74
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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
@@ -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;

@@ -90,7 +98,6 @@ public class MobileDataStateTracker implements NetworkStateTracker {
                "net.gprs.dns2",
                "net.ppp0.dns1",
                "net.ppp0.dns2"};

    }

    /**
@@ -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;
    }

@@ -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);
@@ -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);
                            }
@@ -251,7 +283,6 @@ public class MobileDataStateTracker implements NetworkStateTracker {
            setSubtype(tm.getNetworkType(), tm.getNetworkTypeName());
        }
    }
    }

    private void getPhoneService(boolean forceRefresh) {
        if ((mPhoneService == null) || forceRefresh) {