Merge "Send SMS over 1x when on eHRPD/LTE and active voice call" into lmp-dev
diff --git a/src/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java b/src/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
index 0e1a30f..cf5ad10 100755
--- a/src/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
+++ b/src/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
@@ -41,6 +41,8 @@
 import com.android.internal.telephony.SmsUsageMonitor;
 import com.android.internal.telephony.TelephonyProperties;
 import com.android.internal.telephony.cdma.sms.UserData;
+import com.android.internal.telephony.PhoneConstants;
+import android.telephony.TelephonyManager;
 
 import java.util.HashMap;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -260,11 +262,19 @@
         Message reply = obtainMessage(EVENT_SEND_SMS_COMPLETE, tracker);
         byte[] pdu = (byte[]) tracker.mData.get("pdu");
 
+        int currentDataNetwork = mPhone.getServiceState().getDataNetworkType();
+        boolean imsSmsDisabled = (currentDataNetwork == TelephonyManager.NETWORK_TYPE_EHRPD
+                    || (currentDataNetwork == TelephonyManager.NETWORK_TYPE_LTE
+                    && !mPhone.getServiceStateTracker().isConcurrentVoiceAndDataAllowed()))
+                    && mPhone.getServiceState().getVoiceNetworkType()
+                    == TelephonyManager.NETWORK_TYPE_1xRTT
+                    && mPhone.getState() != PhoneConstants.State.IDLE;
+
         // sms over cdma is used:
         //   if sms over IMS is not supported AND
         //   this is not a retry case after sms over IMS failed
         //     indicated by mImsRetry > 0
-        if (0 == tracker.mImsRetry && !isIms()) {
+        if (0 == tracker.mImsRetry && !isIms() || imsSmsDisabled) {
             mCi.sendCdmaSms(pdu, reply);
         } else {
             mCi.sendImsCdmaSms(pdu, tracker.mImsRetry, tracker.mMessageRef, reply);