1ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu/* 2ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * Copyright (C) 2015 The Android Open Source Project 3ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * 4ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * Licensed under the Apache License, Version 2.0 (the "License"); 5ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * you may not use this file except in compliance with the License. 6ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * You may obtain a copy of the License at 7ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * 8ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * http://www.apache.org/licenses/LICENSE-2.0 9ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * 10ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * Unless required by applicable law or agreed to in writing, software 11ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * distributed under the License is distributed on an "AS IS" BASIS, 12ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * See the License for the specific language governing permissions and 14ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * limitations under the License 15ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu */ 16ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 17ecda55454f4993003e71e09a63d20f94a216cc47Hall Liupackage com.android.server.telecom.tests; 18ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 19ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static android.Manifest.permission.CALL_PHONE; 20ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static android.Manifest.permission.MODIFY_PHONE_STATE; 21ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static android.Manifest.permission.READ_PHONE_STATE; 22ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE; 23ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 247c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liuimport android.app.ActivityManager; 25ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.app.AppOpsManager; 26ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.content.ComponentName; 27ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.content.Context; 28ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.content.Intent; 29ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.content.pm.ApplicationInfo; 30ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.content.pm.PackageManager; 31ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.net.Uri; 32ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.os.Binder; 33ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.os.Bundle; 34ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.os.RemoteException; 35ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.os.UserHandle; 36ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.os.UserManager; 37ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.telecom.PhoneAccount; 38ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.telecom.PhoneAccountHandle; 39ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.telecom.TelecomManager; 400a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liuimport android.telecom.VideoProfile; 410a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liuimport android.telephony.TelephonyManager; 4284b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liuimport android.test.suitebuilder.annotation.SmallTest; 43ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 44ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.internal.telecom.ITelecomService; 450a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liuimport com.android.server.telecom.Call; 46ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.server.telecom.CallIntentProcessor; 470a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liuimport com.android.server.telecom.CallState; 48ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.server.telecom.CallsManager; 497c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liuimport com.android.server.telecom.DefaultDialerCache; 50ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.server.telecom.PhoneAccountRegistrar; 51ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.server.telecom.TelecomServiceImpl; 52ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.server.telecom.TelecomSystem; 53ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.server.telecom.components.UserCallIntentProcessor; 54ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.server.telecom.components.UserCallIntentProcessorFactory; 55ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 56ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport org.mockito.ArgumentCaptor; 57ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport org.mockito.Mock; 588a30e647d639ae4a08ecf8dcf4100a29a5da3a3aPaul Duffinimport org.mockito.compat.ArgumentMatcher; 59609992b6d222e54a74cc7e6af06173090103a28aHall Liuimport org.mockito.internal.matchers.VarargMatcher; 60ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 61ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport java.util.ArrayList; 62ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport java.util.Collection; 63ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport java.util.List; 64ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 65ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static android.Manifest.permission.REGISTER_SIM_SUBSCRIPTION; 66ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static android.Manifest.permission.WRITE_SECURE_SETTINGS; 67d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebingerimport static org.mockito.ArgumentMatchers.nullable; 68ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Matchers.any; 69ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Matchers.anyBoolean; 70ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Matchers.anyInt; 71ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Matchers.anyString; 72ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Matchers.argThat; 73ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Matchers.eq; 740a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liuimport static org.mockito.Matchers.isNull; 75ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Mockito.doNothing; 76ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Mockito.doReturn; 77ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Mockito.doThrow; 780a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liuimport static org.mockito.Mockito.mock; 79ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Mockito.never; 80ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Mockito.spy; 81ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Mockito.verify; 82ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Mockito.when; 83ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 84ecda55454f4993003e71e09a63d20f94a216cc47Hall Liupublic class TelecomServiceImplTest extends TelecomTestCase { 85ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public static class CallIntentProcessAdapterFake implements CallIntentProcessor.Adapter { 86ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Override 87ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void processOutgoingCallIntent(Context context, CallsManager callsManager, 88ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Intent intent) { 89ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 90ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 91ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 92ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Override 93ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void processIncomingCallIntent(CallsManager callsManager, Intent intent) { 94ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 95ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 96ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 97ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Override 98ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void processUnknownCallIntent(CallsManager callsManager, Intent intent) { 99ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 100ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 101ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 102ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 1030a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public static class SubscriptionManagerAdapterFake 1040a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu implements TelecomServiceImpl.SubscriptionManagerAdapter { 1050a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu @Override 1060a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public int getDefaultVoiceSubId() { 1070a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu return 0; 1080a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 1090a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 1100a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 111ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static class AnyStringIn extends ArgumentMatcher<String> { 112ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private Collection<String> mStrings; 113ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public AnyStringIn(Collection<String> strings) { 114ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu this.mStrings = strings; 115ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 116ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 117ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Override 1188a30e647d639ae4a08ecf8dcf4100a29a5da3a3aPaul Duffin public boolean matchesObject(Object string) { 119ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return mStrings.contains(string); 120ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 121ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 122ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 123609992b6d222e54a74cc7e6af06173090103a28aHall Liu private static class IntVarArgMatcher extends ArgumentMatcher<int[]> implements VarargMatcher { 124609992b6d222e54a74cc7e6af06173090103a28aHall Liu @Override 1258a30e647d639ae4a08ecf8dcf4100a29a5da3a3aPaul Duffin public boolean matchesObject(Object argument) { 126609992b6d222e54a74cc7e6af06173090103a28aHall Liu return true; 127609992b6d222e54a74cc7e6af06173090103a28aHall Liu } 128609992b6d222e54a74cc7e6af06173090103a28aHall Liu } 129609992b6d222e54a74cc7e6af06173090103a28aHall Liu 130ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private ITelecomService.Stub mTSIBinder; 131ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private AppOpsManager mAppOpsManager; 132ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private UserManager mUserManager; 133ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 134ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Mock private CallsManager mFakeCallsManager; 135ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Mock private PhoneAccountRegistrar mFakePhoneAccountRegistrar; 136ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Mock private TelecomManager mTelecomManager; 137ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private CallIntentProcessor.Adapter mCallIntentProcessorAdapter = 138ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu spy(new CallIntentProcessAdapterFake()); 1397c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu @Mock private DefaultDialerCache mDefaultDialerCache; 1400a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu private TelecomServiceImpl.SubscriptionManagerAdapter mSubscriptionManagerAdapter = 1410a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu spy(new SubscriptionManagerAdapterFake()); 142ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Mock private UserCallIntentProcessor mUserCallIntentProcessor; 143ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 144ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private final TelecomSystem.SyncRoot mLock = new TelecomSystem.SyncRoot() { }; 145ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 146ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static final String DEFAULT_DIALER_PACKAGE = "com.google.android.dialer"; 147ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static final UserHandle USER_HANDLE_16 = new UserHandle(16); 148ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static final UserHandle USER_HANDLE_17 = new UserHandle(17); 149ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static final PhoneAccountHandle TEL_PA_HANDLE_16 = new PhoneAccountHandle( 150ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu new ComponentName("test", "telComponentName"), "0", USER_HANDLE_16); 151ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static final PhoneAccountHandle SIP_PA_HANDLE_17 = new PhoneAccountHandle( 152ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu new ComponentName("test", "sipComponentName"), "1", USER_HANDLE_17); 153ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static final PhoneAccountHandle TEL_PA_HANDLE_CURRENT = new PhoneAccountHandle( 154ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu new ComponentName("test", "telComponentName"), "2", Binder.getCallingUserHandle()); 155ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static final PhoneAccountHandle SIP_PA_HANDLE_CURRENT = new PhoneAccountHandle( 156ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu new ComponentName("test", "sipComponentName"), "3", Binder.getCallingUserHandle()); 157ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 158ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Override 159ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void setUp() throws Exception { 160ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu super.setUp(); 161ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mContext = mComponentContextFixture.getTestDouble().getApplicationContext(); 162ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mComponentContextFixture.putBooleanResource( 163ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu com.android.internal.R.bool.config_voice_capable, true); 164ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 165ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(mContext).when(mContext).getApplicationContext(); 166ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doNothing().when(mContext).sendBroadcastAsUser(any(Intent.class), any(UserHandle.class), 167ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu anyString()); 168ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu TelecomServiceImpl telecomServiceImpl = new TelecomServiceImpl( 169ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mContext, 170ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mFakeCallsManager, 171ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mFakePhoneAccountRegistrar, 172ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mCallIntentProcessorAdapter, 173ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu new UserCallIntentProcessorFactory() { 174ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Override 175ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public UserCallIntentProcessor create(Context context, UserHandle userHandle) { 176ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return mUserCallIntentProcessor; 177ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 178ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }, 1797c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu mDefaultDialerCache, 1800a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu mSubscriptionManagerAdapter, 181ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mLock); 182ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder = telecomServiceImpl.getBinder(); 183ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mComponentContextFixture.setTelecomManager(mTelecomManager); 184ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mTelecomManager.getDefaultDialerPackage()).thenReturn(DEFAULT_DIALER_PACKAGE); 185ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mTelecomManager.getSystemDialerPackage()).thenReturn(DEFAULT_DIALER_PACKAGE); 186ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 187ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mAppOpsManager = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE); 188ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); 189ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 1907c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu when(mDefaultDialerCache.getDefaultDialerApplication(anyInt())) 1917c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu .thenReturn(DEFAULT_DIALER_PACKAGE); 1927c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu when(mDefaultDialerCache.isDefaultOrSystemDialer(eq(DEFAULT_DIALER_PACKAGE), anyInt())) 1937c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu .thenReturn(true); 194ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 195ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 19684b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 197ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetDefaultOutgoingPhoneAccount() throws RemoteException { 198ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 199ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getOutgoingPhoneAccountForScheme(eq("tel"), any(UserHandle.class))) 200ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(TEL_PA_HANDLE_16); 201ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 202ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getOutgoingPhoneAccountForScheme(eq("sip"), any(UserHandle.class))) 203ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(SIP_PA_HANDLE_17); 204ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17); 205ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 206ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle returnedHandleTel 207ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu = mTSIBinder.getDefaultOutgoingPhoneAccount("tel", DEFAULT_DIALER_PACKAGE); 208ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(TEL_PA_HANDLE_16, returnedHandleTel); 209ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 210ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle returnedHandleSip 211ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu = mTSIBinder.getDefaultOutgoingPhoneAccount("sip", DEFAULT_DIALER_PACKAGE); 212ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(SIP_PA_HANDLE_17, returnedHandleSip); 213ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 214ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 21584b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 216ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetDefaultOutgoingPhoneAccountFailure() throws RemoteException { 217ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // make sure that the list of user profiles doesn't include anything the PhoneAccountHandles 218ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // are associated with 219ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 220ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 221ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getOutgoingPhoneAccountForScheme(eq("tel"), any(UserHandle.class))) 222ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(TEL_PA_HANDLE_16); 223ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar.getPhoneAccountUnchecked(TEL_PA_HANDLE_16)).thenReturn( 224ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makePhoneAccount(TEL_PA_HANDLE_16).build()); 225ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), anyString())) 226ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(AppOpsManager.MODE_IGNORED); 227ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()).when(mContext) 228ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .enforceCallingOrSelfPermission(eq(READ_PRIVILEGED_PHONE_STATE), anyString()); 229ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 230ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle returnedHandleTel 231ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu = mTSIBinder.getDefaultOutgoingPhoneAccount("tel", ""); 232ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertNull(returnedHandleTel); 233ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 234ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 23584b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 236ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetUserSelectedOutgoingPhoneAccount() throws RemoteException { 237ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar.getUserSelectedOutgoingPhoneAccount(any(UserHandle.class))) 238ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(TEL_PA_HANDLE_16); 239ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar.getPhoneAccountUnchecked(TEL_PA_HANDLE_16)).thenReturn( 240ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makeMultiUserPhoneAccount(TEL_PA_HANDLE_16).build()); 241ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 242ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle returnedHandle 243ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu = mTSIBinder.getUserSelectedOutgoingPhoneAccount(); 244ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(TEL_PA_HANDLE_16, returnedHandle); 245ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 246ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 24784b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 248ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testSetUserSelectedOutgoingPhoneAccount() throws RemoteException { 249ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.setUserSelectedOutgoingPhoneAccount(TEL_PA_HANDLE_16); 250ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mFakePhoneAccountRegistrar) 251ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .setUserSelectedOutgoingPhoneAccount(eq(TEL_PA_HANDLE_16), any(UserHandle.class)); 252ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 253ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 25484b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 255ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testSetUserSelectedOutgoingPhoneAccountFailure() throws RemoteException { 256ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission( 257d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger anyString(), nullable(String.class)); 258ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 259ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.setUserSelectedOutgoingPhoneAccount(TEL_PA_HANDLE_16); 260ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 261ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // desired result 262ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 263ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mFakePhoneAccountRegistrar, never()) 264ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .setUserSelectedOutgoingPhoneAccount( 265ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu any(PhoneAccountHandle.class), any(UserHandle.class)); 266ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 267ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 26884b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 269ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetCallCapablePhoneAccounts() throws RemoteException { 270ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<PhoneAccountHandle> fullPHList = new ArrayList<PhoneAccountHandle>() {{ 271ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(TEL_PA_HANDLE_16); 272ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(SIP_PA_HANDLE_17); 273ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }}; 274ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 275ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<PhoneAccountHandle> smallPHList = new ArrayList<PhoneAccountHandle>() {{ 276ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(SIP_PA_HANDLE_17); 277ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }}; 278ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // Returns all phone accounts when getCallCapablePhoneAccounts is called. 279ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 280d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger .getCallCapablePhoneAccounts(nullable(String.class), eq(true), 281d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger nullable(UserHandle.class))).thenReturn(fullPHList); 282ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // Returns only enabled phone accounts when getCallCapablePhoneAccounts is called. 283ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 284d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger .getCallCapablePhoneAccounts(nullable(String.class), eq(false), 285d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger nullable(UserHandle.class))).thenReturn(smallPHList); 286ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17); 287ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 288ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(fullPHList, 289ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.getCallCapablePhoneAccounts(true, DEFAULT_DIALER_PACKAGE)); 290ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(smallPHList, 291ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.getCallCapablePhoneAccounts(false, DEFAULT_DIALER_PACKAGE)); 292ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 293ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 29484b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 295ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetCallCapablePhoneAccountsFailure() throws RemoteException { 296ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<String> enforcedPermissions = new ArrayList<String>() {{ 297ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(READ_PHONE_STATE); 298ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(READ_PRIVILEGED_PHONE_STATE); 299ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }}; 300ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission( 301ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu argThat(new AnyStringIn(enforcedPermissions)), anyString()); 302ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 303ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<PhoneAccountHandle> result = null; 304ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 305ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu result = mTSIBinder.getCallCapablePhoneAccounts(true, ""); 306ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 307ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // intended behavior 308ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 309ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertNull(result); 310ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mFakePhoneAccountRegistrar, never()) 311ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getCallCapablePhoneAccounts(anyString(), anyBoolean(), any(UserHandle.class)); 312ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 313ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 31484b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 315ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetPhoneAccountsSupportingScheme() throws RemoteException { 316ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<PhoneAccountHandle> sipPHList = new ArrayList<PhoneAccountHandle>() {{ 317ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(SIP_PA_HANDLE_17); 318ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }}; 319ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 320ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<PhoneAccountHandle> telPHList = new ArrayList<PhoneAccountHandle>() {{ 321ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(TEL_PA_HANDLE_16); 322ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }}; 323ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 324ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getCallCapablePhoneAccounts(eq("tel"), anyBoolean(), any(UserHandle.class))) 325ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(telPHList); 326ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 327ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getCallCapablePhoneAccounts(eq("sip"), anyBoolean(), any(UserHandle.class))) 328ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(sipPHList); 329ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17); 330ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 331ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(telPHList, 332ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.getPhoneAccountsSupportingScheme("tel", DEFAULT_DIALER_PACKAGE)); 333ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(sipPHList, 334ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.getPhoneAccountsSupportingScheme("sip", DEFAULT_DIALER_PACKAGE)); 335ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 336ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 33784b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 338ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetPhoneAccountsForPackage() throws RemoteException { 339ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<PhoneAccountHandle> phoneAccountHandleList = new ArrayList<PhoneAccountHandle>() {{ 340ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(TEL_PA_HANDLE_16); 341ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(SIP_PA_HANDLE_17); 342ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }}; 343ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 344ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getPhoneAccountsForPackage(anyString(), any(UserHandle.class))) 345ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(phoneAccountHandleList); 346ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17); 347ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(phoneAccountHandleList, 348ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.getPhoneAccountsForPackage( 349ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu TEL_PA_HANDLE_16.getComponentName().getPackageName())); 350ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 351ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 35284b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 353ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetPhoneAccount() throws RemoteException { 354ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17); 355ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(TEL_PA_HANDLE_16, mTSIBinder.getPhoneAccount(TEL_PA_HANDLE_16) 356ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getAccountHandle()); 357ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(SIP_PA_HANDLE_17, mTSIBinder.getPhoneAccount(SIP_PA_HANDLE_17) 358ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getAccountHandle()); 359ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 360ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 36184b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 362ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetAllPhoneAccounts() throws RemoteException { 363ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<PhoneAccount> phoneAccountList = new ArrayList<PhoneAccount>() {{ 364ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(makePhoneAccount(TEL_PA_HANDLE_16).build()); 365ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(makePhoneAccount(SIP_PA_HANDLE_17).build()); 366ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }}; 367ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar.getAllPhoneAccounts(any(UserHandle.class))) 368ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(phoneAccountList); 369ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 370ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(2, mTSIBinder.getAllPhoneAccounts().size()); 371ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 372ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 37384b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 374ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testRegisterPhoneAccount() throws RemoteException { 375ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameToUse = "com.android.officialpackage"; 376ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle phHandle = new PhoneAccountHandle(new ComponentName( 377ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu packageNameToUse, "cs"), "test", Binder.getCallingUserHandle()); 378ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccount phoneAccount = makePhoneAccount(phHandle).build(); 379ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_GRANTED) 380ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE); 381ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 382ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu registerPhoneAccountTestHelper(phoneAccount, true); 383ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 384ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 38584b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 386ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testRegisterPhoneAccountWithoutModifyPermission() throws RemoteException { 387ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // tests the case where the package does not have MODIFY_PHONE_STATE but is 388ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // registering its own phone account as a third-party connection service 389ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameToUse = "com.thirdparty.connectionservice"; 390ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle phHandle = new PhoneAccountHandle(new ComponentName( 391ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu packageNameToUse, "cs"), "asdf", Binder.getCallingUserHandle()); 392ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccount phoneAccount = makePhoneAccount(phHandle).build(); 393ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 394ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_DENIED) 395ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE); 396ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PackageManager pm = mContext.getPackageManager(); 397ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(pm.hasSystemFeature(PackageManager.FEATURE_CONNECTION_SERVICE)).thenReturn(true); 398ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 399ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu registerPhoneAccountTestHelper(phoneAccount, true); 400ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 401ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 40284b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 403ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testRegisterPhoneAccountWithoutModifyPermissionFailure() throws RemoteException { 404ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // tests the case where the third party package should not be allowed to register a phone 405ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // account due to the lack of modify permission. 406ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameToUse = "com.thirdparty.connectionservice"; 407ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle phHandle = new PhoneAccountHandle(new ComponentName( 408ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu packageNameToUse, "cs"), "asdf", Binder.getCallingUserHandle()); 409ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccount phoneAccount = makePhoneAccount(phHandle).build(); 410ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 411ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_DENIED) 412ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE); 413ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PackageManager pm = mContext.getPackageManager(); 414ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(pm.hasSystemFeature(PackageManager.FEATURE_CONNECTION_SERVICE)).thenReturn(false); 415ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 416ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu registerPhoneAccountTestHelper(phoneAccount, false); 417ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 418ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 41984b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 420ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testRegisterPhoneAccountWithoutSimSubscriptionPermissionFailure() 421ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu throws RemoteException { 422ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameToUse = "com.thirdparty.connectionservice"; 423ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle phHandle = new PhoneAccountHandle(new ComponentName( 424ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu packageNameToUse, "cs"), "asdf", Binder.getCallingUserHandle()); 425ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccount phoneAccount = makePhoneAccount(phHandle) 426ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .setCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION).build(); 427ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 428ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_GRANTED) 429ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE); 430ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()) 431ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext) 432d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger .enforceCallingOrSelfPermission(eq(REGISTER_SIM_SUBSCRIPTION), 433d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger nullable(String.class)); 434ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 435ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu registerPhoneAccountTestHelper(phoneAccount, false); 436ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 437ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 43884b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 439ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testRegisterPhoneAccountWithoutMultiUserPermissionFailure() 440ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu throws Exception { 441ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameToUse = "com.thirdparty.connectionservice"; 442ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle phHandle = new PhoneAccountHandle(new ComponentName( 443ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu packageNameToUse, "cs"), "asdf", Binder.getCallingUserHandle()); 444ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccount phoneAccount = makeMultiUserPhoneAccount(phHandle).build(); 445ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 446ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_GRANTED) 447ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE); 448ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 449ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PackageManager packageManager = mContext.getPackageManager(); 450ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(packageManager.getApplicationInfo(packageNameToUse, PackageManager.GET_META_DATA)) 451ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(new ApplicationInfo()); 452ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 453ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu registerPhoneAccountTestHelper(phoneAccount, false); 454ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 455ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 456ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private void registerPhoneAccountTestHelper(PhoneAccount testPhoneAccount, 457ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu boolean shouldSucceed) throws RemoteException { 458ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); 459ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu boolean didExceptionOccur = false; 460ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 461ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.registerPhoneAccount(testPhoneAccount); 462ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (Exception e) { 463ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu didExceptionOccur = true; 464ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 465ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 466ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu if (shouldSucceed) { 467ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertFalse(didExceptionOccur); 468ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mFakePhoneAccountRegistrar).registerPhoneAccount(testPhoneAccount); 469ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } else { 470ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertTrue(didExceptionOccur); 471ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mFakePhoneAccountRegistrar, never()) 472ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .registerPhoneAccount(any(PhoneAccount.class)); 473ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 474ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 475ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 47684b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 477ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testUnregisterPhoneAccount() throws RemoteException { 478ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameToUse = "com.android.officialpackage"; 479ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle phHandle = new PhoneAccountHandle(new ComponentName( 480ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu packageNameToUse, "cs"), "test", Binder.getCallingUserHandle()); 481ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 482ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); 483ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_GRANTED) 484ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE); 485ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 486ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.unregisterPhoneAccount(phHandle); 487ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mFakePhoneAccountRegistrar).unregisterPhoneAccount(phHandle); 488ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 489ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 49084b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 491ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testUnregisterPhoneAccountFailure() throws RemoteException { 492ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameToUse = "com.thirdparty.connectionservice"; 493ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle phHandle = new PhoneAccountHandle(new ComponentName( 494ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu packageNameToUse, "cs"), "asdf", Binder.getCallingUserHandle()); 495ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 496ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_DENIED) 497ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE); 498ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PackageManager pm = mContext.getPackageManager(); 499ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(pm.hasSystemFeature(PackageManager.FEATURE_CONNECTION_SERVICE)).thenReturn(false); 500ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 501ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 502ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.unregisterPhoneAccount(phHandle); 503ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (UnsupportedOperationException e) { 504ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // expected behavior 505ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 506ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mFakePhoneAccountRegistrar, never()) 507ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .unregisterPhoneAccount(any(PhoneAccountHandle.class)); 508ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mContext, never()) 509ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .sendBroadcastAsUser(any(Intent.class), any(UserHandle.class), anyString()); 510ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 511ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 51284b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 513ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testAddNewIncomingCall() throws Exception { 514c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger PhoneAccount phoneAccount = makePhoneAccount(TEL_PA_HANDLE_CURRENT).build(); 515c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger phoneAccount.setIsEnabled(true); 516c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger doReturn(phoneAccount).when(mFakePhoneAccountRegistrar).getPhoneAccount( 517c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger eq(TEL_PA_HANDLE_CURRENT), any(UserHandle.class)); 518ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doNothing().when(mAppOpsManager).checkPackage(anyInt(), anyString()); 519ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle extras = createSampleExtras(); 520ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 521ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.addNewIncomingCall(TEL_PA_HANDLE_CURRENT, extras); 522ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 523ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu addCallTestHelper(TelecomManager.ACTION_INCOMING_CALL, 524ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu CallIntentProcessor.KEY_IS_INCOMING_CALL, extras, false); 525ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 526ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 52784b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 528ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testAddNewIncomingCallFailure() throws Exception { 529ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 530ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.addNewIncomingCall(TEL_PA_HANDLE_16, null); 531ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 532ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // expected 533ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 534ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 535ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()).when(mAppOpsManager).checkPackage(anyInt(), anyString()); 536ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 537ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 538ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.addNewIncomingCall(TEL_PA_HANDLE_CURRENT, null); 539ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 540ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // expected 541ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 542ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 543ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // Verify that neither of these attempts got through 544ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mCallIntentProcessorAdapter, never()) 545ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .processIncomingCallIntent(any(CallsManager.class), any(Intent.class)); 546ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 547ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 54884b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 549ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testAddNewUnknownCall() throws Exception { 550c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger PhoneAccount phoneAccount = makePhoneAccount(TEL_PA_HANDLE_CURRENT).build(); 551c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger phoneAccount.setIsEnabled(true); 552c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger doReturn(phoneAccount).when(mFakePhoneAccountRegistrar).getPhoneAccount( 553c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger eq(TEL_PA_HANDLE_CURRENT), any(UserHandle.class)); 554ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doNothing().when(mAppOpsManager).checkPackage(anyInt(), anyString()); 555ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle extras = createSampleExtras(); 556ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 557ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.addNewUnknownCall(TEL_PA_HANDLE_CURRENT, extras); 558ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 559ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu addCallTestHelper(TelecomManager.ACTION_NEW_UNKNOWN_CALL, 560ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu CallIntentProcessor.KEY_IS_UNKNOWN_CALL, extras, true); 561ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 562ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 56384b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 564ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testAddNewUnknownCallFailure() throws Exception { 565ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 566ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.addNewUnknownCall(TEL_PA_HANDLE_16, null); 567ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 568ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // expected 569ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 570ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 571ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()).when(mAppOpsManager).checkPackage(anyInt(), anyString()); 572ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 573ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 574ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.addNewUnknownCall(TEL_PA_HANDLE_CURRENT, null); 575ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 576ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // expected 577ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 578ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 579ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // Verify that neither of these attempts got through 580ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mCallIntentProcessorAdapter, never()) 581ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .processIncomingCallIntent(any(CallsManager.class), any(Intent.class)); 582ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 583ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 584ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private void addCallTestHelper(String expectedAction, String extraCallKey, 585ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle expectedExtras, boolean isUnknown) { 586ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); 587ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu if (isUnknown) { 588ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mCallIntentProcessorAdapter).processUnknownCallIntent(any(CallsManager.class), 589ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu intentCaptor.capture()); 590ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } else { 591ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mCallIntentProcessorAdapter).processIncomingCallIntent(any(CallsManager.class), 592ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu intentCaptor.capture()); 593ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 594ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Intent capturedIntent = intentCaptor.getValue(); 595ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(expectedAction, capturedIntent.getAction()); 596ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle intentExtras = capturedIntent.getExtras(); 597ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(TEL_PA_HANDLE_CURRENT, 598ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu intentExtras.get(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE)); 599ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertTrue(intentExtras.getBoolean(extraCallKey)); 600ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 601ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu if (isUnknown) { 602ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu for (String expectedKey : expectedExtras.keySet()) { 603ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertTrue(intentExtras.containsKey(expectedKey)); 604ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(expectedExtras.get(expectedKey), intentExtras.get(expectedKey)); 605ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 606ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 607ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu else { 608ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertTrue(areBundlesEqual(expectedExtras, 609ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu (Bundle) intentExtras.get(TelecomManager.EXTRA_INCOMING_CALL_EXTRAS))); 610ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 611ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 612ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 61384b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 614ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testPlaceCallWithNonEmergencyPermission() throws Exception { 615ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Uri handle = Uri.parse("tel:6505551234"); 616ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle extras = createSampleExtras(); 617ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 618ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_CALL_PHONE), anyInt(), anyString())) 619ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(AppOpsManager.MODE_ALLOWED); 620ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_GRANTED) 621ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingPermission(CALL_PHONE); 622ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 623ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.placeCall(handle, extras, DEFAULT_DIALER_PACKAGE); 624ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu placeCallTestHelper(handle, extras, true); 625ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 626ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 62784b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 628ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testPlaceCallWithAppOpsOff() throws Exception { 629ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Uri handle = Uri.parse("tel:6505551234"); 630ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle extras = createSampleExtras(); 631ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 632ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_CALL_PHONE), anyInt(), anyString())) 633ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(AppOpsManager.MODE_IGNORED); 634ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_GRANTED) 635ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingPermission(CALL_PHONE); 636ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 637ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.placeCall(handle, extras, DEFAULT_DIALER_PACKAGE); 638ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu placeCallTestHelper(handle, extras, false); 639ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 640ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 64184b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 642ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testPlaceCallWithNoCallingPermission() throws Exception { 643ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Uri handle = Uri.parse("tel:6505551234"); 644ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle extras = createSampleExtras(); 645ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 646ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_CALL_PHONE), anyInt(), anyString())) 647ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(AppOpsManager.MODE_ALLOWED); 648ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_DENIED) 649ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingPermission(CALL_PHONE); 650ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 651ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.placeCall(handle, extras, DEFAULT_DIALER_PACKAGE); 652ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu placeCallTestHelper(handle, extras, false); 653ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 654ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 655ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private void placeCallTestHelper(Uri expectedHandle, Bundle expectedExtras, 656ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu boolean shouldNonEmergencyBeAllowed) { 657ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); 658ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mUserCallIntentProcessor).processIntent(intentCaptor.capture(), anyString(), 659ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu eq(shouldNonEmergencyBeAllowed)); 660ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Intent capturedIntent = intentCaptor.getValue(); 661ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(Intent.ACTION_CALL, capturedIntent.getAction()); 662ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(expectedHandle, capturedIntent.getData()); 663ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertTrue(areBundlesEqual(expectedExtras, capturedIntent.getExtras())); 664ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 665ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 66684b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 667ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testPlaceCallFailure() throws Exception { 668ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Uri handle = Uri.parse("tel:6505551234"); 669ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle extras = createSampleExtras(); 670ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 671ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()) 672ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).enforceCallingOrSelfPermission(eq(CALL_PHONE), anyString()); 673ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 674ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 675ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.placeCall(handle, extras, "arbitrary_package_name"); 676ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 677ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // expected 678ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 679ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 680ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mUserCallIntentProcessor, never()) 681ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .processIntent(any(Intent.class), anyString(), anyBoolean()); 682ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 683ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 68484b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 685ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testSetDefaultDialer() throws Exception { 686ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageName = "sample.package"; 6877c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu int currentUser = ActivityManager.getCurrentUser(); 688ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 6897c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu when(mDefaultDialerCache.setDefaultDialer(eq(packageName), eq(currentUser))) 6907c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu .thenReturn(true); 691ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 692ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.setDefaultDialer(packageName); 693ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 6947c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu verify(mDefaultDialerCache).setDefaultDialer(eq(packageName), eq(currentUser)); 695ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); 696ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mContext).sendBroadcastAsUser(intentCaptor.capture(), any(UserHandle.class)); 697ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Intent capturedIntent = intentCaptor.getValue(); 698ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(TelecomManager.ACTION_DEFAULT_DIALER_CHANGED, capturedIntent.getAction()); 699ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameExtra = capturedIntent.getStringExtra( 700ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME); 701ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(packageName, packageNameExtra); 702ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 703ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 70484b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 705ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testSetDefaultDialerNoModifyPhoneStatePermission() throws Exception { 706ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission( 707d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger eq(MODIFY_PHONE_STATE), nullable(String.class)); 708ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu setDefaultDialerFailureTestHelper(); 709ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 710ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 71184b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 7120a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testSetDefaultDialerNoWriteSecureSettingsPermission() throws Exception { 713ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission( 714d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger eq(WRITE_SECURE_SETTINGS), nullable(String.class)); 715ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu setDefaultDialerFailureTestHelper(); 716ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 717ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 718ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private void setDefaultDialerFailureTestHelper() throws Exception { 719ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu boolean exceptionThrown = false; 720ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 721ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.setDefaultDialer(DEFAULT_DIALER_PACKAGE); 722ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 723ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu exceptionThrown = true; 724ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 725ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertTrue(exceptionThrown); 7267c9283261ad4fdbc5ebbb74257671388f9c758c7Hall Liu verify(mDefaultDialerCache, never()).setDefaultDialer(anyString(), anyInt()); 727ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mContext, never()).sendBroadcastAsUser(any(Intent.class), any(UserHandle.class)); 728ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 729ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 73084b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 7310a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testIsVoicemailNumber() throws Exception { 7320a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu String vmNumber = "010"; 7330a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_CURRENT); 7340a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 7350a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu doReturn(true).when(mFakePhoneAccountRegistrar).isVoiceMailNumber(TEL_PA_HANDLE_CURRENT, 7360a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu vmNumber); 7370a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertTrue(mTSIBinder.isVoiceMailNumber(TEL_PA_HANDLE_CURRENT, 7380a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu vmNumber, DEFAULT_DIALER_PACKAGE)); 7390a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 7400a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 74184b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 7420a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testIsVoicemailNumberAccountNotVisibleFailure() throws Exception { 7430a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu String vmNumber = "010"; 7440a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 7450a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu doReturn(true).when(mFakePhoneAccountRegistrar).isVoiceMailNumber(TEL_PA_HANDLE_CURRENT, 7460a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu vmNumber); 7470a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 7480a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakePhoneAccountRegistrar.getPhoneAccount(TEL_PA_HANDLE_CURRENT, 7490a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu Binder.getCallingUserHandle())).thenReturn(null); 7500a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertFalse(mTSIBinder 7510a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .isVoiceMailNumber(TEL_PA_HANDLE_CURRENT, vmNumber, DEFAULT_DIALER_PACKAGE)); 7520a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 7530a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 75484b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 7550a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testGetVoicemailNumberWithNullAccountHandle() throws Exception { 7560a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakePhoneAccountRegistrar.getPhoneAccount(isNull(PhoneAccountHandle.class), 7570a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu eq(Binder.getCallingUserHandle()))) 7580a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .thenReturn(makePhoneAccount(TEL_PA_HANDLE_CURRENT).build()); 7590a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu int subId = 58374; 7600a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu String vmNumber = "543"; 7610a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu doReturn(subId).when(mSubscriptionManagerAdapter).getDefaultVoiceSubId(); 7620a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 7630a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu TelephonyManager mockTelephonyManager = 7640a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); 7650a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mockTelephonyManager.getVoiceMailNumber(subId)).thenReturn(vmNumber); 7660a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 7670a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertEquals(vmNumber, mTSIBinder.getVoiceMailNumber(null, DEFAULT_DIALER_PACKAGE)); 7680a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 7690a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 77084b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 7710a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testGetVoicemailNumberWithNonNullAccountHandle() throws Exception { 7720a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakePhoneAccountRegistrar.getPhoneAccount(eq(TEL_PA_HANDLE_CURRENT), 7730a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu eq(Binder.getCallingUserHandle()))) 7740a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .thenReturn(makePhoneAccount(TEL_PA_HANDLE_CURRENT).build()); 7750a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu int subId = 58374; 7760a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu String vmNumber = "543"; 7770a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 7780a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu TelephonyManager mockTelephonyManager = 7790a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); 7800a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mockTelephonyManager.getVoiceMailNumber(subId)).thenReturn(vmNumber); 7810a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakePhoneAccountRegistrar.getSubscriptionIdForPhoneAccount(TEL_PA_HANDLE_CURRENT)) 7820a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .thenReturn(subId); 7830a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 7840a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertEquals(vmNumber, 7850a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu mTSIBinder.getVoiceMailNumber(TEL_PA_HANDLE_CURRENT, DEFAULT_DIALER_PACKAGE)); 7860a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 7870a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 78884b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 7890a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testGetLine1Number() throws Exception { 7900a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu int subId = 58374; 7910a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu String line1Number = "9482752023479"; 7920a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_CURRENT); 7930a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakePhoneAccountRegistrar.getSubscriptionIdForPhoneAccount(TEL_PA_HANDLE_CURRENT)) 7940a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .thenReturn(subId); 7950a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu TelephonyManager mockTelephonyManager = 7960a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); 797ce68874475498dcb69a543559177d69ac6dae215Shishir Agrawal when(mockTelephonyManager.getLine1Number(subId)).thenReturn(line1Number); 7980a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 7990a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertEquals(line1Number, 8000a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu mTSIBinder.getLine1Number(TEL_PA_HANDLE_CURRENT, DEFAULT_DIALER_PACKAGE)); 8010a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 8020a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 80384b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 8040a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testEndCallWithRingingForegroundCall() throws Exception { 8050a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu Call call = mock(Call.class); 8060a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(call.getState()).thenReturn(CallState.RINGING); 8070a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakeCallsManager.getForegroundCall()).thenReturn(call); 8080a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertTrue(mTSIBinder.endCall()); 8090a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu verify(call).reject(false, null); 8100a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 8110a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 81284b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 8130a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testEndCallWithNonRingingForegroundCall() throws Exception { 8140a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu Call call = mock(Call.class); 8150a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(call.getState()).thenReturn(CallState.ACTIVE); 8160a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakeCallsManager.getForegroundCall()).thenReturn(call); 8170a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertTrue(mTSIBinder.endCall()); 8180a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu verify(call).disconnect(); 8190a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 8200a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 82184b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 8220a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testEndCallWithNoForegroundCall() throws Exception { 8230a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu Call call = mock(Call.class); 8240a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(call.getState()).thenReturn(CallState.ACTIVE); 825609992b6d222e54a74cc7e6af06173090103a28aHall Liu when(mFakeCallsManager.getFirstCallWithState(argThat(new IntVarArgMatcher()))) 8260a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .thenReturn(call); 8270a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertTrue(mTSIBinder.endCall()); 8280a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu verify(call).disconnect(); 8290a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 8300a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 83184b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 8320a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testEndCallWithNoCalls() throws Exception { 8330a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertFalse(mTSIBinder.endCall()); 8340a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 8350a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 83684b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 8370a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testAcceptRingingCall() throws Exception { 8380a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu Call call = mock(Call.class); 839d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger when(mFakeCallsManager.getFirstCallWithState(anyInt())).thenReturn(call); 8400a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu // Not intended to be a real video state. Here to ensure that the call will be answered 8410a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu // with whatever video state it's currently in. 8420a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu int fakeVideoState = 29578215; 8430a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(call.getVideoState()).thenReturn(fakeVideoState); 844ccba720d2496060078a6551ffd1609c2dc7ce95cEugene Susla mTSIBinder.acceptRingingCall(""); 845d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger verify(call).answer(eq(fakeVideoState)); 8460a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 8470a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 84884b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 8490a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testAcceptRingingCallWithValidVideoState() throws Exception { 8500a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu Call call = mock(Call.class); 851d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger when(mFakeCallsManager.getFirstCallWithState(anyInt())).thenReturn(call); 8520a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu // Not intended to be a real video state. Here to ensure that the call will be answered 8530a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu // with the video state passed in to acceptRingingCallWithVideoState 8540a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu int fakeVideoState = 29578215; 8550a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu int realVideoState = VideoProfile.STATE_RX_ENABLED | VideoProfile.STATE_TX_ENABLED; 8560a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(call.getVideoState()).thenReturn(fakeVideoState); 857ccba720d2496060078a6551ffd1609c2dc7ce95cEugene Susla mTSIBinder.acceptRingingCallWithVideoState("", realVideoState); 8580a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu verify(call).answer(realVideoState); 8590a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 8600a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 8614a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn @SmallTest 8624a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn public void testIsInCall() throws Exception { 8634a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn when(mFakeCallsManager.hasOngoingCalls()).thenReturn(true); 8644a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn assertTrue(mTSIBinder.isInCall(DEFAULT_DIALER_PACKAGE)); 8654a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn } 8664a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn 8674a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn @SmallTest 8684a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn public void testNotIsInCall() throws Exception { 8694a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn when(mFakeCallsManager.hasOngoingCalls()).thenReturn(false); 8704a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn assertFalse(mTSIBinder.isInCall(DEFAULT_DIALER_PACKAGE)); 8714a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn } 8724a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn 8734a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn @SmallTest 8744a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn public void testIsInCallFail() throws Exception { 8754a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission( 8764a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn anyString(), any()); 8774a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn try { 8784a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn mTSIBinder.isInCall("blah"); 8794a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn fail(); 8804a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn } catch (SecurityException e) { 8814a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn // desired result 8824a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn } 8834a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn verify(mFakeCallsManager, never()).hasOngoingCalls(); 8844a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn } 8854a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn 8864a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn @SmallTest 8874a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn public void testIsInManagedCall() throws Exception { 8884a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn when(mFakeCallsManager.hasOngoingManagedCalls()).thenReturn(true); 8894a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn assertTrue(mTSIBinder.isInManagedCall(DEFAULT_DIALER_PACKAGE)); 8904a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn } 8914a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn 8924a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn @SmallTest 8934a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn public void testNotIsInManagedCall() throws Exception { 8944a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn when(mFakeCallsManager.hasOngoingManagedCalls()).thenReturn(false); 8954a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn assertFalse(mTSIBinder.isInManagedCall(DEFAULT_DIALER_PACKAGE)); 8964a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn } 8974a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn 8984a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn @SmallTest 8994a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn public void testIsInManagedCallFail() throws Exception { 9004a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission( 9014a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn anyString(), any()); 9024a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn try { 9034a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn mTSIBinder.isInManagedCall("blah"); 9044a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn fail(); 9054a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn } catch (SecurityException e) { 9064a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn // desired result 9074a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn } 9084a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn verify(mFakeCallsManager, never()).hasOngoingCalls(); 9094a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn } 9104a05d5cc0acedb616ff6d22151f4ccf0043f0810Tyler Gunn 911ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu /** 912ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * Register phone accounts for the supplied PhoneAccountHandles to make them 913ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * visible to all users (via the isVisibleToCaller method in TelecomServiceImpl. 914ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * @param handles the handles for which phone accounts should be created for. 915ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu */ 916ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private void makeAccountsVisibleToAllUsers(PhoneAccountHandle... handles) { 917ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu for (PhoneAccountHandle ph : handles) { 918ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar.getPhoneAccountUnchecked(eq(ph))).thenReturn( 919ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makeMultiUserPhoneAccount(ph).build()); 920ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 921d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger .getPhoneAccount(eq(ph), nullable(UserHandle.class), anyBoolean())) 922ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(makeMultiUserPhoneAccount(ph).build()); 9230a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakePhoneAccountRegistrar 924d0fe76e8e74ac515cacc492fa2c783cf2247ac05Brad Ebinger .getPhoneAccount(eq(ph), nullable(UserHandle.class))) 9250a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .thenReturn(makeMultiUserPhoneAccount(ph).build()); 926ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 927ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 928ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 929ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private PhoneAccount.Builder makeMultiUserPhoneAccount(PhoneAccountHandle paHandle) { 930ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccount.Builder paBuilder = makePhoneAccount(paHandle); 931ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu paBuilder.setCapabilities(PhoneAccount.CAPABILITY_MULTI_USER); 932ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return paBuilder; 933ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 934ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 935ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private PhoneAccount.Builder makePhoneAccount(PhoneAccountHandle paHandle) { 936ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return new PhoneAccount.Builder(paHandle, "testLabel"); 937ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 938ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 939ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private Bundle createSampleExtras() { 940ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle extras = new Bundle(); 941ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu extras.putString("test_key", "test_value"); 942ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return extras; 943ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 944ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 945ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static boolean areBundlesEqual(Bundle b1, Bundle b2) { 946ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu for (String key1 : b1.keySet()) { 947ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu if (!b1.get(key1).equals(b2.get(key1))) { 948ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return false; 949ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 950ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 951ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 952ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu for (String key2 : b2.keySet()) { 953ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu if (!b2.get(key2).equals(b1.get(key2))) { 954ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return false; 955ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 956ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 957ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return true; 958ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 959ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu} 960