Ensure self-managed calls skip call filtering.
Ensure the Telecom call filtering modules are not run for self-managed
calls.
Bug: 80125564
Test: Added unit test for this case.
Test: Manual test with test app to ensure incoming self mgd call is not
filtered.
Change-Id: I0d698f059a7e59d42e0d5ee6c32e8e8d340b8406
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index d379444..b9527e0 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -522,6 +522,12 @@
private int mHandoverState = HandoverState.HANDOVER_NONE;
/**
+ * Indicates whether this call is using one of the
+ * {@link com.android.server.telecom.callfiltering.IncomingCallFilter.CallFilter} modules.
+ */
+ private boolean mIsUsingCallFiltering = false;
+
+ /**
* Persists the specified parameters and initializes the new instance.
* @param context The context.
* @param repository The connection service repository.
@@ -3049,4 +3055,8 @@
boolean wasHighDefAudio() {
return mWasHighDefAudio;
}
+
+ public void setIsUsingCallFiltering(boolean isUsingCallFiltering) {
+ mIsUsingCallFiltering = isUsingCallFiltering;
+ }
}
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 9bdd1b0..e66a7d9 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -515,12 +515,18 @@
@Override
public void onSuccessfulIncomingCall(Call incomingCall) {
Log.d(this, "onSuccessfulIncomingCall");
- if (incomingCall.hasProperty(Connection.PROPERTY_EMERGENCY_CALLBACK_MODE)) {
- Log.i(this, "Skipping call filtering due to ECBM");
+ if (incomingCall.hasProperty(Connection.PROPERTY_EMERGENCY_CALLBACK_MODE) ||
+ incomingCall.isSelfManaged()) {
+ Log.i(this, "Skipping call filtering for %s (ecm=%b, selfMgd=%b)",
+ incomingCall.getId(),
+ incomingCall.hasProperty(Connection.PROPERTY_EMERGENCY_CALLBACK_MODE),
+ incomingCall.isSelfManaged());
onCallFilteringComplete(incomingCall, new CallFilteringResult(true, false, true, true));
+ incomingCall.setIsUsingCallFiltering(false);
return;
}
+ incomingCall.setIsUsingCallFiltering(true);
List<IncomingCallFilter.CallFilter> filters = new ArrayList<>();
filters.add(new DirectToVoicemailCallFilter(mCallerInfoLookupHelper));
filters.add(new AsyncBlockCheckFilter(mContext, new BlockCheckerAdapter(),
diff --git a/tests/src/com/android/server/telecom/tests/CallsManagerTest.java b/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
index 3fc3824..906b73e 100644
--- a/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
@@ -700,6 +700,25 @@
assertEquals(CallState.ACTIVE, newCall.getState());
}
+ @SmallTest
+ @Test
+ public void testNoFilteringOfSelfManagedCalls() {
+ ConnectionServiceWrapper connSvr1 = Mockito.mock(ConnectionServiceWrapper.class);
+
+ // GIVEN an incoming call which is self managed.
+ Call incomingCall = addSpyCallWithConnectionService(connSvr1);
+ doReturn(false).when(incomingCall).can(Connection.CAPABILITY_HOLD);
+ doReturn(false).when(incomingCall).can(Connection.CAPABILITY_SUPPORT_HOLD);
+ doReturn(true).when(incomingCall).isSelfManaged();
+ doNothing().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));
+ }
+
private Call addSpyCallWithConnectionService(ConnectionServiceWrapper connSvr) {
Call call = addSpyCall();
doReturn(connSvr).when(call).getConnectionService();