Merge "[RCS UCE] Update the UserCapabilityExchangeImplTest test case"
diff --git a/src/com/android/phone/CallForwardEditPreference.java b/src/com/android/phone/CallForwardEditPreference.java
index 8e0b685..bf296f9 100644
--- a/src/com/android/phone/CallForwardEditPreference.java
+++ b/src/com/android/phone/CallForwardEditPreference.java
@@ -384,7 +384,9 @@
                 CallForwardInfo cfInfoArray[] = (CallForwardInfo[]) ar.result;
                 if (cfInfoArray == null || cfInfoArray.length == 0) {
                     Log.d(LOG_TAG, "handleGetCFResponse: cfInfoArray.length==0");
-                    mTcpListener.onError(CallForwardEditPreference.this, RESPONSE_ERROR);
+                    if (!(ar.userObj instanceof Throwable)) {
+                        mTcpListener.onError(CallForwardEditPreference.this, RESPONSE_ERROR);
+                    }
                 } else {
                     for (int i = 0, length = cfInfoArray.length; i < length; i++) {
                         Log.d(LOG_TAG, "handleGetCFResponse, cfInfoArray[" + i + "]="
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index d07be41..a28130d 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -7874,11 +7874,9 @@
         try {
             for (Phone phone: PhoneFactory.getPhones()) {
                 if (phone.getEmergencyNumberTracker() != null
-                        && phone.getEmergencyNumberTracker() != null) {
-                    if (phone.getEmergencyNumberTracker().isEmergencyNumber(
-                            number, exactMatch)) {
-                        return true;
-                    }
+                        && phone.getEmergencyNumberTracker()
+                                .isEmergencyNumber(number, exactMatch)) {
+                    return true;
                 }
             }
             return false;
diff --git a/src/com/android/phone/TimeConsumingPreferenceActivity.java b/src/com/android/phone/TimeConsumingPreferenceActivity.java
index 3b5fe21..8c5ae6d 100644
--- a/src/com/android/phone/TimeConsumingPreferenceActivity.java
+++ b/src/com/android/phone/TimeConsumingPreferenceActivity.java
@@ -187,11 +187,6 @@
     @Override
     public void onError(Preference preference, int error) {
         if (DBG) dumpState();
-        if (!preference.isEnabled()) {
-            Log.i(LOG_TAG, "onError, skipped duplicated error popup");
-            return;
-        }
-
         Log.i(LOG_TAG, "onError, preference=" + preference.getKey() + ", error=" + error);
 
         if (mIsForeground) {
diff --git a/src/com/android/services/telephony/CdmaConnection.java b/src/com/android/services/telephony/CdmaConnection.java
index 90e7663..c7b324d 100644
--- a/src/com/android/services/telephony/CdmaConnection.java
+++ b/src/com/android/services/telephony/CdmaConnection.java
@@ -16,11 +16,12 @@
 
 package com.android.services.telephony;
 
+import android.content.Context;
 import android.os.Handler;
 import android.os.Message;
 import android.provider.Settings;
 import android.telephony.DisconnectCause;
-import android.telephony.PhoneNumberUtils;
+import android.telephony.TelephonyManager;
 
 import com.android.internal.telephony.Call;
 import com.android.internal.telephony.CallStateException;
@@ -284,8 +285,14 @@
 
     private boolean isEmergency() {
         Phone phone = getPhone();
-        return phone != null && getAddress() != null && PhoneNumberUtils.isLocalEmergencyNumber(
-                phone.getContext(), getAddress().getSchemeSpecificPart());
+        if (phone != null && getAddress() != null) {
+            TelephonyManager tm = (TelephonyManager) phone.getContext()
+                    .getSystemService(Context.TELEPHONY_SERVICE);
+            if (tm != null) {
+                return tm.isEmergencyNumber(getAddress().getSchemeSpecificPart());
+            }
+        }
+        return false;
     }
 
     /**
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 916b4ce..1caa8e7 100755
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -1325,7 +1325,9 @@
                 setCallerDisplayName(name, namePresentation);
             }
 
-            if (PhoneNumberUtils.isEmergencyNumber(mOriginalConnection.getAddress())) {
+            TelephonyManager tm = (TelephonyManager) getPhone().getContext()
+                    .getSystemService(Context.TELEPHONY_SERVICE);
+            if (tm.isEmergencyNumber(mOriginalConnection.getAddress())) {
                 mTreatAsEmergencyCall = true;
             }
 
@@ -1388,7 +1390,9 @@
             mHandler.obtainMessage(MSG_CONNECTION_EXTRAS_CHANGED, connExtras == null ? null :
                     new Bundle(connExtras)).sendToTarget();
 
-        if (PhoneNumberUtils.isEmergencyNumber(mOriginalConnection.getAddress())) {
+        TelephonyManager tm = (TelephonyManager) getPhone().getContext()
+                .getSystemService(Context.TELEPHONY_SERVICE);
+        if (tm.isEmergencyNumber(mOriginalConnection.getAddress())) {
             mTreatAsEmergencyCall = true;
         }
         // Propagate VERSTAT for IMS calls.
diff --git a/tests/src/com/android/services/telephony/TestTelephonyConnection.java b/tests/src/com/android/services/telephony/TestTelephonyConnection.java
index 2635e60..67e0329 100644
--- a/tests/src/com/android/services/telephony/TestTelephonyConnection.java
+++ b/tests/src/com/android/services/telephony/TestTelephonyConnection.java
@@ -21,6 +21,7 @@
 import android.os.Bundle;
 import android.os.PersistableBundle;
 import android.telecom.PhoneAccountHandle;
+import android.telephony.TelephonyManager;
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
@@ -61,6 +62,9 @@
     Resources mMockResources;
 
     @Mock
+    TelephonyManager mMockTelephonyManager;
+
+    @Mock
     EmergencyNumberTracker mEmergencyNumberTracker;
 
     private Phone mMockPhone;
@@ -84,6 +88,7 @@
 
         mMockPhone = mock(Phone.class);
         mMockContext = mock(Context.class);
+        mMockTelephonyManager = mock(TelephonyManager.class);
         mOriginalConnection = mMockRadioConnection;
         // Set up mMockRadioConnection and mMockPhone to contain an active call
         when(mMockRadioConnection.getState()).thenReturn(Call.State.ACTIVE);
@@ -101,6 +106,8 @@
         when(mMockPhone.getContext()).thenReturn(mMockContext);
         when(mMockPhone.getCurrentSubscriberUris()).thenReturn(null);
         when(mMockContext.getResources()).thenReturn(mMockResources);
+        when(mMockContext.getSystemService(Context.TELEPHONY_SERVICE))
+                .thenReturn(mMockTelephonyManager);
         when(mMockResources.getBoolean(anyInt())).thenReturn(false);
         when(mMockPhone.getDefaultPhone()).thenReturn(mMockPhone);
         when(mMockPhone.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_IMS);