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

Commit 9e698c6c authored by Wink Saville's avatar Wink Saville Committed by The Android Automerger
Browse files

Empty DC's apnList when the DC is free.

Not doing this causes DC.apnList's to have multiple entries in the
apnlist which causes DC's to look like its connected to both IMS and
INTERNET. And when selecting CDMA only mode on a Xoom we will not bring
up the connection thus no data connectivity.

Bug: 6939338
Change-Id: I17bc17cd1938ebac773db8131d12d0fa724348b0
parent b046b20f
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -996,9 +996,23 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
    }

    private boolean dataConnectionNotInUse(DataConnectionAc dcac) {
        if (DBG) log("dataConnectionNotInUse: check if dcac is inuse dc=" + dcac.dataConnection);
        for (ApnContext apnContext : mApnContexts.values()) {
            if (apnContext.getDataConnectionAc() == dcac) return false;
            if (apnContext.getDataConnectionAc() == dcac) {
                if (DBG) log("dataConnectionNotInUse: in use by apnContext=" + apnContext);
                return false;
            }
        }
        // TODO: Fix retry handling so free DataConnections have empty apnlists.
        // Probably move retry handling into DataConnections and reduce complexity
        // of DCT.
        for (ApnContext apnContext : dcac.getApnListSync()) {
            if (DBG) {
                log("dataConnectionNotInUse: removing apnContext=" + apnContext);
            }
            dcac.removeApnContextSync(apnContext);
        }
        if (DBG) log("dataConnectionNotInUse: not in use return true");
        return true;
    }

@@ -2131,14 +2145,14 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
    protected void onDisconnectDone(int connId, AsyncResult ar) {
        ApnContext apnContext = null;

        if(DBG) log("onDisconnectDone: EVENT_DISCONNECT_DONE connId=" + connId);
        if (ar.userObj instanceof ApnContext) {
            apnContext = (ApnContext) ar.userObj;
        } else {
            loge("Invalid ar in onDisconnectDone");
            loge("onDisconnectDone: Invalid ar in onDisconnectDone, ignore");
            return;
        }

        if(DBG) log("onDisconnectDone: EVENT_DISCONNECT_DONE apnContext=" + apnContext);
        apnContext.setState(State.IDLE);

        mPhone.notifyDataConnection(apnContext.getReason(), apnContext.getApnType());