Loading flags/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -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" ], } Loading flags/telecom_call_filtering_flags.aconfig 0 → 100644 +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 src/com/android/server/telecom/CallsManager.java +24 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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; Loading @@ -599,6 +603,7 @@ public class CallsManager extends Call.ListenerBase mEmergencyCallHelper = emergencyCallHelper; mCallerInfoLookupHelper = callerInfoLookupHelper; mEmergencyCallDiagnosticLogger = emergencyCallDiagnosticLogger; mIncomingCallFilterGraphProvider = incomingCallFilterGraphProvider; mDtmfLocalTonePlayer = new DtmfLocalTonePlayer(new DtmfLocalTonePlayer.ToneGeneratorProxy()); Loading Loading @@ -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)", Loading @@ -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(); Loading @@ -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); Loading src/com/android/server/telecom/TelecomSystem.java +5 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -409,7 +412,8 @@ public class TelecomSystem { emergencyCallDiagnosticLogger, communicationDeviceTracker, callStreamingNotification, featureFlags); featureFlags, IncomingCallFilterGraph::new); mIncomingCallNotifier = incomingCallNotifier; incomingCallNotifier.setCallsManagerProxy(new IncomingCallNotifier.CallsManagerProxy() { Loading src/com/android/server/telecom/callfiltering/IncomingCallFilterGraphProvider.java 0 → 100644 +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
flags/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -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" ], } Loading
flags/telecom_call_filtering_flags.aconfig 0 → 100644 +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
src/com/android/server/telecom/CallsManager.java +24 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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; Loading @@ -599,6 +603,7 @@ public class CallsManager extends Call.ListenerBase mEmergencyCallHelper = emergencyCallHelper; mCallerInfoLookupHelper = callerInfoLookupHelper; mEmergencyCallDiagnosticLogger = emergencyCallDiagnosticLogger; mIncomingCallFilterGraphProvider = incomingCallFilterGraphProvider; mDtmfLocalTonePlayer = new DtmfLocalTonePlayer(new DtmfLocalTonePlayer.ToneGeneratorProxy()); Loading Loading @@ -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)", Loading @@ -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(); Loading @@ -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); Loading
src/com/android/server/telecom/TelecomSystem.java +5 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -409,7 +412,8 @@ public class TelecomSystem { emergencyCallDiagnosticLogger, communicationDeviceTracker, callStreamingNotification, featureFlags); featureFlags, IncomingCallFilterGraph::new); mIncomingCallNotifier = incomingCallNotifier; incomingCallNotifier.setCallsManagerProxy(new IncomingCallNotifier.CallsManagerProxy() { Loading
src/com/android/server/telecom/callfiltering/IncomingCallFilterGraphProvider.java 0 → 100644 +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); }