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

Commit a64bf834 authored by Robert Greenwalt's avatar Robert Greenwalt
Browse files

Fix various issues found when testing Mms.

Fix some race conditions (check isTeardownRequested).
Fix the passing of mInterfaceName to subtypes (mms, etc).
Fix the generation of CONNECTED message to already active subtypes.
Fix the enabling of Data in DataConnectionTracker.

bug: 2065037
parent f5d493a5
Loading
Loading
Loading
Loading
+16 −8
Original line number Diff line number Diff line
@@ -143,8 +143,9 @@ public class MobileDataStateTracker extends NetworkStateTracker {
                    boolean unavailable = intent.getBooleanExtra(Phone.NETWORK_UNAVAILABLE_KEY,
                            false);
                    if (DBG) Log.d(TAG, mApnType + " Received " + intent.getAction() +
                            " broadcast - state = " + state + ", unavailable = " + unavailable +
                            ", reason = " + (reason == null ? "(unspecified)" : reason));
                            " broadcast - state = " + state + ", oldstate = " + mMobileDataState +
                            ", unavailable = " + unavailable + ", reason = " +
                            (reason == null ? "(unspecified)" : reason));

                    if (isApnTypeIncluded(apnTypeList)) {
                        if (mEnabled == false) {
@@ -152,10 +153,12 @@ public class MobileDataStateTracker extends NetworkStateTracker {
                            // we should record the interface name if one's provided.  If the user
                            // turns on this network we will need the interfacename but won't get
                            // a fresh connected message - TODO fix this..
                            if (mInterfaceName == null && state == Phone.DataState.CONNECTED) {
                            if (state == Phone.DataState.CONNECTED) {
                                if (DBG) Log.d(TAG, "replacing old mInterfaceName (" +
                                        mInterfaceName + ") with " +
                                        intent.getStringExtra(Phone.DATA_IFACE_NAME_KEY) +
                                        " for " + mApnType);
                                mInterfaceName = intent.getStringExtra(Phone.DATA_IFACE_NAME_KEY);
                            } else if (state == Phone.DataState.DISCONNECTED) {
                                mInterfaceName = null;
                            }
                            if (DBG) Log.d(TAG, "  dropped - mEnabled = false");
                            return;
@@ -179,6 +182,8 @@ public class MobileDataStateTracker extends NetworkStateTracker {
                                if (mInterfaceName != null) {
                                    NetworkUtils.resetConnections(mInterfaceName);
                                }
                                if (DBG) Log.d(TAG, "clearing mInterfaceName for "+ mApnType +
                                        " as it DISCONNECTED");
                                mInterfaceName = null;
                                mDefaultGatewayAddr = 0;
                                break;
@@ -301,6 +306,8 @@ public class MobileDataStateTracker extends NetworkStateTracker {
        switch (setEnableApn(mApnType, true)) {
            case Phone.APN_ALREADY_ACTIVE:
                mEnabled = true;
                // need to set self to CONNECTING so the below message is handled.
                mMobileDataState = Phone.DataState.CONNECTING;
                //send out a connected message
                Intent intent = new Intent(TelephonyIntents.
                        ACTION_ANY_DATA_CONNECTION_STATE_CHANGED);
@@ -412,10 +419,11 @@ public class MobileDataStateTracker extends NetworkStateTracker {
     */
    @Override
    public boolean requestRouteToHost(int hostAddress) {
        if (mInterfaceName != null && hostAddress != -1) {
        if (DBG) {
                Log.d(TAG, "Requested host route to " + Integer.toHexString(hostAddress));
            Log.d(TAG, "Requested host route to " + Integer.toHexString(hostAddress) +
                    " for " + mApnType + "(" + mInterfaceName + ")");
        }
        if (mInterfaceName != null && hostAddress != -1) {
            return NetworkUtils.addHostRoute(mInterfaceName, hostAddress) == 0;
        } else {
            return false;
+5 −2
Original line number Diff line number Diff line
@@ -513,7 +513,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                    mNetRequestersPids[usedNetworkType].add(currentPid);
                }

                if (ni.isConnectedOrConnecting() == true) {
                if ((ni.isConnectedOrConnecting() == true) &&
                        !network.isTeardownRequested()) {
                    if (ni.isConnected() == true) {
                        // add the pid-specific dns
                        handleDnsConfigurationChange();
@@ -686,6 +687,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                ++numConnectedNets;
            }
        }
        if (DBG) Log.d(TAG, "numConnectedNets returning "+numConnectedNets);
        return numConnectedNets;
    }

@@ -792,7 +794,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                if (newNet.isAvailable()) {
                    NetworkInfo switchTo = newNet.getNetworkInfo();
                    switchTo.setFailover(true);
                    if (!switchTo.isConnectedOrConnecting()) {
                    if (!switchTo.isConnectedOrConnecting() ||
                            newNet.isTeardownRequested()) {
                        newNet.reconnect();
                    }
                    if (DBG) {
+9 −6
Original line number Diff line number Diff line
@@ -456,16 +456,19 @@ public abstract class DataConnectionTracker extends Handler {
        if (dataEnabled[id] != enable) {
            dataEnabled[id] = enable;

            // count the total number of enabled APN's
            // if we just enabled the first APN, start our Data connection,
            // if we disabled the last, stop our data connection
            if (enable) {
                enabledCount++;
                if (enabledCount == 1) {
                    setPrivateDataEnabled(true);
                }
            } else {
                enabledCount--;
            }

                if (enabledCount == 0) {
                    setPrivateDataEnabled(false);
            } else if (enabledCount == 1) {
                setPrivateDataEnabled(true);
                }
            }
        }
    }