Prevent filtering of incoming emergency calls.
Turned off incoming call filtering for calls in emegergency SMS mode
and network identifiied emergency calls.
Bug: 234632741
Test: CallsManagerTest
Change-Id: I50034a2043836d28394bc6dd2f4ef004e5230a56
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index fd9d8a8..3548ac4 100755
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -673,12 +673,19 @@
phoneAccount == null || phoneAccount.getExtras() == null
? new Bundle()
: phoneAccount.getExtras();
+ TelephonyManager telephonyManager = getTelephonyManager();
if (incomingCall.hasProperty(Connection.PROPERTY_EMERGENCY_CALLBACK_MODE) ||
+ incomingCall.hasProperty(Connection.PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL) ||
+ telephonyManager.isInEmergencySmsMode() ||
incomingCall.isSelfManaged() ||
extras.getBoolean(PhoneAccount.EXTRA_SKIP_CALL_FILTERING)) {
- Log.i(this, "Skipping call filtering for %s (ecm=%b, selfMgd=%b, skipExtra=%b)",
+ Log.i(this, "Skipping call filtering for %s (ecm=%b, "
+ + "networkIdentifiedEmergencyCall = %b, emergencySmsMode = %b, "
+ + "selfMgd=%b, skipExtra=%b)",
incomingCall.getId(),
incomingCall.hasProperty(Connection.PROPERTY_EMERGENCY_CALLBACK_MODE),
+ incomingCall.hasProperty(Connection.PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL),
+ telephonyManager.isInEmergencySmsMode(),
incomingCall.isSelfManaged(),
extras.getBoolean(PhoneAccount.EXTRA_SKIP_CALL_FILTERING));
onCallFilteringComplete(incomingCall, new Builder()
diff --git a/tests/src/com/android/server/telecom/tests/CallsManagerTest.java b/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
index 3c8d3ba..6a579fb 100644
--- a/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
@@ -944,6 +944,43 @@
@SmallTest
@Test
+ public void testNoFilteringOfNetworkIdentifiedEmergencyCalls() {
+ // GIVEN an incoming call which is network identified as an emergency call.
+ Call incomingCall = addSpyCall(CallState.NEW);
+ incomingCall.setConnectionProperties(Connection.PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL);
+ doReturn(false).when(incomingCall).can(Connection.CAPABILITY_HOLD);
+ doReturn(false).when(incomingCall).can(Connection.CAPABILITY_SUPPORT_HOLD);
+ doReturn(true).when(incomingCall)
+ .hasProperty(Connection.PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL);
+ doReturn(true).when(incomingCall).setState(anyInt(), any());
+
+ // WHEN the incoming call is successfully added.
+ mCallsManager.onSuccessfulIncomingCall(incomingCall);
+
+ // THEN the incoming call is not using call filtering
+ verify(incomingCall).setIsUsingCallFiltering(eq(false));
+ }
+
+ @SmallTest
+ @Test
+ public void testNoFilteringOfEmergencySmsModeCalls() {
+ // GIVEN an incoming call which is network identified as an emergency call.
+ Call incomingCall = addSpyCall(CallState.NEW);
+ when(mComponentContextFixture.getTelephonyManager().isInEmergencySmsMode())
+ .thenReturn(true);
+ doReturn(false).when(incomingCall).can(Connection.CAPABILITY_HOLD);
+ doReturn(false).when(incomingCall).can(Connection.CAPABILITY_SUPPORT_HOLD);
+ doReturn(true).when(incomingCall).setState(anyInt(), any());
+
+ // WHEN the incoming call is successfully added.
+ mCallsManager.onSuccessfulIncomingCall(incomingCall);
+
+ // THEN the incoming call is not using call filtering
+ verify(incomingCall).setIsUsingCallFiltering(eq(false));
+ }
+
+ @SmallTest
+ @Test
public void testAcceptIncomingCallWhenHeadsetMediaButtonShortPress() {
// GIVEN an incoming call
Call incomingCall = addSpyCall();