Do not retry forever in DataConnection.

When we are initially to connect we limit the the number of
retries so as to go through the list of waiting apns. But if retry
forever is enabled, as it is with Verizon devices, we can burn the
battery down quickly because we're retrying with short initial
timeouts.

In this change I also increase the timeout between apn retries from
5 seconds to 20 seconds to further reduce battery drain when retrying.
And added a retry with a longer timeout if to keep the contract with
ConnectivityService that when enabled we will continue to retry.

Bug: 9240744
Change-Id: I45b9ec5300d602d838dbdeacdbd1fca0c4d65ee3
diff --git a/src/java/com/android/internal/telephony/dataconnection/DataConnection.java b/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
index 1a92ea2..838c714 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
@@ -747,6 +747,7 @@
         configureRetry(mApnSetting.canHandleType(PhoneConstants.APN_TYPE_DEFAULT));
         mRetryManager.setRetryCount(0);
         mRetryManager.setCurMaxRetryCount(mConnectionParams.mInitialMaxRetry);
+        mRetryManager.setRetryForever(false);
 
         if (DBG) {
             log("initConnection: "
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
index 3723f75..3f79f39 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
@@ -1620,11 +1620,12 @@
 
             if (apnContext.getWaitingApnsPermFailCount() == 0) {
                 if (DBG) {
-                    log("onDataSetupComplete: All APN's had permanent failures, stop retrying");
+                    log("onDataSetupComplete: All APN's had permanent failures, long delay");
                 }
+                startAlarmForRestartTrySetup(APN_DELAY_MILLIS * 3, apnContext);
             } else {
                 if (DBG) {
-                    log("onDataSetupComplete: Not all APN's had permanent failures, retry");
+                    log("onDataSetupComplete: Not all APN's had permanent failures, short delay");
                 }
                 startAlarmForRestartTrySetup(APN_DELAY_MILLIS, apnContext);
             }
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcTrackerBase.java b/src/java/com/android/internal/telephony/dataconnection/DcTrackerBase.java
index 57df147..6c21a35 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcTrackerBase.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcTrackerBase.java
@@ -86,7 +86,7 @@
     /** Delay between APN attempts.
         Note the property override mechanism is there just for testing purpose only. */
     protected static final int APN_DELAY_MILLIS =
-                                SystemProperties.getInt("persist.radio.apn_delay", 5000);
+                                SystemProperties.getInt("persist.radio.apn_delay", 20000);
 
     AlarmManager mAlarmManager;