11bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal/* 21bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * Copyright (C) 2016 The Android Open Source Project 31bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * 41bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * Licensed under the Apache License, Version 2.0 (the "License"); 51bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * you may not use this file except in compliance with the License. 61bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * You may obtain a copy of the License at 71bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * 81bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * http://www.apache.org/licenses/LICENSE-2.0 91bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * 101bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * Unless required by applicable law or agreed to in writing, software 111bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * distributed under the License is distributed on an "AS IS" BASIS, 121bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * See the License for the specific language governing permissions and 141bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * limitations under the License 151bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal */ 161bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 171bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepalpackage android.telecom; 181bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 191bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepalimport android.annotation.SdkConstant; 201bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepalimport android.app.Service; 211bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepalimport android.content.Intent; 221bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepalimport android.os.Handler; 231bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepalimport android.os.IBinder; 241bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepalimport android.os.Looper; 251bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepalimport android.os.Message; 261bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepalimport android.os.RemoteException; 271bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 281bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepalimport com.android.internal.os.SomeArgs; 291bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepalimport com.android.internal.telecom.ICallScreeningService; 301bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepalimport com.android.internal.telecom.ICallScreeningAdapter; 311bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 321bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal/** 331bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * This service can be implemented by the default dialer (see 341bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * {@link TelecomManager#getDefaultDialerPackage()}) to allow or disallow incoming calls before 351bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * they are shown to a user. 361bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * <p> 371bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * Below is an example manifest registration for a {@code CallScreeningService}. 381bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * <pre> 391bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * {@code 401bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * <service android:name="your.package.YourCallScreeningServiceImplementation" 411bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * android:permission="android.permission.BIND_SCREENING_SERVICE"> 421bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * <intent-filter> 431bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * <action android:name="android.telecom.CallScreeningService"/> 441bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * </intent-filter> 451bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * </service> 461bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * } 471bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * </pre> 481bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal */ 491bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepalpublic abstract class CallScreeningService extends Service { 501bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal /** 511bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * The {@link Intent} that must be declared as handled by the service. 521bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal */ 531bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal @SdkConstant(SdkConstant.SdkConstantType.SERVICE_ACTION) 541bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public static final String SERVICE_INTERFACE = "android.telecom.CallScreeningService"; 551bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 561bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal private static final int MSG_SCREEN_CALL = 1; 571bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 581bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal private final Handler mHandler = new Handler(Looper.getMainLooper()) { 591bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal @Override 601bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public void handleMessage(Message msg) { 611bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal switch (msg.what) { 621bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal case MSG_SCREEN_CALL: 631bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal SomeArgs args = (SomeArgs) msg.obj; 641bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal try { 651bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mCallScreeningAdapter = (ICallScreeningAdapter) args.arg1; 661bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal onScreenCall( 671bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal Call.Details.createFromParcelableCall((ParcelableCall) args.arg2)); 681bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } finally { 691bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal args.recycle(); 701bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 711bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal break; 721bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 731bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 741bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal }; 751bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 761bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal private final class CallScreeningBinder extends ICallScreeningService.Stub { 771bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal @Override 781bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public void screenCall(ICallScreeningAdapter adapter, ParcelableCall call) { 791bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal Log.v(this, "screenCall"); 801bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal SomeArgs args = SomeArgs.obtain(); 811bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal args.arg1 = adapter; 821bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal args.arg2 = call; 831bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mHandler.obtainMessage(MSG_SCREEN_CALL, args).sendToTarget(); 841bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 851bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 861bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 871bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal private ICallScreeningAdapter mCallScreeningAdapter; 881bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 891bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal /* 901bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * Information about how to respond to an incoming call. 911bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal */ 92f44607142f2793773fb240d73ff0cfc2aba1165bSailesh Nepal public static class CallResponse { 931bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal private final boolean mShouldDisallowCall; 941bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal private final boolean mShouldRejectCall; 951bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal private final boolean mShouldSkipCallLog; 961bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal private final boolean mShouldSkipNotification; 971bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 981bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal private CallResponse( 991bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal boolean shouldDisallowCall, 1001bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal boolean shouldRejectCall, 1011bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal boolean shouldSkipCallLog, 1021bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal boolean shouldSkipNotification) { 1031bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal if (!shouldDisallowCall 1041bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal && (shouldRejectCall || shouldSkipCallLog || shouldSkipNotification)) { 1051bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal throw new IllegalStateException("Invalid response state for allowed call."); 1061bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 1071bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 1081bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mShouldDisallowCall = shouldDisallowCall; 1091bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mShouldRejectCall = shouldRejectCall; 1101bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mShouldSkipCallLog = shouldSkipCallLog; 1111bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mShouldSkipNotification = shouldSkipNotification; 1121bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 1131bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 1141bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal /* 1151bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * @return Whether the incoming call should be blocked. 1161bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal */ 1171bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public boolean getDisallowCall() { 1181bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal return mShouldDisallowCall; 1191bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 1201bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 1211bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal /* 1221bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * @return Whether the incoming call should be disconnected as if the user had manually 1231bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * rejected it. 1241bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal */ 1251bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public boolean getRejectCall() { 1261bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal return mShouldRejectCall; 1271bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 1281bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 1291bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal /* 1301bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * @return Whether the incoming call should not be displayed in the call log. 1311bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal */ 1321bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public boolean getSkipCallLog() { 1331bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal return mShouldSkipCallLog; 1341bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 1351bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 1361bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal /* 1371bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * @return Whether a missed call notification should not be shown for the incoming call. 1381bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal */ 1391bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public boolean getSkipNotification() { 1401bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal return mShouldSkipNotification; 1411bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 1421bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 143f44607142f2793773fb240d73ff0cfc2aba1165bSailesh Nepal public static class Builder { 1441bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal private boolean mShouldDisallowCall; 1451bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal private boolean mShouldRejectCall; 1461bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal private boolean mShouldSkipCallLog; 1471bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal private boolean mShouldSkipNotification; 1481bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 1491bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal /* 1501bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * Sets whether the incoming call should be blocked. 1511bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal */ 1521bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public Builder setDisallowCall(boolean shouldDisallowCall) { 1531bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mShouldDisallowCall = shouldDisallowCall; 1541bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal return this; 1551bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 1561bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 1571bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal /* 1581bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * Sets whether the incoming call should be disconnected as if the user had manually 1591bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * rejected it. This property should only be set to true if the call is disallowed. 1601bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal */ 1611bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public Builder setRejectCall(boolean shouldRejectCall) { 1621bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mShouldRejectCall = shouldRejectCall; 1631bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal return this; 1641bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 1651bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 1661bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal /* 1671bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * Sets whether the incoming call should not be displayed in the call log. This property 1681bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * should only be set to true if the call is disallowed. 1691bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal */ 1701bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public Builder setSkipCallLog(boolean shouldSkipCallLog) { 1711bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mShouldSkipCallLog = shouldSkipCallLog; 1721bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal return this; 1731bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 1741bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 1751bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal /* 1761bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * Sets whether a missed call notification should not be shown for the incoming call. 1771bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * This property should only be set to true if the call is disallowed. 1781bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal */ 1791bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public Builder setSkipNotification(boolean shouldSkipNotification) { 1801bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mShouldSkipNotification = shouldSkipNotification; 1811bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal return this; 1821bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 1831bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 1841bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public CallResponse build() { 1851bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal return new CallResponse( 1861bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mShouldDisallowCall, 1871bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mShouldRejectCall, 1881bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mShouldSkipCallLog, 1891bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mShouldSkipNotification); 1901bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 1911bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 1921bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 1931bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 1941bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public CallScreeningService() { 1951bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 1961bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 1971bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal @Override 1981bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public IBinder onBind(Intent intent) { 1991bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal Log.v(this, "onBind"); 2001bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal return new CallScreeningBinder(); 2011bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 2021bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 2031bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal @Override 2041bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public boolean onUnbind(Intent intent) { 2051bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal Log.v(this, "onUnbind"); 2061bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal return false; 2071bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 2081bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 2091bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal /** 2101bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * Called when a new incoming call is added. 2111bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * {@link CallScreeningService#respondToCall(Call.Details, CallScreeningService.CallResponse)} 2121bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * should be called to allow or disallow the call. 2131bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * 2141bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * @param callDetails Information about a new incoming call, see {@link Call.Details}. 2151bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal */ 2161bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public abstract void onScreenCall(Call.Details callDetails); 2171bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal 2181bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal /** 2191bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * Responds to the given call, either allowing it or disallowing it. 2201bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * 2211bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * @param callDetails The call to allow. 2221bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * @param response The {@link CallScreeningService.CallResponse} which contains information 2231bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal * about how to respond to a call. 2241bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal */ 2251bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal public final void respondToCall(Call.Details callDetails, CallResponse response) { 2261bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal try { 2271bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal if (response.getDisallowCall()) { 2281bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mCallScreeningAdapter.disallowCall( 2291bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal callDetails.getTelecomCallId(), 2301bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal response.getRejectCall(), 2311bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal !response.getSkipCallLog(), 2321bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal !response.getSkipNotification()); 2331bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } else { 2341bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal mCallScreeningAdapter.allowCall(callDetails.getTelecomCallId()); 2351bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 2361bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } catch (RemoteException e) { 2371bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 2381bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal } 2391bef339b88b3f760603dcc08d79a62647fc18296Sailesh Nepal} 240