16d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu/* 26d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * Copyright (C) 2016 The Android Open Source Project 36d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * 46d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * Licensed under the Apache License, Version 2.0 (the "License"); 56d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * you may not use this file except in compliance with the License. 66d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * You may obtain a copy of the License at 76d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * 86d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * http://www.apache.org/licenses/LICENSE-2.0 96d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * 106d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * Unless required by applicable law or agreed to in writing, software 116d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * distributed under the License is distributed on an "AS IS" BASIS, 126d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * See the License for the specific language governing permissions and 146d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * limitations under the License 156d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu */ 166d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 176d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liupackage com.android.server.telecom.tests; 186d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.Manifest; 196d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.content.ComponentName; 206d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.content.Context; 216d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.content.Intent; 226d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.content.ServiceConnection; 236d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.content.pm.PackageManager; 246d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.content.pm.ResolveInfo; 256d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.content.pm.ServiceInfo; 266d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.os.IBinder; 276d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.os.RemoteException; 286d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.os.UserHandle; 296d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.telecom.CallScreeningService; 306d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.telecom.ParcelableCall; 316d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.test.suitebuilder.annotation.SmallTest; 326d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 336d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport com.android.internal.telecom.ICallScreeningAdapter; 346d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport com.android.internal.telecom.ICallScreeningService; 356d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport com.android.server.telecom.Call; 366d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport com.android.server.telecom.CallsManager; 377c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liuimport com.android.server.telecom.DefaultDialerCache; 386d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport com.android.server.telecom.ParcelableCallUtils; 396d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport com.android.server.telecom.PhoneAccountRegistrar; 406d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport com.android.server.telecom.TelecomServiceImpl; 416d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport com.android.server.telecom.callfiltering.CallFilterResultCallback; 426d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport com.android.server.telecom.callfiltering.CallFilteringResult; 436d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport com.android.server.telecom.callfiltering.CallScreeningServiceFilter; 446d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport com.android.server.telecom.TelecomSystem; 456d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 466d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport org.mockito.ArgumentCaptor; 476d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport org.mockito.Mock; 486d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 496d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport java.util.Collections; 506d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 51d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebingerimport static org.mockito.ArgumentMatchers.nullable; 526d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport static org.mockito.Matchers.any; 536d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport static org.mockito.Matchers.anyBoolean; 546d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport static org.mockito.Matchers.anyInt; 556d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport static org.mockito.Matchers.anyString; 566d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport static org.mockito.Matchers.eq; 576d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport static org.mockito.Mockito.doReturn; 586d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport static org.mockito.Mockito.doThrow; 596d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport static org.mockito.Mockito.mock; 606d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport static org.mockito.Mockito.verify; 616d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport static org.mockito.Mockito.when; 626d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 636d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liupublic class CallScreeningServiceFilterTest extends TelecomTestCase { 646d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @Mock Context mContext; 656d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @Mock CallsManager mCallsManager; 666d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @Mock PhoneAccountRegistrar mPhoneAccountRegistrar; 677c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu @Mock DefaultDialerCache mDefaultDialerCache; 687c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu @Mock ParcelableCallUtils.Converter mParcelableCallUtilsConverter; 696d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu private TelecomSystem.SyncRoot mLock = new TelecomSystem.SyncRoot() { }; 706d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 716d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @Mock Call mCall; 726d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @Mock CallFilterResultCallback mCallback; 736d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 746d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @Mock PackageManager mPackageManager; 756d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @Mock IBinder mBinder; 766d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @Mock ICallScreeningService mCallScreeningService; 776d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 786d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu private static final String PKG_NAME = "com.android.services.telecom.tests"; 796d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu private static final String CLS_NAME = "CallScreeningService"; 806d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu private static final ComponentName COMPONENT_NAME = new ComponentName(PKG_NAME, CLS_NAME); 816d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu private static final String CALL_ID = "u89prgt9ps78y5"; 826d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 836d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu private ResolveInfo mResolveInfo; 846d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 856d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu private static final CallFilteringResult PASS_RESULT = new CallFilteringResult( 866d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu true, // shouldAllowCall 876d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu false, // shouldReject 886d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu true, // shouldAddToCallLog 896d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu true // shouldShowNotification 906d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu ); 916d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 926d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu private CallScreeningServiceFilter mFilter; 936d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @Override 946d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu public void setUp() throws Exception { 956d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu super.setUp(); 966d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu when(mCallsManager.getCurrentUserHandle()).thenReturn(UserHandle.CURRENT); 976d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu when(mContext.getPackageManager()).thenReturn(mPackageManager); 986d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu when(mCall.getId()).thenReturn(CALL_ID); 996d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu// when(mBinder.queryLocalInterface(anyString())).thenReturn(mCallScreeningService); 1006d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu doReturn(mCallScreeningService).when(mBinder).queryLocalInterface(anyString()); 1016d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 1026d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu mResolveInfo = new ResolveInfo() {{ 1036d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu serviceInfo = new ServiceInfo(); 1046d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu serviceInfo.packageName = PKG_NAME; 1056d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu serviceInfo.name = CLS_NAME; 1066d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu serviceInfo.permission = Manifest.permission.BIND_SCREENING_SERVICE; 1076d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu }}; 1086d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 1096d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu mFilter = new CallScreeningServiceFilter(mContext, mCallsManager, mPhoneAccountRegistrar, 1107c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu mDefaultDialerCache, mParcelableCallUtilsConverter, mLock); 1116d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 1127c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu when(mDefaultDialerCache.getDefaultDialerApplication(eq(UserHandle.USER_CURRENT))) 1137c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu .thenReturn(PKG_NAME); 114d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger when(mPackageManager.queryIntentServicesAsUser(nullable(Intent.class), anyInt(), anyInt())) 1156d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu .thenReturn(Collections.singletonList(mResolveInfo)); 1166d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu when(mParcelableCallUtilsConverter.toParcelableCall( 1176d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu eq(mCall), anyBoolean(), eq(mPhoneAccountRegistrar))).thenReturn(null); 118d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger when(mContext.bindServiceAsUser(nullable(Intent.class), nullable(ServiceConnection.class), 1196d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu anyInt(), eq(UserHandle.CURRENT))).thenReturn(true); 1206d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu } 1216d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 1226d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @SmallTest 1236d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu public void testNoDefaultDialer() { 1247c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu when(mDefaultDialerCache.getDefaultDialerApplication(eq(UserHandle.USER_CURRENT))) 1257c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu .thenReturn(null); 1266d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu mFilter.startFilterLookup(mCall, mCallback); 1276d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu verify(mCallback).onCallFilteringComplete(eq(mCall), eq(PASS_RESULT)); 1286d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu } 1296d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 1306d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @SmallTest 1316d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu public void testNoResolveEntries() { 132d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger when(mPackageManager.queryIntentServicesAsUser(nullable(Intent.class), anyInt(), anyInt())) 1336d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu .thenReturn(Collections.emptyList()); 1346d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu mFilter.startFilterLookup(mCall, mCallback); 1356d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu verify(mCallback).onCallFilteringComplete(eq(mCall), eq(PASS_RESULT)); 1366d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu } 1376d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 1386d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @SmallTest 1396d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu public void testBadResolveEntry() { 1406d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu mResolveInfo.serviceInfo = null; 1416d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu mFilter.startFilterLookup(mCall, mCallback); 1426d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu verify(mCallback).onCallFilteringComplete(eq(mCall), eq(PASS_RESULT)); 1436d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu } 1446d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 1456d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @SmallTest 1466d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu public void testPermissionlessFilterService() { 1476d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu mResolveInfo.serviceInfo.permission = null; 1486d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu mFilter.startFilterLookup(mCall, mCallback); 1496d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu verify(mCallback).onCallFilteringComplete(eq(mCall), eq(PASS_RESULT)); 1506d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu } 1516d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 1526d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @SmallTest 1536d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu public void testContextFailToBind() { 154d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger when(mContext.bindServiceAsUser(nullable(Intent.class), nullable(ServiceConnection.class), 1556d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu anyInt(), eq(UserHandle.CURRENT))).thenReturn(false); 1566d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu mFilter.startFilterLookup(mCall, mCallback); 1576d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu verify(mCallback).onCallFilteringComplete(eq(mCall), eq(PASS_RESULT)); 1586d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu } 1596d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 1606d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @SmallTest 1616d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu public void testExceptionInScreeningService() throws Exception { 1626d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu doThrow(new RemoteException()).when(mCallScreeningService).screenCall( 163d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger nullable(ICallScreeningAdapter.class), nullable(ParcelableCall.class)); 1646d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu mFilter.startFilterLookup(mCall, mCallback); 1656d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu ServiceConnection serviceConnection = verifyBindingIntent(); 1666d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu serviceConnection.onServiceConnected(COMPONENT_NAME, mBinder); 1676d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu verify(mCallback).onCallFilteringComplete(eq(mCall), eq(PASS_RESULT)); 1686d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu } 1696d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 1706d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @SmallTest 1716d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu public void testAllowCall() throws Exception { 1726d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu mFilter.startFilterLookup(mCall, mCallback); 1736d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu ServiceConnection serviceConnection = verifyBindingIntent(); 1746d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu serviceConnection.onServiceConnected(COMPONENT_NAME, mBinder); 1756d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu ICallScreeningAdapter csAdapter = getCallScreeningAdapter(); 1766d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu csAdapter.allowCall(CALL_ID); 1776d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu verify(mCallback).onCallFilteringComplete(eq(mCall), eq(PASS_RESULT)); 1786d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu } 1796d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 1806d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu @SmallTest 1816d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu public void testDisallowCall() throws Exception { 1826d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu mFilter.startFilterLookup(mCall, mCallback); 1836d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu ServiceConnection serviceConnection = verifyBindingIntent(); 1846d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu serviceConnection.onServiceConnected(COMPONENT_NAME, mBinder); 1856d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu ICallScreeningAdapter csAdapter = getCallScreeningAdapter(); 1866d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu csAdapter.disallowCall(CALL_ID, 1876d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu true, // shouldReject 1886d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu false, // shouldAddToCallLog 1896d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu true // shouldShowNotification 1906d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu ); 1916d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu verify(mCallback).onCallFilteringComplete(eq(mCall), eq(new CallFilteringResult( 1926d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu false, // shouldAllowCall 1936d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu true, // shouldReject 1946d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu false, // shouldAddToCallLog 1956d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu true // shouldShowNotification 1966d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu ))); 1976d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu } 1986d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 1996d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu private ServiceConnection verifyBindingIntent() { 2006d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); 2016d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu ArgumentCaptor<ServiceConnection> serviceCaptor = 2026d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu ArgumentCaptor.forClass(ServiceConnection.class); 2036d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu verify(mContext).bindServiceAsUser(intentCaptor.capture(), serviceCaptor.capture(), 2046d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu eq(Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE), 2056d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu eq(UserHandle.CURRENT)); 2066d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 2076d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu Intent capturedIntent = intentCaptor.getValue(); 2086d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu assertEquals(CallScreeningService.SERVICE_INTERFACE, capturedIntent.getAction()); 2096d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu assertEquals(PKG_NAME, capturedIntent.getPackage()); 2106d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu assertEquals(COMPONENT_NAME, capturedIntent.getComponent()); 2116d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 2126d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu return serviceCaptor.getValue(); 2136d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu } 2146d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu 2156d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu private ICallScreeningAdapter getCallScreeningAdapter() throws Exception { 2166d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu ArgumentCaptor<ICallScreeningAdapter> captor = 2176d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu ArgumentCaptor.forClass(ICallScreeningAdapter.class); 218d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger verify(mCallScreeningService).screenCall(captor.capture(), nullable(ParcelableCall.class)); 2196d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu return captor.getValue(); 2206d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu } 2216d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu} 222