diff options
author | Wink Saville <wink@google.com> | 2010-11-30 08:15:41 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-11-30 08:15:41 -0800 |
commit | f316679971be356dbb01f991e95742bc5f2a8383 (patch) | |
tree | bc88d03ab96a91943fb20e1fdc748a74333ac0c8 /telephony/java | |
parent | 27e728f22d954caa7252be6c19a67a9277e1db3b (diff) | |
parent | a20d02c2e1a13c8cfb1ed4ed2dff84a29080d4e4 (diff) | |
download | frameworks_base-f316679971be356dbb01f991e95742bc5f2a8383.zip frameworks_base-f316679971be356dbb01f991e95742bc5f2a8383.tar.gz frameworks_base-f316679971be356dbb01f991e95742bc5f2a8383.tar.bz2 |
Merge "Fix GSM permanent failure handling, DO NOT MERGE." into gingerbread
Diffstat (limited to 'telephony/java')
-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 |