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

Commit d2052554 authored by Jack Yu's avatar Jack Yu
Browse files

Prevent unnecessary building APN candidates

When the APN context is already in disconnected state, there
is no need to build the waiting APN list, which can potentially
cause preferred APN gets deleted.

Bug: 144400654
Test: Manual
Merged-In: I8dd8edc6a9485148dde7b9b6b4326baed1632ea4
Change-Id: I8dd8edc6a9485148dde7b9b6b4326baed1632ea4
(cherry picked from commit 9a00218d)
parent a06a226a
Loading
Loading
Loading
Loading
+17 −21
Original line number Original line Diff line number Diff line
@@ -3291,17 +3291,12 @@ public class DcTracker extends Handler {
                    apnList = sortApnListByPreferred(apnList);
                    apnList = sortApnListByPreferred(apnList);
                    if (DBG) log("buildWaitingApns: X added preferred apnList=" + apnList);
                    if (DBG) log("buildWaitingApns: X added preferred apnList=" + apnList);
                    return apnList;
                    return apnList;
                } else {
                    if (DBG) log("buildWaitingApns: no preferred APN");
                    setPreferredApn(-1);
                    mPreferredApn = null;
                }
                }
            } else {
            }
            if (DBG) log("buildWaitingApns: no preferred APN");
            if (DBG) log("buildWaitingApns: no preferred APN");
            setPreferredApn(-1);
            setPreferredApn(-1);
            mPreferredApn = null;
            mPreferredApn = null;
        }
        }
        }


        if (DBG) log("buildWaitingApns: mAllApnSettings=" + mAllApnSettings);
        if (DBG) log("buildWaitingApns: mAllApnSettings=" + mAllApnSettings);
        for (ApnSetting apn : mAllApnSettings) {
        for (ApnSetting apn : mAllApnSettings) {
@@ -4190,6 +4185,7 @@ public class DcTracker extends Handler {
                return;
                return;
            }
            }
            for (ApnContext apnContext : mApnContexts.values()) {
            for (ApnContext apnContext : mApnContexts.values()) {
                if (!apnContext.isDisconnected()) {
                    ArrayList<ApnSetting> currentWaitingApns = apnContext.getWaitingApns();
                    ArrayList<ApnSetting> currentWaitingApns = apnContext.getWaitingApns();
                    ArrayList<ApnSetting> waitingApns = buildWaitingApns(
                    ArrayList<ApnSetting> waitingApns = buildWaitingApns(
                            apnContext.getApnType(), getDataRat());
                            apnContext.getApnType(), getDataRat());
@@ -4198,11 +4194,11 @@ public class DcTracker extends Handler {
                            && ((waitingApns.size() != currentWaitingApns.size())
                            && ((waitingApns.size() != currentWaitingApns.size())
                            // Check if the existing waiting APN list can cover the newly built APN
                            // Check if the existing waiting APN list can cover the newly built APN
                            // list. If yes, then we don't need to tear down the existing data call.
                            // list. If yes, then we don't need to tear down the existing data call.
                        // TODO: We probably need to rebuild APN list when roaming status changes.
                            // TODO: We probably need to rebuild APN list when roaming status
                            //  changes.
                            || !containsAllApns(currentWaitingApns, waitingApns))) {
                            || !containsAllApns(currentWaitingApns, waitingApns))) {
                        if (VDBG) log("new waiting apn is different for " + apnContext);
                        if (VDBG) log("new waiting apn is different for " + apnContext);
                        apnContext.setWaitingApns(waitingApns);
                        apnContext.setWaitingApns(waitingApns);
                    if (!apnContext.isDisconnected()) {
                        if (VDBG) log("cleanUpConnectionsOnUpdatedApns for " + apnContext);
                        if (VDBG) log("cleanUpConnectionsOnUpdatedApns for " + apnContext);
                        apnContext.setReason(reason);
                        apnContext.setReason(reason);
                        cleanUpConnectionInternal(true, RELEASE_TYPE_DETACH, apnContext);
                        cleanUpConnectionInternal(true, RELEASE_TYPE_DETACH, apnContext);