Merge "Remove isAnyActiveDataConnection and promote isDisconnected." into ics-factoryrom
diff --git a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
index 42ea4f29..ae152fb 100644
--- a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
@@ -1019,7 +1019,7 @@
         sendMessage(msg);
     }
 
-    public abstract boolean isAnyActiveDataConnections();
+    public abstract boolean isDisconnected();
 
     protected void onSetUserDataEnabled(boolean enabled) {
         synchronized (mDataEnabledLock) {
diff --git a/telephony/java/com/android/internal/telephony/ServiceStateTracker.java b/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
index 01b807d..1b3ee1e 100644
--- a/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -403,7 +403,14 @@
     public void powerOffRadioSafely(DataConnectionTracker dcTracker) {
         synchronized (this) {
             if (!mPendingRadioPowerOffAfterDataOff) {
-                if (dcTracker.isAnyActiveDataConnections()) {
+                // To minimize race conditions we call cleanUpAllConnections on
+                // both if else paths instead of before this isDisconnected test.
+                if (dcTracker.isDisconnected()) {
+                    // To minimize race conditions we do this after isDisconnected
+                    dcTracker.cleanUpAllConnections(Phone.REASON_RADIO_TURNED_OFF);
+                    if (DBG) log("Data disconnected, turn off radio right away.");
+                    hangupAndPowerOff();
+                } else {
                     dcTracker.cleanUpAllConnections(Phone.REASON_RADIO_TURNED_OFF);
                     Message msg = Message.obtain(this);
                     msg.what = EVENT_SET_RADIO_POWER_OFF;
@@ -415,10 +422,6 @@
                         log("Cannot send delayed Msg, turn off radio right away.");
                         hangupAndPowerOff();
                     }
-                } else {
-                    dcTracker.cleanUpAllConnections(Phone.REASON_RADIO_TURNED_OFF);
-                    if (DBG) log("Data disconnected, turn off radio right away.");
-                    hangupAndPowerOff();
                 }
             }
         }
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
index 078e51d..4dace82 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
@@ -946,8 +946,8 @@
     }
 
     @Override
-    public boolean isAnyActiveDataConnections() {
-        return (mState != State.IDLE);
+    public boolean isDisconnected() {
+        return ((mState == State.IDLE) || (mState == State.FAILED));
     }
 
     @Override
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index dd8a60a..ebf5e65 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -1961,7 +1961,8 @@
         return false;
     }
 
-    protected boolean isDisconnected() {
+    @Override
+    public boolean isDisconnected() {
         for (ApnContext apnContext : mApnContexts.values()) {
             if (!apnContext.isDisconnected()) {
                 // At least one context was not disconnected return false
@@ -2348,11 +2349,6 @@
     }
 
     @Override
-    public boolean isAnyActiveDataConnections() {
-        return isConnected();
-    }
-
-    @Override
     protected void log(String s) {
         Log.d(LOG_TAG, "[GsmDCT] "+ s);
     }