Disable data call in emergency call

Same change as 79ef673d56e2599932b8b7f13695d23b4df54d09 rebased
diff --git a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
index 237d533..66eb789 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
@@ -749,6 +749,9 @@
             Intent intent = new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS);
             ActivityManagerNative.broadcastStickyIntent(intent, null);
             return false;
+        } else if ((mCT.state == Phone.State.OFFHOOK) && mCT.isInEmergencyCall()) {
+            // Do not allow data call to be enabled when emergency call is going on
+            return false;
         } else {
             return mDataConnection.setDataEnabled(true);
         }
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
index 3b2c90c..806c31d 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
@@ -73,6 +73,7 @@
     CdmaConnection pendingMO;
     boolean hangupPendingMO;
     boolean pendingCallInEcm=false;
+    boolean mIsInEmergencyCall = false;
     CDMAPhone phone;
 
     boolean desiredMute = false;    // false = mute off
@@ -219,6 +220,9 @@
             // Always unmute when initiating a new call
             setMute(false);
 
+            // Check data call
+            disableDataCallInEmergencyCall(dialString);
+
             // In Ecm mode, if another emergency call is dialed, Ecm mode will not exit.
             if(!isPhoneInEcmMode || (isPhoneInEcmMode && isEmergencyCall)) {
                 cm.dial(pendingMO.address, clirMode, obtainCompleteMessage());
@@ -245,6 +249,9 @@
     private Connection
     dialThreeWay (String dialString) {
         if (!foregroundCall.isIdle()) {
+            // Check data call
+            disableDataCallInEmergencyCall(dialString);
+
             // Attach the new connection to foregroundCall
             pendingMO = new CdmaConnection(phone.getContext(),
                                 dialString, this, foregroundCall);
@@ -556,6 +563,8 @@
                 // Re-start Ecm timer when the connected emergency call ends
                 if (mIsEcmTimerCanceled) {
                     handleEcmTimer(phone.RESTART_ECM_TIMER);
+                } else {
+                    mIsInEmergencyCall = false;
                 }
 
                 // Dropped connections are removed from the CallTracker
@@ -1010,6 +1019,26 @@
         }
     }
 
+    /**
+     * Disable data call when emergency call is connected
+     */
+    private void disableDataCallInEmergencyCall(String dialString) {
+        if (PhoneNumberUtils.isEmergencyNumber(dialString)) {
+            phone.disableDataConnectivity();
+            mIsInEmergencyCall = true;
+        }
+    }
+
+    /**
+     * Check if current call is in emergency call
+     *
+     * @return true if it is in emergency call
+     *         false if it is not in emergency call
+     */
+    boolean isInEmergencyCall() {
+        return mIsInEmergencyCall;
+    }
+
     protected void log(String msg) {
         Log.d(LOG_TAG, "[CdmaCallTracker] " + msg);
     }