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

Commit 71cc4a3e authored by Qing Zhong's avatar Qing Zhong Committed by Android (Google) Code Review
Browse files

Merge "Apply Dnd filter only calls with dnd only filter extra" into main

parents 4ad07e43 9ddbe809
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ aconfig_declarations {
      "telecom_broadcast_flags.aconfig",
      "telecom_ringer_flag_declarations.aconfig",
      "telecom_api_flags.aconfig",
      "telecom_call_filtering_flags.aconfig",
      "telecom_incallservice_flags.aconfig"
    ],
}
+8 −0
Original line number Diff line number Diff line
package: "com.android.server.telecom.flags"

flag {
  name: "skip_filter_phone_account_perform_dnd_filter"
  namespace: "telecom"
  description: "Gates whether to still perform Dnd filter when phone account has skip_filter call extra."
  bug: "222333869"
}
 No newline at end of file
+24 −3
Original line number Diff line number Diff line
@@ -129,6 +129,7 @@ import com.android.server.telecom.callfiltering.CallScreeningServiceFilter;
import com.android.server.telecom.callfiltering.DirectToVoicemailFilter;
import com.android.server.telecom.callfiltering.DndCallFilter;
import com.android.server.telecom.callfiltering.IncomingCallFilterGraph;
import com.android.server.telecom.callfiltering.IncomingCallFilterGraphProvider;
import com.android.server.telecom.callredirection.CallRedirectionProcessor;
import com.android.server.telecom.components.ErrorDialogActivity;
import com.android.server.telecom.components.TelecomBroadcastReceiver;
@@ -466,6 +467,8 @@ public class CallsManager extends Call.ListenerBase
    private final CallStreamingNotification mCallStreamingNotification;
    private final FeatureFlags mFeatureFlags;

    private final IncomingCallFilterGraphProvider mIncomingCallFilterGraphProvider;

    private final ConnectionServiceFocusManager.CallsManagerRequester mRequester =
            new ConnectionServiceFocusManager.CallsManagerRequester() {
                @Override
@@ -580,7 +583,8 @@ public class CallsManager extends Call.ListenerBase
            EmergencyCallDiagnosticLogger emergencyCallDiagnosticLogger,
            CallAudioCommunicationDeviceTracker communicationDeviceTracker,
            CallStreamingNotification callStreamingNotification,
            FeatureFlags featureFlags) {
            FeatureFlags featureFlags,
            IncomingCallFilterGraphProvider incomingCallFilterGraphProvider) {

        mContext = context;
        mLock = lock;
@@ -599,6 +603,7 @@ public class CallsManager extends Call.ListenerBase
        mEmergencyCallHelper = emergencyCallHelper;
        mCallerInfoLookupHelper = callerInfoLookupHelper;
        mEmergencyCallDiagnosticLogger = emergencyCallDiagnosticLogger;
        mIncomingCallFilterGraphProvider = incomingCallFilterGraphProvider;

        mDtmfLocalTonePlayer =
                new DtmfLocalTonePlayer(new DtmfLocalTonePlayer.ToneGeneratorProxy());
@@ -793,11 +798,12 @@ public class CallsManager extends Call.ListenerBase
                ? new Bundle()
                : phoneAccount.getExtras();
        TelephonyManager telephonyManager = getTelephonyManager();
        boolean performDndFilter = mFeatureFlags.skipFilterPhoneAccountPerformDndFilter();
        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)) {
                (!performDndFilter && extras.getBoolean(PhoneAccount.EXTRA_SKIP_CALL_FILTERING))) {
            Log.i(this, "Skipping call filtering for %s (ecm=%b, "
                            + "networkIdentifiedEmergencyCall = %b, emergencySmsMode = %b, "
                            + "selfMgd=%b, skipExtra=%b)",
@@ -815,12 +821,27 @@ public class CallsManager extends Call.ListenerBase
                    .build(), false);
            incomingCall.setIsUsingCallFiltering(false);
            return;
        } else if (performDndFilter && extras.getBoolean(PhoneAccount.EXTRA_SKIP_CALL_FILTERING)) {
            IncomingCallFilterGraph graph = setupDndFilterOnlyGraph(incomingCall);
            graph.performFiltering();
            return;
        }

        IncomingCallFilterGraph graph = setUpCallFilterGraph(incomingCall);
        graph.performFiltering();
    }

    private IncomingCallFilterGraph setupDndFilterOnlyGraph(Call incomingHfpCall) {
        incomingHfpCall.setIsUsingCallFiltering(true);
        DndCallFilter dndCallFilter = new DndCallFilter(incomingHfpCall, mRinger);
        IncomingCallFilterGraph graph = mIncomingCallFilterGraphProvider.createGraph(
                incomingHfpCall,
                this::onCallFilteringComplete, mContext, mTimeoutsAdapter, mLock);
        graph.addFilter(dndCallFilter);
        mGraphHandlerThreads.add(graph.getHandlerThread());
        return graph;
    }

    private IncomingCallFilterGraph setUpCallFilterGraph(Call incomingCall) {
        incomingCall.setIsUsingCallFiltering(true);
        String carrierPackageName = getCarrierPackageName();
@@ -833,7 +854,7 @@ public class CallsManager extends Call.ListenerBase
                mContext.getPackageManager(), packageName);
        ParcelableCallUtils.Converter converter = new ParcelableCallUtils.Converter();

        IncomingCallFilterGraph graph = new IncomingCallFilterGraph(incomingCall,
        IncomingCallFilterGraph graph = mIncomingCallFilterGraphProvider.createGraph(incomingCall,
                this::onCallFilteringComplete, mContext, mTimeoutsAdapter, mLock);
        DirectToVoicemailFilter voicemailFilter = new DirectToVoicemailFilter(incomingCall,
                mCallerInfoLookupHelper);
+5 −1
Original line number Diff line number Diff line
@@ -45,6 +45,9 @@ import com.android.server.telecom.bluetooth.BluetoothDeviceManager;
import com.android.server.telecom.bluetooth.BluetoothRouteManager;
import com.android.server.telecom.bluetooth.BluetoothStateReceiver;
import com.android.server.telecom.callfiltering.BlockedNumbersAdapter;
import com.android.server.telecom.callfiltering.CallFilterResultCallback;
import com.android.server.telecom.callfiltering.IncomingCallFilterGraph;
import com.android.server.telecom.callfiltering.IncomingCallFilterGraphProvider;
import com.android.server.telecom.components.UserCallIntentProcessor;
import com.android.server.telecom.components.UserCallIntentProcessorFactory;
import com.android.server.telecom.flags.FeatureFlags;
@@ -409,7 +412,8 @@ public class TelecomSystem {
                    emergencyCallDiagnosticLogger,
                    communicationDeviceTracker,
                    callStreamingNotification,
                    featureFlags);
                    featureFlags,
                    IncomingCallFilterGraph::new);

            mIncomingCallNotifier = incomingCallNotifier;
            incomingCallNotifier.setCallsManagerProxy(new IncomingCallNotifier.CallsManagerProxy() {
+44 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.server.telecom.callfiltering;

import android.content.Context;

import com.android.server.telecom.Call;
import com.android.server.telecom.TelecomSystem;
import com.android.server.telecom.Timeouts;

/**
 * Interface to provide a {@link IncomingCallFilterGraph}. This class serve for unit test purpose
 * to mock an incoming call filter graph in test code.
 */
public interface IncomingCallFilterGraphProvider {


    /**
     * Provide a {@link  IncomingCallFilterGraph}
     * @param call The call for the filters.
     * @param listener Callback object to trigger when filtering is done.
     * @param context An android context.
     * @param timeoutsAdapter Adapter to provide timeout value for call filtering.
     * @param lock Telecom lock.
     * @return
     */
    IncomingCallFilterGraph createGraph(Call call, CallFilterResultCallback listener,
            Context context,
            Timeouts.Adapter timeoutsAdapter, TelecomSystem.SyncRoot lock);
}
Loading