Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0564078a authored by Tyler Gunn's avatar Tyler Gunn
Browse files

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
parent 2eb5d245
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -521,6 +521,12 @@ public class Call implements CreateConnectionResponse, EventManager.Loggable,
     */
    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.
@@ -3049,4 +3055,8 @@ public class Call implements CreateConnectionResponse, EventManager.Loggable,
    boolean wasHighDefAudio() {
        return mWasHighDefAudio;
    }

    public void setIsUsingCallFiltering(boolean isUsingCallFiltering) {
        mIsUsingCallFiltering = isUsingCallFiltering;
    }
}
+8 −2
Original line number Diff line number Diff line
@@ -515,12 +515,18 @@ public class CallsManager extends Call.ListenerBase
    @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(),
+19 −0
Original line number Diff line number Diff line
@@ -700,6 +700,25 @@ public class CallsManagerTest extends TelecomTestCase {
        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();