Merge "Fixed the set/getAllowedNetworkTypes debug messages"
diff --git a/src/com/android/phone/EmergencyCallbackModeExitDialog.java b/src/com/android/phone/EmergencyCallbackModeExitDialog.java
index fc0e513..6901789 100644
--- a/src/com/android/phone/EmergencyCallbackModeExitDialog.java
+++ b/src/com/android/phone/EmergencyCallbackModeExitDialog.java
@@ -43,6 +43,8 @@
 
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.TelephonyIntents;
+import com.android.internal.telephony.domainselection.DomainSelectionResolver;
+import com.android.internal.telephony.emergency.EmergencyStateTracker;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -244,9 +246,16 @@
                     .setMessage(text)
                     .setPositiveButton(R.string.alert_dialog_yes,
                             new DialogInterface.OnClickListener() {
-                                public void onClick(DialogInterface dialog,int whichButton) {
+                                public void onClick(DialogInterface dialog,
+                                        int whichButton) {
                                     // User clicked Yes. Exit Emergency Callback Mode.
-                                    mPhone.exitEmergencyCallbackMode();
+                                    if (DomainSelectionResolver.getInstance()
+                                            .isDomainSelectionSupported()) {
+                                        EmergencyStateTracker.getInstance()
+                                                .exitEmergencyCallbackMode();
+                                    } else {
+                                        mPhone.exitEmergencyCallbackMode();
+                                    }
 
                                     // Show progress dialog
                                     showDialog(EXIT_ECM_PROGRESS_DIALOG);
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 68956bd..4a89bd6 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -532,7 +532,17 @@
      */
     private final TelephonyConnection.TelephonyConnectionListener mEmergencyConnectionListener =
             new TelephonyConnection.TelephonyConnectionListener() {
-        @Override
+                @Override
+                public void onOriginalConnectionConfigured(TelephonyConnection c) {
+                    com.android.internal.telephony.Connection origConn = c.getOriginalConnection();
+                    if (origConn == null) return;
+                    // Update the domain in the case that it changes,for example during initial
+                    // setup or when there was an srvcc or internal redial.
+                    mEmergencyStateTracker.onEmergencyCallDomainUpdated(
+                            origConn.getPhoneType(), c.getTelecomCallId());
+                }
+
+                @Override
         public void onStateChanged(Connection connection, @Connection.ConnectionState int state) {
             if (connection != null) {
                 TelephonyConnection c = (TelephonyConnection) connection;
diff --git a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
index 53a60af..8100e63 100644
--- a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
@@ -274,12 +274,6 @@
                 onWwanNetworkTypeSelected(mCsNetworkType);
                 return;
             }
-        } else if (getImsNetworkTypeConfiguration().isEmpty()
-                || (mRequiresVoLteEnabled && !isAdvancedCallingSettingEnabled())) {
-            // Emergency call over IMS is not supported.
-            mCsNetworkType = UTRAN;
-            onWwanNetworkTypeSelected(mCsNetworkType);
-            return;
         }
 
         if (mLastTransportType == TRANSPORT_TYPE_WLAN) {
@@ -477,14 +471,6 @@
     }
 
     private void selectDomainFromInitialState() {
-        if (getImsNetworkTypeConfiguration().isEmpty()
-                || (mRequiresVoLteEnabled && !isAdvancedCallingSettingEnabled())) {
-            // Emergency call over IMS is not supported.
-            mCsNetworkType = UTRAN;
-            onWwanNetworkTypeSelected(mCsNetworkType);
-            return;
-        }
-
         boolean csInService = isCsInService();
         boolean psInService = isPsInService();
 
@@ -613,6 +599,12 @@
      * @return The list of preferred network types.
      */
     private @RadioAccessNetworkType List<Integer> getNextPreferredNetworks(boolean csPreferred) {
+        if (mRequiresVoLteEnabled && !isAdvancedCallingSettingEnabled()) {
+            // Emergency call over IMS is not supported.
+            logi("getNextPreferredNetworks VoLte setting is not enabled.");
+            return generatePreferredNetworks(getCsNetworkTypeConfiguration());
+        }
+
         List<Integer> preferredNetworks = new ArrayList<>();
 
         List<Integer> domains = getDomainPreference();
@@ -791,6 +783,11 @@
         EmergencyRegResult regResult = mSelectionAttributes.getEmergencyRegResult();
         logi("getSelectablePsNetworkType regResult=" + regResult);
         if (regResult == null) return UNKNOWN;
+        if (mRequiresVoLteEnabled && !isAdvancedCallingSettingEnabled()) {
+            // Emergency call over IMS is not supported.
+            logi("getSelectablePsNetworkType VoLte setting is not enabled.");
+            return UNKNOWN;
+        }
 
         int accessNetwork = regResult.getAccessNetwork();
         List<Integer> ratList = getImsNetworkTypeConfiguration();
diff --git a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
index 7a01004..aedfe9e 100644
--- a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
@@ -864,7 +864,7 @@
     }
 
     @Test
-    public void testVoLteOffEpsImsNotRegisteredSelectCs() throws Exception {
+    public void testVoLteOffEpsImsNotRegisteredScanCsPreferred() throws Exception {
         PersistableBundle bundle = getDefaultPersistableBundle();
         bundle.putBoolean(KEY_EMERGENCY_REQUIRES_VOLTE_ENABLED_BOOL, true);
         when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(bundle);
@@ -885,7 +885,7 @@
         bindImsServiceUnregistered();
 
         // Requires VoLTE enabled but VoLTE is'nt enabled.
-        verifyCsDialed();
+        verifyScanCsPreferred();
     }
 
     @Test