diff options
author | Wink Saville <wink@google.com> | 2010-11-30 11:46:34 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-11-30 11:46:34 -0800 |
commit | 2ebb3a2d9b31213ced141c1807f60e13983f40dd (patch) | |
tree | 78761159594cc2dbd24b0e3354248dcd0c62f500 /telephony | |
parent | d2607118edf7a5204181dd118dd2f64d1d5b12c4 (diff) | |
parent | f316679971be356dbb01f991e95742bc5f2a8383 (diff) | |
download | frameworks_base-2ebb3a2d9b31213ced141c1807f60e13983f40dd.zip frameworks_base-2ebb3a2d9b31213ced141c1807f60e13983f40dd.tar.gz frameworks_base-2ebb3a2d9b31213ced141c1807f60e13983f40dd.tar.bz2 |
am f3166799: Merge "Fix GSM permanent failure handling, DO NOT MERGE." into gingerbread
* commit 'f316679971be356dbb01f991e95742bc5f2a8383':
Fix GSM permanent failure handling, DO NOT MERGE.
Diffstat (limited to 'telephony')
-rw-r--r-- | telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java index e7d57bc..ab9cf2a 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java @@ -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 - startDelayedRetry(cause, reason); + 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 |