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

Commit 2ebb3a2d authored by Wink Saville's avatar Wink Saville Committed by Android Git Automerger
Browse files

am f3166799: Merge "Fix GSM permanent failure handling, DO NOT MERGE." into gingerbread

* commit 'f3166799':
  Fix GSM permanent failure handling, DO NOT MERGE.
parents d2607118 f3166799
Loading
Loading
Loading
Loading
+18 −12
Original line number Diff line number Diff line
@@ -115,7 +115,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
     * It is a subset of allApns and has the same format
     */
    private ArrayList<ApnSetting> waitingApns = null;

    private int waitingApnsPermanentFailureCountDown = 0;
    private ApnSetting preferredApn = null;

    /* Currently active APN */
@@ -449,6 +449,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {

            if (state == State.IDLE) {
                waitingApns = buildWaitingApns();
                waitingApnsPermanentFailureCountDown = waitingApns.size();
                if (waitingApns.isEmpty()) {
                    if (DBG) log("No APN found");
                    notifyNoData(GsmDataConnection.FailCause.MISSING_UNKNOWN_APN);
@@ -1154,20 +1155,25 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
                        TelephonyManager.getDefault().getNetworkType());
            }

            // No try for permanent failure
            if (cause.isPermanentFail()) {
                notifyNoData(cause);
                phone.notifyDataConnection(Phone.REASON_APN_FAILED);
                onEnableApn(apnTypeToId(mRequestedApnType), DISABLED);
                return;
            }

            // Count permanent failures and remove the APN we just tried
            waitingApnsPermanentFailureCountDown -= cause.isPermanentFail() ? 1 : 0;
            waitingApns.remove(0);
            if (DBG) log(String.format("onDataSetupComplete: waitingApns.size=%d" +
                            " waitingApnsPermanenatFailureCountDown=%d",
                            waitingApns.size(), waitingApnsPermanentFailureCountDown));

            // See if there are more APN's to try
            if (waitingApns.isEmpty()) {
                // No more to try, start delayed retry
                if (waitingApnsPermanentFailureCountDown == 0) {
                    if (DBG) log("onDataSetupComplete: Permanent failures stop retrying");
                    notifyNoData(cause);
                    phone.notifyDataConnection(Phone.REASON_APN_FAILED);
                } else {
                    if (DBG) log("onDataSetupComplete: Not all permanent failures, retry");
                    startDelayedRetry(cause, reason);
                }
            } else {
                // we still have more apns to try
                if (DBG) log("onDataSetupComplete: Try next APN");
                setState(State.SCANNING);
                // Wait a bit before trying the next APN, so that
                // we're not tying up the RIL command channel