Fix the reporting of ActiveApnTypes on CDMA

Previous fix limiting what was reported active was too strict, leading to
DISCONNECTED messages not being accepted (apn list was empty).

bug: 2151520
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
index 9407603..d0a9337 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
@@ -76,6 +76,9 @@
     /** Currently active CdmaDataConnection */
     private CdmaDataConnection mActiveDataConnection;
 
+    /** mimic of GSM's mActiveApn */
+    private boolean mIsApnActive = false;
+
     private boolean mPendingRestartRadio = false;
     private static final int TIME_DELAYED_TO_RESTART_RADIO =
             SystemProperties.getInt("ro.cdma.timetoradiorestart", 20000);
@@ -245,8 +248,7 @@
 
     @Override
     protected boolean isApnTypeActive(String type) {
-        return (isApnTypeAvailable(type) &&
-                (state != State.IDLE));
+        return (mIsApnActive && isApnTypeAvailable(type));
     }
 
     @Override
@@ -260,10 +262,15 @@
     }
 
     protected String[] getActiveApnTypes() {
-        if (state != State.IDLE) {
-            return mSupportedApnTypes.clone();
+        String[] result;
+        if (mIsApnActive) {
+            result = mSupportedApnTypes.clone();
+        } else {
+            // TODO - should this return an empty array?  See GSM too.
+            result = new String[1];
+            result[0] = Phone.APN_TYPE_DEFAULT;
         }
-        return new String[0];
+        return result;
     }
 
     protected String getActiveApnString() {
@@ -386,6 +393,7 @@
         if (!tearDown) {
             setState(State.IDLE);
             phone.notifyDataConnection(reason);
+            mIsApnActive = false;
         }
     }
 
@@ -409,6 +417,7 @@
         }
 
         mActiveDataConnection = conn;
+        mIsApnActive = true;
 
         Message msg = obtainMessage();
         msg.what = EVENT_DATA_SETUP_COMPLETE;
@@ -742,6 +751,7 @@
         }
 
         phone.notifyDataConnection(reason);
+        mIsApnActive = false;
         if (retryAfterDisconnected(reason)) {
           trySetupData(reason);
       }
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index c85b9bd..5bdf09f 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -596,32 +596,36 @@
     }
 
     protected String getInterfaceName(String apnType) {
-        if (mActivePdp != null
-                && (apnType == null || mActiveApn.canHandleType(apnType))) {
+        if (mActivePdp != null &&
+                (apnType == null ||
+                (mActiveApn != null && mActiveApn.canHandleType(apnType)))) {
             return mActivePdp.getInterface();
         }
         return null;
     }
 
     protected String getIpAddress(String apnType) {
-        if (mActivePdp != null
-                && (apnType == null || mActiveApn.canHandleType(apnType))) {
+        if (mActivePdp != null &&
+                (apnType == null ||
+                (mActiveApn != null && mActiveApn.canHandleType(apnType)))) {
             return mActivePdp.getIpAddress();
         }
         return null;
     }
 
     public String getGateway(String apnType) {
-        if (mActivePdp != null
-                && (apnType == null || mActiveApn.canHandleType(apnType))) {
+        if (mActivePdp != null &&
+                (apnType == null ||
+                (mActiveApn != null && mActiveApn.canHandleType(apnType)))) {
             return mActivePdp.getGatewayAddress();
         }
         return null;
     }
 
     protected String[] getDnsServers(String apnType) {
-        if (mActivePdp != null
-                && (apnType == null || mActiveApn.canHandleType(apnType))) {
+        if (mActivePdp != null &&
+                (apnType == null ||
+                (mActiveApn != null && mActiveApn.canHandleType(apnType)))) {
             return mActivePdp.getDnsServers();
         }
         return null;