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

Commit 3382de84 authored by Malcolm Chen's avatar Malcolm Chen
Browse files

Make sure data connection is cleaned up when turning off data.

Correct logic of DcTracker#shouldCleanUpConnection to make sure
data connection is cleaned up when turning off data.

Bug: 131463413
Test: manual - turn off mobile data and make sure browser loses
connection to Internet.

Change-Id: Ie1efff22209ef0c865459d1636649336837276a7
parent 0155c6b0
Loading
Loading
Loading
Loading
+16 −12
Original line number Diff line number Diff line
@@ -1546,7 +1546,7 @@ public class DcTracker extends Handler {
     *                   were already all disconnected.
     */
    private boolean cleanUpAllConnectionsInternal(boolean detach, String reason) {
        if (DBG) log("cleanUpAllConnections: detach=" + detach + " reason=" + reason);
        if (DBG) log("cleanUpAllConnectionsInternal: detach=" + detach + " reason=" + reason);
        boolean didDisconnect = false;
        boolean disableMeteredOnly = false;

@@ -1554,8 +1554,7 @@ public class DcTracker extends Handler {
        if (!TextUtils.isEmpty(reason)) {
            disableMeteredOnly = reason.equals(Phone.REASON_DATA_SPECIFIC_DISABLED) ||
                    reason.equals(Phone.REASON_ROAMING_ON) ||
                    reason.equals(Phone.REASON_CARRIER_ACTION_DISABLE_METERED_APN) ||
                    reason.equals(Phone.REASON_PDP_RESET);
                    reason.equals(Phone.REASON_CARRIER_ACTION_DISABLE_METERED_APN);
        }

        for (ApnContext apnContext : mApnContexts.values()) {
@@ -1570,6 +1569,9 @@ public class DcTracker extends Handler {
                if (apnContext.isDisconnected() == false) didDisconnect = true;
                apnContext.setReason(reason);
                cleanUpConnectionInternal(detach, RELEASE_TYPE_DETACH, apnContext);
            } else if (DBG) {
                log("cleanUpAllConnectionsInternal: APN type " + apnContext.getApnType()
                        + " shouldn't be cleaned up.");
            }
        }

@@ -1579,7 +1581,8 @@ public class DcTracker extends Handler {
        // TODO: Do we need mRequestedApnType?
        mRequestedApnType = ApnSetting.TYPE_DEFAULT;

        log("cleanUpConnectionInternal: mDisconnectPendingCount = " + mDisconnectPendingCount);
        log("cleanUpAllConnectionsInternal: mDisconnectPendingCount = "
                + mDisconnectPendingCount);
        if (detach && mDisconnectPendingCount == 0) {
            notifyAllDataDisconnected();
        }
@@ -1597,13 +1600,13 @@ public class DcTracker extends Handler {
        ApnSetting apnSetting = apnContext.getApnSetting();
        if (apnSetting == null || !ApnSettingUtils.isMetered(apnSetting, mPhone)) return false;

        // Depending on it's roaming or not, return whether data is enabled or roaming data
        // is enabled.
        if (mPhone.getServiceState().getDataRoaming()) {
            return !getDataRoamingEnabled();
        } else {
            return mDataEnabledSettings.isDataEnabled(apnSetting.getApnTypeBitmask());
        }
        boolean isRoaming = mPhone.getServiceState().getDataRoaming();
        boolean isDataRoamingDisabled = !getDataRoamingEnabled();
        boolean isDataDisabled = !mDataEnabledSettings.isDataEnabled(
                apnSetting.getApnTypeBitmask());

        // Should clean up if its data is disabled, or data roaming is disabled while roaming.
        return isDataDisabled || (isRoaming && isDataRoamingDisabled);
    }

    /**
@@ -4514,7 +4517,8 @@ public class DcTracker extends Handler {
                        EventLog.writeEvent(EventLogTags.DATA_STALL_RECOVERY_CLEANUP,
                            mSentSinceLastRecv);
                        if (DBG) log("doRecovery() cleanup all connections");
                        cleanUpAllConnections(Phone.REASON_PDP_RESET);
                        cleanUpConnection(mApnContexts.get(ApnSetting.getApnTypeString(
                                ApnSetting.TYPE_DEFAULT)));
                        putRecoveryAction(RECOVERY_ACTION_REREGISTER);
                        break;
                    case RECOVERY_ACTION_REREGISTER: