diff options
| author | 2011-04-01 16:36:25 -0700 | |
|---|---|---|
| committer | 2011-04-01 16:36:25 -0700 | |
| commit | 22cfcaee24829e52c636ca2f5df0285569c6e7c1 (patch) | |
| tree | 4856083f01b5bf2872fe509e6ea77987f7d7b833 | |
| parent | 03d4dc3b75c28ee3f502c983fcb8304d556db063 (diff) | |
| parent | 0b8e313c7f97f9cb34e2ba555182621889b69a16 (diff) | |
am 0b8e313c: Merge "Data Retry fix after failure due to permanent causes." into honeycomb-LTE
* commit '0b8e313c7f97f9cb34e2ba555182621889b69a16':
Data Retry fix after failure due to permanent causes.
| -rw-r--r-- | telephony/java/com/android/internal/telephony/ApnContext.java | 24 | ||||
| -rw-r--r-- | telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java | 40 |
2 files changed, 34 insertions, 30 deletions
diff --git a/telephony/java/com/android/internal/telephony/ApnContext.java b/telephony/java/com/android/internal/telephony/ApnContext.java index bd1bc1d8808e..a86ea7eec63e 100644 --- a/telephony/java/com/android/internal/telephony/ApnContext.java +++ b/telephony/java/com/android/internal/telephony/ApnContext.java @@ -42,7 +42,8 @@ public class ApnContext { ArrayList<ApnSetting> mWaitingApns = null; - private int mWaitingApnsPermanentFailureCountDown = 0; + /** A zero indicates that all waiting APNs had a permanent error */ + private int mWaitingApnsPermanentFailureCountDown; ApnSetting mApnSetting; @@ -68,14 +69,6 @@ public class ApnContext { pendingAction = pa; } - public int getPermFailCount() { - return mWaitingApnsPermanentFailureCountDown; - } - - public void decPermFailCount() { - mWaitingApnsPermanentFailureCountDown--; - } - public String getApnType() { return mApnType; } @@ -98,9 +91,18 @@ public class ApnContext { public void setWaitingApns(ArrayList<ApnSetting> waitingApns) { mWaitingApns = waitingApns; + mWaitingApnsPermanentFailureCountDown = mWaitingApns.size(); + } + + public int getWaitingApnsPermFailCount() { + return mWaitingApnsPermanentFailureCountDown; + } + + public void decWaitingApnsPermFailCount() { + mWaitingApnsPermanentFailureCountDown--; } - public ApnSetting getNextApn() { + public ApnSetting getNextWaitingApn() { ArrayList<ApnSetting> list = mWaitingApns; ApnSetting apn = null; @@ -112,7 +114,7 @@ public class ApnContext { return apn; } - public void removeNextApn() { + public void removeNextWaitingApn() { if ((mWaitingApns != null) && (!mWaitingApns.isEmpty())) { mWaitingApns.remove(0); } diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java index 7dad4592a14c..891a2378376e 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java @@ -574,9 +574,11 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { } private boolean trySetupData(String reason, String type) { - if (DBG) - log("***trySetupData for type:" + type+" due to " + (reason == null ? "(unspecified)" : reason)); - log("[DSAC DEB] " + "trySetupData with mIsPsRestricted=" + mIsPsRestricted); + if (DBG) { + log("***trySetupData for type:" + type + + " due to " + (reason == null ? "(unspecified)" : reason) + + " isPsRestricted=" + mIsPsRestricted); + } if (type == null) { type = Phone.APN_TYPE_DEFAULT; @@ -585,12 +587,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { ApnContext apnContext = mApnContexts.get(type); if (apnContext == null ){ - if (DBG) log("***new apn context for type:" + type); + if (DBG) log("new apn context for type:" + type); apnContext = new ApnContext(type, LOG_TAG); - if (apnContext == null) { - if (DBG) log("***new apn context failed "); - return false; - } mApnContexts.put(type, apnContext); } apnContext.setReason(reason); @@ -839,7 +837,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { GsmDataConnection dc; int profileId = getApnProfileID(apnContext.getApnType()); - apn = apnContext.getNextApn(); + apn = apnContext.getNextWaitingApn(); if (apn == null) { if (DBG) log("setupData: return for no apn found!"); return false; @@ -1449,19 +1447,22 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { } // Count permanent failures and remove the APN we just tried - // TODO: Where is mWaitingApnsPermanentFailureCountDown initialized - if (cause.isPermanentFail()) - apnContext.decPermFailCount(); + if (cause.isPermanentFail()) apnContext.decWaitingApnsPermFailCount(); - apnContext.removeNextApn(); - if (DBG) log(String.format("onDataSetupComplete: mWaitingApns.size=%d" + - " mWaitingApnsPermanenatFailureCountDown=%d", - apnContext.getWaitingApns().size(), apnContext.getPermFailCount())); + apnContext.removeNextWaitingApn(); + if (DBG) { + log(String.format("onDataSetupComplete: WaitingApns.size=%d" + + " WaitingApnsPermFailureCountDown=%d", + apnContext.getWaitingApns().size(), + apnContext.getWaitingApnsPermFailCount())); + } // See if there are more APN's to try if (apnContext.getWaitingApns().isEmpty()) { - if (apnContext.getPermFailCount() == 0) { - if (DBG) log("onDataSetupComplete: Permanent failures stop retrying"); + if (apnContext.getWaitingApnsPermFailCount() == 0) { + if (DBG) { + log("onDataSetupComplete: All APN's had permanent failures, stop retrying"); + } apnContext.setState(State.FAILED); notifyDataConnection(Phone.REASON_APN_FAILED); } else { @@ -1473,7 +1474,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { apnContext.setState(State.SCANNING); // Wait a bit before trying the next APN, so that // we're not tying up the RIL command channel - sendMessageDelayed(obtainMessage(EVENT_TRY_SETUP_DATA, apnContext), APN_DELAY_MILLIS); + sendMessageDelayed(obtainMessage(EVENT_TRY_SETUP_DATA, apnContext), + APN_DELAY_MILLIS); } } } |