From a03ab1a6a07614f3d588232e12d9c45d840bae82 Mon Sep 17 00:00:00 2001 From: Wink Saville Date: Thu, 13 Aug 2009 14:18:00 -0700 Subject: Allow max_retires to be set to infinite. Setting max_retires to infinite sets mRetryForever to true and therefore isRetryNeeded will always be true. This is better than an alternative which is to set max_retires to a large value such as 2147483647. --- .../android/internal/telephony/RetryManager.java | 21 ++++++++++++++------ .../internal/telephony/TelephonyUtilsTest.java | 23 ++++++++++++++++++++++ 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/telephony/java/com/android/internal/telephony/RetryManager.java b/telephony/java/com/android/internal/telephony/RetryManager.java index 242b2cd8a148..385b19101c3b 100644 --- a/telephony/java/com/android/internal/telephony/RetryManager.java +++ b/telephony/java/com/android/internal/telephony/RetryManager.java @@ -41,7 +41,8 @@ import java.util.ArrayList; * *

* max_retries is the number of times that incrementRetryCount - * maybe called before isRetryNeeded will return false. + * maybe called before isRetryNeeded will return false. if value + * is infinite then isRetryNeeded will always return true. * * default_randomizationTime will be used as the randomizationTime * for delay times which have no supplied randomizationTime. If @@ -60,9 +61,13 @@ import java.util.ArrayList; * the 4..10 retries all using 3000 as the delay: *

* - *
  • 4 retires with a 100ms default randomization value for the first 2 values and - * the other two having specified values of 500ms: + *
  • 4 retires with a 100 as the default randomization value for the first 2 values and + * the other two having specified values of 500: * + * + *
  • Infinite number of retires with the first one at 1000, the second at 2000 all + * others will be at 3000. + * * * * {@hide} @@ -181,9 +186,13 @@ public class RetryManager { if (!value.first) return false; defaultRandomization = value.second; } else if (TextUtils.equals(splitStr[0], "max_retries")) { - value = parseNonNegativeInt(splitStr[0], splitStr[1]); - if (!value.first) return false; - mMaxRetryCount = value.second; + if (TextUtils.equals("infinite",splitStr[1])) { + mRetryForever = true; + } else { + value = parseNonNegativeInt(splitStr[0], splitStr[1]); + if (!value.first) return false; + mMaxRetryCount = value.second; + } } else { Log.e(LOG_TAG, "Unrecognized configuration name value pair: " + strArray[i]); diff --git a/tests/CoreTests/com/android/internal/telephony/TelephonyUtilsTest.java b/tests/CoreTests/com/android/internal/telephony/TelephonyUtilsTest.java index e4cf1e82693c..bf0c88b7cc2d 100644 --- a/tests/CoreTests/com/android/internal/telephony/TelephonyUtilsTest.java +++ b/tests/CoreTests/com/android/internal/telephony/TelephonyUtilsTest.java @@ -122,6 +122,29 @@ public class TelephonyUtilsTest extends TestCase { assertFalse(rm.isRetryNeeded()); } + /** + * Test infinite retires + */ + @SmallTest + public void testRetryManageInfinite() throws Exception { + RetryManager rm = new RetryManager(); + + assertTrue(rm.configure("1000,2000,3000,max_retries=infinite")); + assertTrue(rm.isRetryNeeded()); + assertEquals(1000, rm.getRetryTimer()); + rm.increaseRetryCount(); + assertTrue(rm.isRetryNeeded()); + assertEquals(2000, rm.getRetryTimer()); + rm.increaseRetryCount(); + assertTrue(rm.isRetryNeeded()); + // All others are 3000 and isRetryNeeded is always true + for (int i=0; i < 100; i++) { + assertEquals(3000, rm.getRetryTimer()); + rm.increaseRetryCount(); + assertTrue(rm.isRetryNeeded()); + } + } + /** * Test string configuration using all options. */ -- cgit v1.2.3-59-g8ed1b