summaryrefslogtreecommitdiffstats
path: root/telephony/java
diff options
context:
space:
mode:
authorWink Saville <wink@google.com>2010-11-30 08:15:41 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-11-30 08:15:41 -0800
commitf316679971be356dbb01f991e95742bc5f2a8383 (patch)
treebc88d03ab96a91943fb20e1fdc748a74333ac0c8 /telephony/java
parent27e728f22d954caa7252be6c19a67a9277e1db3b (diff)
parenta20d02c2e1a13c8cfb1ed4ed2dff84a29080d4e4 (diff)
downloadframeworks_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.java30
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