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 24ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.app.AppOpsManager; 25ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.content.ComponentName; 26ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.content.Context; 27ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.content.Intent; 28ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.content.pm.ApplicationInfo; 29ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.content.pm.PackageManager; 30ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.net.Uri; 31ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.os.Binder; 32ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.os.Bundle; 33ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.os.RemoteException; 34ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.os.UserHandle; 35ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.os.UserManager; 36ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.telecom.PhoneAccount; 37ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.telecom.PhoneAccountHandle; 38ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport android.telecom.TelecomManager; 390a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liuimport android.telecom.VideoProfile; 400a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liuimport android.telephony.TelephonyManager; 4184b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liuimport android.test.suitebuilder.annotation.SmallTest; 42ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 43ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.internal.telecom.ITelecomService; 440a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liuimport com.android.server.telecom.Call; 45ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.server.telecom.CallIntentProcessor; 460a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liuimport com.android.server.telecom.CallState; 47ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.server.telecom.CallsManager; 48ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.server.telecom.PhoneAccountRegistrar; 49ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.server.telecom.TelecomServiceImpl; 50ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.server.telecom.TelecomSystem; 51ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.server.telecom.components.UserCallIntentProcessor; 52ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport com.android.server.telecom.components.UserCallIntentProcessorFactory; 53ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 54ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport org.mockito.ArgumentCaptor; 55ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport org.mockito.ArgumentMatcher; 56609992b6d222e54a74cc7e6af06173090103a28aHall Liuimport org.mockito.Matchers; 57ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport org.mockito.Mock; 58609992b6d222e54a74cc7e6af06173090103a28aHall Liuimport org.mockito.internal.matchers.VarargMatcher; 59ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 60ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport java.util.ArrayList; 61ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport java.util.Collection; 62ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport java.util.List; 63ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 64ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static android.Manifest.permission.REGISTER_SIM_SUBSCRIPTION; 65ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static android.Manifest.permission.WRITE_SECURE_SETTINGS; 66ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Matchers.any; 67ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Matchers.anyBoolean; 68ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Matchers.anyInt; 69ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Matchers.anyString; 70ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Matchers.argThat; 71ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Matchers.eq; 720a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liuimport static org.mockito.Matchers.isNull; 73ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Mockito.doNothing; 74ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Mockito.doReturn; 75ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Mockito.doThrow; 760a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liuimport static org.mockito.Mockito.mock; 77ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Mockito.never; 78ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Mockito.spy; 79ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Mockito.verify; 80ecda55454f4993003e71e09a63d20f94a216cc47Hall Liuimport static org.mockito.Mockito.when; 81ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 82ecda55454f4993003e71e09a63d20f94a216cc47Hall Liupublic class TelecomServiceImplTest extends TelecomTestCase { 83ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public static class CallIntentProcessAdapterFake implements CallIntentProcessor.Adapter { 84ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Override 85ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void processOutgoingCallIntent(Context context, CallsManager callsManager, 86ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Intent intent) { 87ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 88ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 89ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 90ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Override 91ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void processIncomingCallIntent(CallsManager callsManager, Intent intent) { 92ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 93ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 94ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 95ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Override 96ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void processUnknownCallIntent(CallsManager callsManager, Intent intent) { 97ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 98ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 99ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 100ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 101ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public static class DefaultDialerManagerAdapterFake 102ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu implements TelecomServiceImpl.DefaultDialerManagerAdapter { 103ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Override 104ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public String getDefaultDialerApplication(Context context) { 105ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return null; 106ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 107ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 108ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Override 109501b9b3775232bb3033afd9f1fd608dd07d0b91eSantos Cordon public String getDefaultDialerApplication(Context context, int userId) { 110501b9b3775232bb3033afd9f1fd608dd07d0b91eSantos Cordon return null; 111501b9b3775232bb3033afd9f1fd608dd07d0b91eSantos Cordon } 112501b9b3775232bb3033afd9f1fd608dd07d0b91eSantos Cordon 113501b9b3775232bb3033afd9f1fd608dd07d0b91eSantos Cordon @Override 114ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public boolean setDefaultDialerApplication(Context context, String packageName) { 115ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return false; 116ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 117ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 118ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Override 119ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public boolean isDefaultOrSystemDialer(Context context, String packageName) { 120ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return false; 121ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 122ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 123ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 1240a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public static class SubscriptionManagerAdapterFake 1250a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu implements TelecomServiceImpl.SubscriptionManagerAdapter { 1260a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu @Override 1270a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public int getDefaultVoiceSubId() { 1280a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu return 0; 1290a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 1300a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 1310a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 132ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static class AnyStringIn extends ArgumentMatcher<String> { 133ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private Collection<String> mStrings; 134ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public AnyStringIn(Collection<String> strings) { 135ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu this.mStrings = strings; 136ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 137ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 138ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Override 139ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public boolean matches(Object string) { 140ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return mStrings.contains(string); 141ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 142ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 143ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 144609992b6d222e54a74cc7e6af06173090103a28aHall Liu private static class IntVarArgMatcher extends ArgumentMatcher<int[]> implements VarargMatcher { 145609992b6d222e54a74cc7e6af06173090103a28aHall Liu @Override 146609992b6d222e54a74cc7e6af06173090103a28aHall Liu public boolean matches(Object argument) { 147609992b6d222e54a74cc7e6af06173090103a28aHall Liu return true; 148609992b6d222e54a74cc7e6af06173090103a28aHall Liu } 149609992b6d222e54a74cc7e6af06173090103a28aHall Liu } 150609992b6d222e54a74cc7e6af06173090103a28aHall Liu 151ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private ITelecomService.Stub mTSIBinder; 152ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private AppOpsManager mAppOpsManager; 153ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private UserManager mUserManager; 154ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 155ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Mock private CallsManager mFakeCallsManager; 156ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Mock private PhoneAccountRegistrar mFakePhoneAccountRegistrar; 157ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Mock private TelecomManager mTelecomManager; 158ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private CallIntentProcessor.Adapter mCallIntentProcessorAdapter = 159ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu spy(new CallIntentProcessAdapterFake()); 160ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private TelecomServiceImpl.DefaultDialerManagerAdapter mDefaultDialerManagerAdapter = 161ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu spy(new DefaultDialerManagerAdapterFake()); 1620a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu private TelecomServiceImpl.SubscriptionManagerAdapter mSubscriptionManagerAdapter = 1630a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu spy(new SubscriptionManagerAdapterFake()); 164ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Mock private UserCallIntentProcessor mUserCallIntentProcessor; 165ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 166ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private final TelecomSystem.SyncRoot mLock = new TelecomSystem.SyncRoot() { }; 167ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 168ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static final String DEFAULT_DIALER_PACKAGE = "com.google.android.dialer"; 169ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static final UserHandle USER_HANDLE_16 = new UserHandle(16); 170ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static final UserHandle USER_HANDLE_17 = new UserHandle(17); 171ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static final PhoneAccountHandle TEL_PA_HANDLE_16 = new PhoneAccountHandle( 172ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu new ComponentName("test", "telComponentName"), "0", USER_HANDLE_16); 173ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static final PhoneAccountHandle SIP_PA_HANDLE_17 = new PhoneAccountHandle( 174ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu new ComponentName("test", "sipComponentName"), "1", USER_HANDLE_17); 175ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static final PhoneAccountHandle TEL_PA_HANDLE_CURRENT = new PhoneAccountHandle( 176ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu new ComponentName("test", "telComponentName"), "2", Binder.getCallingUserHandle()); 177ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static final PhoneAccountHandle SIP_PA_HANDLE_CURRENT = new PhoneAccountHandle( 178ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu new ComponentName("test", "sipComponentName"), "3", Binder.getCallingUserHandle()); 179ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 180ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Override 181ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void setUp() throws Exception { 182ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu super.setUp(); 183ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mContext = mComponentContextFixture.getTestDouble().getApplicationContext(); 184ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mComponentContextFixture.putBooleanResource( 185ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu com.android.internal.R.bool.config_voice_capable, true); 186ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 187ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(mContext).when(mContext).getApplicationContext(); 188ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doNothing().when(mContext).sendBroadcastAsUser(any(Intent.class), any(UserHandle.class), 189ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu anyString()); 190ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu TelecomServiceImpl telecomServiceImpl = new TelecomServiceImpl( 191ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mContext, 192ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mFakeCallsManager, 193ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mFakePhoneAccountRegistrar, 194ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mCallIntentProcessorAdapter, 195ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu new UserCallIntentProcessorFactory() { 196ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu @Override 197ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public UserCallIntentProcessor create(Context context, UserHandle userHandle) { 198ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return mUserCallIntentProcessor; 199ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 200ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }, 201ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mDefaultDialerManagerAdapter, 2020a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu mSubscriptionManagerAdapter, 203ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mLock); 204ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder = telecomServiceImpl.getBinder(); 205ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mComponentContextFixture.setTelecomManager(mTelecomManager); 206ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mTelecomManager.getDefaultDialerPackage()).thenReturn(DEFAULT_DIALER_PACKAGE); 207ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mTelecomManager.getSystemDialerPackage()).thenReturn(DEFAULT_DIALER_PACKAGE); 208ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 209ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mAppOpsManager = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE); 210ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); 211ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 212ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(DEFAULT_DIALER_PACKAGE) 213ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mDefaultDialerManagerAdapter) 214ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getDefaultDialerApplication(any(Context.class)); 215ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 216ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(true) 217ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mDefaultDialerManagerAdapter) 218ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .isDefaultOrSystemDialer(any(Context.class), eq(DEFAULT_DIALER_PACKAGE)); 219ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 220ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 22184b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 222ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetDefaultOutgoingPhoneAccount() throws RemoteException { 223ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 224ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getOutgoingPhoneAccountForScheme(eq("tel"), any(UserHandle.class))) 225ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(TEL_PA_HANDLE_16); 226ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 227ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getOutgoingPhoneAccountForScheme(eq("sip"), any(UserHandle.class))) 228ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(SIP_PA_HANDLE_17); 229ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17); 230ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 231ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle returnedHandleTel 232ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu = mTSIBinder.getDefaultOutgoingPhoneAccount("tel", DEFAULT_DIALER_PACKAGE); 233ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(TEL_PA_HANDLE_16, returnedHandleTel); 234ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 235ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle returnedHandleSip 236ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu = mTSIBinder.getDefaultOutgoingPhoneAccount("sip", DEFAULT_DIALER_PACKAGE); 237ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(SIP_PA_HANDLE_17, returnedHandleSip); 238ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 239ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 24084b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 241ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetDefaultOutgoingPhoneAccountFailure() throws RemoteException { 242ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // make sure that the list of user profiles doesn't include anything the PhoneAccountHandles 243ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // are associated with 244ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 245ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 246ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getOutgoingPhoneAccountForScheme(eq("tel"), any(UserHandle.class))) 247ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(TEL_PA_HANDLE_16); 248ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar.getPhoneAccountUnchecked(TEL_PA_HANDLE_16)).thenReturn( 249ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makePhoneAccount(TEL_PA_HANDLE_16).build()); 250ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_READ_PHONE_STATE), anyInt(), anyString())) 251ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(AppOpsManager.MODE_IGNORED); 252ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()).when(mContext) 253ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .enforceCallingOrSelfPermission(eq(READ_PRIVILEGED_PHONE_STATE), anyString()); 254ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 255ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle returnedHandleTel 256ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu = mTSIBinder.getDefaultOutgoingPhoneAccount("tel", ""); 257ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertNull(returnedHandleTel); 258ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 259ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 26084b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 261ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetUserSelectedOutgoingPhoneAccount() throws RemoteException { 262ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar.getUserSelectedOutgoingPhoneAccount(any(UserHandle.class))) 263ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(TEL_PA_HANDLE_16); 264ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar.getPhoneAccountUnchecked(TEL_PA_HANDLE_16)).thenReturn( 265ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makeMultiUserPhoneAccount(TEL_PA_HANDLE_16).build()); 266ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 267ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle returnedHandle 268ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu = mTSIBinder.getUserSelectedOutgoingPhoneAccount(); 269ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(TEL_PA_HANDLE_16, returnedHandle); 270ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 271ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 27284b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 273ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testSetUserSelectedOutgoingPhoneAccount() throws RemoteException { 274ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.setUserSelectedOutgoingPhoneAccount(TEL_PA_HANDLE_16); 275ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mFakePhoneAccountRegistrar) 276ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .setUserSelectedOutgoingPhoneAccount(eq(TEL_PA_HANDLE_16), any(UserHandle.class)); 277ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 278ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 27984b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 280ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testSetUserSelectedOutgoingPhoneAccountFailure() throws RemoteException { 281ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission( 282ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu anyString(), anyString()); 283ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 284ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.setUserSelectedOutgoingPhoneAccount(TEL_PA_HANDLE_16); 285ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 286ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // desired result 287ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 288ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mFakePhoneAccountRegistrar, never()) 289ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .setUserSelectedOutgoingPhoneAccount( 290ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu any(PhoneAccountHandle.class), any(UserHandle.class)); 291ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 292ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 29384b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 294ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetCallCapablePhoneAccounts() throws RemoteException { 295ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<PhoneAccountHandle> fullPHList = new ArrayList<PhoneAccountHandle>() {{ 296ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(TEL_PA_HANDLE_16); 297ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(SIP_PA_HANDLE_17); 298ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }}; 299ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 300ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<PhoneAccountHandle> smallPHList = new ArrayList<PhoneAccountHandle>() {{ 301ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(SIP_PA_HANDLE_17); 302ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }}; 303ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // Returns all phone accounts when getCallCapablePhoneAccounts is called. 304ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 305ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getCallCapablePhoneAccounts(anyString(), eq(true), any(UserHandle.class))) 306ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(fullPHList); 307ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // Returns only enabled phone accounts when getCallCapablePhoneAccounts is called. 308ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 309ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getCallCapablePhoneAccounts(anyString(), eq(false), any(UserHandle.class))) 310ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(smallPHList); 311ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17); 312ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 313ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(fullPHList, 314ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.getCallCapablePhoneAccounts(true, DEFAULT_DIALER_PACKAGE)); 315ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(smallPHList, 316ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.getCallCapablePhoneAccounts(false, DEFAULT_DIALER_PACKAGE)); 317ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 318ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 31984b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 320ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetCallCapablePhoneAccountsFailure() throws RemoteException { 321ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<String> enforcedPermissions = new ArrayList<String>() {{ 322ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(READ_PHONE_STATE); 323ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(READ_PRIVILEGED_PHONE_STATE); 324ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }}; 325ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission( 326ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu argThat(new AnyStringIn(enforcedPermissions)), anyString()); 327ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 328ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<PhoneAccountHandle> result = null; 329ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 330ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu result = mTSIBinder.getCallCapablePhoneAccounts(true, ""); 331ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 332ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // intended behavior 333ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 334ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertNull(result); 335ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mFakePhoneAccountRegistrar, never()) 336ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getCallCapablePhoneAccounts(anyString(), anyBoolean(), any(UserHandle.class)); 337ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 338ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 33984b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 340ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetPhoneAccountsSupportingScheme() throws RemoteException { 341ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<PhoneAccountHandle> sipPHList = new ArrayList<PhoneAccountHandle>() {{ 342ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(SIP_PA_HANDLE_17); 343ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }}; 344ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 345ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<PhoneAccountHandle> telPHList = new ArrayList<PhoneAccountHandle>() {{ 346ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(TEL_PA_HANDLE_16); 347ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }}; 348ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 349ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getCallCapablePhoneAccounts(eq("tel"), anyBoolean(), any(UserHandle.class))) 350ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(telPHList); 351ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 352ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getCallCapablePhoneAccounts(eq("sip"), anyBoolean(), any(UserHandle.class))) 353ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(sipPHList); 354ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17); 355ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 356ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(telPHList, 357ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.getPhoneAccountsSupportingScheme("tel", DEFAULT_DIALER_PACKAGE)); 358ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(sipPHList, 359ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.getPhoneAccountsSupportingScheme("sip", DEFAULT_DIALER_PACKAGE)); 360ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 361ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 36284b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 363ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetPhoneAccountsForPackage() throws RemoteException { 364ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<PhoneAccountHandle> phoneAccountHandleList = new ArrayList<PhoneAccountHandle>() {{ 365ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(TEL_PA_HANDLE_16); 366ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(SIP_PA_HANDLE_17); 367ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }}; 368ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 369ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getPhoneAccountsForPackage(anyString(), any(UserHandle.class))) 370ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(phoneAccountHandleList); 371ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17); 372ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(phoneAccountHandleList, 373ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.getPhoneAccountsForPackage( 374ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu TEL_PA_HANDLE_16.getComponentName().getPackageName())); 375ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 376ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 37784b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 378ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetPhoneAccount() throws RemoteException { 379ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_16, SIP_PA_HANDLE_17); 380ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(TEL_PA_HANDLE_16, mTSIBinder.getPhoneAccount(TEL_PA_HANDLE_16) 381ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getAccountHandle()); 382ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(SIP_PA_HANDLE_17, mTSIBinder.getPhoneAccount(SIP_PA_HANDLE_17) 383ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getAccountHandle()); 384ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 385ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 38684b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 387ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testGetAllPhoneAccounts() throws RemoteException { 388ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu List<PhoneAccount> phoneAccountList = new ArrayList<PhoneAccount>() {{ 389ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(makePhoneAccount(TEL_PA_HANDLE_16).build()); 390ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu add(makePhoneAccount(SIP_PA_HANDLE_17).build()); 391ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu }}; 392ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar.getAllPhoneAccounts(any(UserHandle.class))) 393ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(phoneAccountList); 394ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 395ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(2, mTSIBinder.getAllPhoneAccounts().size()); 396ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 397ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 39884b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 399ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testRegisterPhoneAccount() throws RemoteException { 400ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameToUse = "com.android.officialpackage"; 401ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle phHandle = new PhoneAccountHandle(new ComponentName( 402ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu packageNameToUse, "cs"), "test", Binder.getCallingUserHandle()); 403ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccount phoneAccount = makePhoneAccount(phHandle).build(); 404ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_GRANTED) 405ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE); 406ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 407ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu registerPhoneAccountTestHelper(phoneAccount, true); 408ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 409ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 41084b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 411ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testRegisterPhoneAccountWithoutModifyPermission() throws RemoteException { 412ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // tests the case where the package does not have MODIFY_PHONE_STATE but is 413ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // registering its own phone account as a third-party connection service 414ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameToUse = "com.thirdparty.connectionservice"; 415ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle phHandle = new PhoneAccountHandle(new ComponentName( 416ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu packageNameToUse, "cs"), "asdf", Binder.getCallingUserHandle()); 417ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccount phoneAccount = makePhoneAccount(phHandle).build(); 418ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 419ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_DENIED) 420ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE); 421ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PackageManager pm = mContext.getPackageManager(); 422ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(pm.hasSystemFeature(PackageManager.FEATURE_CONNECTION_SERVICE)).thenReturn(true); 423ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 424ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu registerPhoneAccountTestHelper(phoneAccount, true); 425ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 426ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 42784b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 428ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testRegisterPhoneAccountWithoutModifyPermissionFailure() throws RemoteException { 429ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // tests the case where the third party package should not be allowed to register a phone 430ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // account due to the lack of modify permission. 431ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameToUse = "com.thirdparty.connectionservice"; 432ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle phHandle = new PhoneAccountHandle(new ComponentName( 433ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu packageNameToUse, "cs"), "asdf", Binder.getCallingUserHandle()); 434ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccount phoneAccount = makePhoneAccount(phHandle).build(); 435ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 436ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_DENIED) 437ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE); 438ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PackageManager pm = mContext.getPackageManager(); 439ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(pm.hasSystemFeature(PackageManager.FEATURE_CONNECTION_SERVICE)).thenReturn(false); 440ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 441ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu registerPhoneAccountTestHelper(phoneAccount, false); 442ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 443ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 44484b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 445ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testRegisterPhoneAccountWithoutSimSubscriptionPermissionFailure() 446ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu throws RemoteException { 447ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameToUse = "com.thirdparty.connectionservice"; 448ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle phHandle = new PhoneAccountHandle(new ComponentName( 449ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu packageNameToUse, "cs"), "asdf", Binder.getCallingUserHandle()); 450ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccount phoneAccount = makePhoneAccount(phHandle) 451ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .setCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION).build(); 452ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 453ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_GRANTED) 454ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE); 455ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()) 456ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext) 457ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .enforceCallingOrSelfPermission(eq(REGISTER_SIM_SUBSCRIPTION), anyString()); 458ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 459ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu registerPhoneAccountTestHelper(phoneAccount, false); 460ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 461ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 46284b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 463ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testRegisterPhoneAccountWithoutMultiUserPermissionFailure() 464ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu throws Exception { 465ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameToUse = "com.thirdparty.connectionservice"; 466ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle phHandle = new PhoneAccountHandle(new ComponentName( 467ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu packageNameToUse, "cs"), "asdf", Binder.getCallingUserHandle()); 468ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccount phoneAccount = makeMultiUserPhoneAccount(phHandle).build(); 469ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 470ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_GRANTED) 471ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE); 472ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 473ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PackageManager packageManager = mContext.getPackageManager(); 474ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(packageManager.getApplicationInfo(packageNameToUse, PackageManager.GET_META_DATA)) 475ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(new ApplicationInfo()); 476ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 477ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu registerPhoneAccountTestHelper(phoneAccount, false); 478ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 479ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 480ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private void registerPhoneAccountTestHelper(PhoneAccount testPhoneAccount, 481ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu boolean shouldSucceed) throws RemoteException { 482ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); 483ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu boolean didExceptionOccur = false; 484ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 485ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.registerPhoneAccount(testPhoneAccount); 486ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (Exception e) { 487ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu didExceptionOccur = true; 488ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 489ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 490ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu if (shouldSucceed) { 491ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertFalse(didExceptionOccur); 492ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mFakePhoneAccountRegistrar).registerPhoneAccount(testPhoneAccount); 493ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mContext).sendBroadcastAsUser(intentCaptor.capture(), eq(UserHandle.ALL), 494ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu anyString()); 495ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 496ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Intent capturedIntent = intentCaptor.getValue(); 497ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(TelecomManager.ACTION_PHONE_ACCOUNT_REGISTERED, 498ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu capturedIntent.getAction()); 499ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle intentExtras = capturedIntent.getExtras(); 500ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(1, intentExtras.size()); 501ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(testPhoneAccount.getAccountHandle(), 502ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu intentExtras.get(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE)); 503ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } else { 504ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertTrue(didExceptionOccur); 505ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mFakePhoneAccountRegistrar, never()) 506ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .registerPhoneAccount(any(PhoneAccount.class)); 507ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mContext, never()) 508ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .sendBroadcastAsUser(any(Intent.class), any(UserHandle.class), anyString()); 509ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 510ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 511ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 51284b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 513ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testUnregisterPhoneAccount() throws RemoteException { 514ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameToUse = "com.android.officialpackage"; 515ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle phHandle = new PhoneAccountHandle(new ComponentName( 516ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu packageNameToUse, "cs"), "test", Binder.getCallingUserHandle()); 517ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 518ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); 519ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_GRANTED) 520ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE); 521ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 522ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.unregisterPhoneAccount(phHandle); 523ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mFakePhoneAccountRegistrar).unregisterPhoneAccount(phHandle); 524ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mContext).sendBroadcastAsUser(intentCaptor.capture(), eq(UserHandle.ALL), 525ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu anyString()); 526ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Intent capturedIntent = intentCaptor.getValue(); 527ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(TelecomManager.ACTION_PHONE_ACCOUNT_UNREGISTERED, 528ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu capturedIntent.getAction()); 529ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle intentExtras = capturedIntent.getExtras(); 530ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(1, intentExtras.size()); 531ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(phHandle, intentExtras.get(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE)); 532ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 533ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 53484b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 535ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testUnregisterPhoneAccountFailure() throws RemoteException { 536ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameToUse = "com.thirdparty.connectionservice"; 537ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccountHandle phHandle = new PhoneAccountHandle(new ComponentName( 538ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu packageNameToUse, "cs"), "asdf", Binder.getCallingUserHandle()); 539ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 540ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_DENIED) 541ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE); 542ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PackageManager pm = mContext.getPackageManager(); 543ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(pm.hasSystemFeature(PackageManager.FEATURE_CONNECTION_SERVICE)).thenReturn(false); 544ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 545ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 546ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.unregisterPhoneAccount(phHandle); 547ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (UnsupportedOperationException e) { 548ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // expected behavior 549ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 550ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mFakePhoneAccountRegistrar, never()) 551ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .unregisterPhoneAccount(any(PhoneAccountHandle.class)); 552ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mContext, never()) 553ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .sendBroadcastAsUser(any(Intent.class), any(UserHandle.class), anyString()); 554ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 555ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 55684b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 557ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testAddNewIncomingCall() throws Exception { 558c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger PhoneAccount phoneAccount = makePhoneAccount(TEL_PA_HANDLE_CURRENT).build(); 559c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger phoneAccount.setIsEnabled(true); 560c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger doReturn(phoneAccount).when(mFakePhoneAccountRegistrar).getPhoneAccount( 561c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger eq(TEL_PA_HANDLE_CURRENT), any(UserHandle.class)); 562ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doNothing().when(mAppOpsManager).checkPackage(anyInt(), anyString()); 563ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle extras = createSampleExtras(); 564ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 565ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.addNewIncomingCall(TEL_PA_HANDLE_CURRENT, extras); 566ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 567ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu addCallTestHelper(TelecomManager.ACTION_INCOMING_CALL, 568ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu CallIntentProcessor.KEY_IS_INCOMING_CALL, extras, false); 569ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 570ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 57184b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 572ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testAddNewIncomingCallFailure() throws Exception { 573ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 574ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.addNewIncomingCall(TEL_PA_HANDLE_16, null); 575ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 576ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // expected 577ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 578ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 579ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()).when(mAppOpsManager).checkPackage(anyInt(), anyString()); 580ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 581ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 582ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.addNewIncomingCall(TEL_PA_HANDLE_CURRENT, null); 583ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 584ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // expected 585ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 586ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 587ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // Verify that neither of these attempts got through 588ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mCallIntentProcessorAdapter, never()) 589ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .processIncomingCallIntent(any(CallsManager.class), any(Intent.class)); 590ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 591ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 59284b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 593ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testAddNewUnknownCall() throws Exception { 594c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger PhoneAccount phoneAccount = makePhoneAccount(TEL_PA_HANDLE_CURRENT).build(); 595c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger phoneAccount.setIsEnabled(true); 596c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger doReturn(phoneAccount).when(mFakePhoneAccountRegistrar).getPhoneAccount( 597c34d474f16c40a0a5595cefbe455e4fd34d535d8Brad Ebinger eq(TEL_PA_HANDLE_CURRENT), any(UserHandle.class)); 598ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doNothing().when(mAppOpsManager).checkPackage(anyInt(), anyString()); 599ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle extras = createSampleExtras(); 600ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 601ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.addNewUnknownCall(TEL_PA_HANDLE_CURRENT, extras); 602ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 603ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu addCallTestHelper(TelecomManager.ACTION_NEW_UNKNOWN_CALL, 604ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu CallIntentProcessor.KEY_IS_UNKNOWN_CALL, extras, true); 605ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 606ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 60784b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 608ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testAddNewUnknownCallFailure() throws Exception { 609ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 610ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.addNewUnknownCall(TEL_PA_HANDLE_16, null); 611ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 612ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // expected 613ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 614ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 615ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()).when(mAppOpsManager).checkPackage(anyInt(), anyString()); 616ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 617ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 618ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.addNewUnknownCall(TEL_PA_HANDLE_CURRENT, null); 619ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 620ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // expected 621ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 622ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 623ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // Verify that neither of these attempts got through 624ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mCallIntentProcessorAdapter, never()) 625ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .processIncomingCallIntent(any(CallsManager.class), any(Intent.class)); 626ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 627ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 628ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private void addCallTestHelper(String expectedAction, String extraCallKey, 629ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle expectedExtras, boolean isUnknown) { 630ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); 631ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu if (isUnknown) { 632ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mCallIntentProcessorAdapter).processUnknownCallIntent(any(CallsManager.class), 633ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu intentCaptor.capture()); 634ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } else { 635ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mCallIntentProcessorAdapter).processIncomingCallIntent(any(CallsManager.class), 636ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu intentCaptor.capture()); 637ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 638ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Intent capturedIntent = intentCaptor.getValue(); 639ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(expectedAction, capturedIntent.getAction()); 640ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle intentExtras = capturedIntent.getExtras(); 641ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(TEL_PA_HANDLE_CURRENT, 642ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu intentExtras.get(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE)); 643ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertTrue(intentExtras.getBoolean(extraCallKey)); 644ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 645ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu if (isUnknown) { 646ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu for (String expectedKey : expectedExtras.keySet()) { 647ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertTrue(intentExtras.containsKey(expectedKey)); 648ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(expectedExtras.get(expectedKey), intentExtras.get(expectedKey)); 649ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 650ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 651ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu else { 652ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertTrue(areBundlesEqual(expectedExtras, 653ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu (Bundle) intentExtras.get(TelecomManager.EXTRA_INCOMING_CALL_EXTRAS))); 654ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 655ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 656ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 65784b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 658ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testPlaceCallWithNonEmergencyPermission() throws Exception { 659ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Uri handle = Uri.parse("tel:6505551234"); 660ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle extras = createSampleExtras(); 661ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 662ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_CALL_PHONE), anyInt(), anyString())) 663ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(AppOpsManager.MODE_ALLOWED); 664ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_GRANTED) 665ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingPermission(CALL_PHONE); 666ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 667ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.placeCall(handle, extras, DEFAULT_DIALER_PACKAGE); 668ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu placeCallTestHelper(handle, extras, true); 669ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 670ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 67184b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 672ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testPlaceCallWithAppOpsOff() throws Exception { 673ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Uri handle = Uri.parse("tel:6505551234"); 674ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle extras = createSampleExtras(); 675ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 676ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_CALL_PHONE), anyInt(), anyString())) 677ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(AppOpsManager.MODE_IGNORED); 678ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_GRANTED) 679ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingPermission(CALL_PHONE); 680ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 681ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.placeCall(handle, extras, DEFAULT_DIALER_PACKAGE); 682ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu placeCallTestHelper(handle, extras, false); 683ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 684ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 68584b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 686ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testPlaceCallWithNoCallingPermission() throws Exception { 687ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Uri handle = Uri.parse("tel:6505551234"); 688ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle extras = createSampleExtras(); 689ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 690ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mAppOpsManager.noteOp(eq(AppOpsManager.OP_CALL_PHONE), anyInt(), anyString())) 691ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(AppOpsManager.MODE_ALLOWED); 692ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(PackageManager.PERMISSION_DENIED) 693ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).checkCallingPermission(CALL_PHONE); 694ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 695ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.placeCall(handle, extras, DEFAULT_DIALER_PACKAGE); 696ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu placeCallTestHelper(handle, extras, false); 697ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 698ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 699ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private void placeCallTestHelper(Uri expectedHandle, Bundle expectedExtras, 700ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu boolean shouldNonEmergencyBeAllowed) { 701ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); 702ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mUserCallIntentProcessor).processIntent(intentCaptor.capture(), anyString(), 703ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu eq(shouldNonEmergencyBeAllowed)); 704ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Intent capturedIntent = intentCaptor.getValue(); 705ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(Intent.ACTION_CALL, capturedIntent.getAction()); 706ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(expectedHandle, capturedIntent.getData()); 707ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertTrue(areBundlesEqual(expectedExtras, capturedIntent.getExtras())); 708ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 709ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 71084b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 711ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testPlaceCallFailure() throws Exception { 712ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Uri handle = Uri.parse("tel:6505551234"); 713ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle extras = createSampleExtras(); 714ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 715ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()) 716ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mContext).enforceCallingOrSelfPermission(eq(CALL_PHONE), anyString()); 717ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 718ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 719ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.placeCall(handle, extras, "arbitrary_package_name"); 720ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 721ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu // expected 722ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 723ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 724ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mUserCallIntentProcessor, never()) 725ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .processIntent(any(Intent.class), anyString(), anyBoolean()); 726ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 727ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 72884b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 729ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testSetDefaultDialer() throws Exception { 730ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageName = "sample.package"; 731ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 732ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doReturn(true) 733ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .when(mDefaultDialerManagerAdapter) 734ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .setDefaultDialerApplication(any(Context.class), eq(packageName)); 735ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 736ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.setDefaultDialer(packageName); 737ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 738ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mDefaultDialerManagerAdapter).setDefaultDialerApplication(any(Context.class), 739ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu eq(packageName)); 740ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); 741ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mContext).sendBroadcastAsUser(intentCaptor.capture(), any(UserHandle.class)); 742ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Intent capturedIntent = intentCaptor.getValue(); 743ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(TelecomManager.ACTION_DEFAULT_DIALER_CHANGED, capturedIntent.getAction()); 744ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu String packageNameExtra = capturedIntent.getStringExtra( 745ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME); 746ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertEquals(packageName, packageNameExtra); 747ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 748ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 74984b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 750ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu public void testSetDefaultDialerNoModifyPhoneStatePermission() throws Exception { 751ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission( 752ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu eq(MODIFY_PHONE_STATE), anyString()); 753ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu setDefaultDialerFailureTestHelper(); 754ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 755ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 75684b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 7570a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testSetDefaultDialerNoWriteSecureSettingsPermission() throws Exception { 758ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission( 759ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu eq(WRITE_SECURE_SETTINGS), anyString()); 760ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu setDefaultDialerFailureTestHelper(); 761ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 762ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 763ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private void setDefaultDialerFailureTestHelper() throws Exception { 764ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu boolean exceptionThrown = false; 765ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu try { 766ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu mTSIBinder.setDefaultDialer(DEFAULT_DIALER_PACKAGE); 767ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } catch (SecurityException e) { 768ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu exceptionThrown = true; 769ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 770ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu assertTrue(exceptionThrown); 771ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mDefaultDialerManagerAdapter, never()).setDefaultDialerApplication( 772ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu any(Context.class), anyString()); 773ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu verify(mContext, never()).sendBroadcastAsUser(any(Intent.class), any(UserHandle.class)); 774ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 775ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 77684b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 7770a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testIsVoicemailNumber() throws Exception { 7780a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu String vmNumber = "010"; 7790a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_CURRENT); 7800a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 7810a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu doReturn(true).when(mFakePhoneAccountRegistrar).isVoiceMailNumber(TEL_PA_HANDLE_CURRENT, 7820a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu vmNumber); 7830a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertTrue(mTSIBinder.isVoiceMailNumber(TEL_PA_HANDLE_CURRENT, 7840a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu vmNumber, DEFAULT_DIALER_PACKAGE)); 7850a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 7860a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 78784b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 7880a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testIsVoicemailNumberAccountNotVisibleFailure() throws Exception { 7890a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu String vmNumber = "010"; 7900a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 7910a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu doReturn(true).when(mFakePhoneAccountRegistrar).isVoiceMailNumber(TEL_PA_HANDLE_CURRENT, 7920a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu vmNumber); 7930a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 7940a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakePhoneAccountRegistrar.getPhoneAccount(TEL_PA_HANDLE_CURRENT, 7950a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu Binder.getCallingUserHandle())).thenReturn(null); 7960a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertFalse(mTSIBinder 7970a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .isVoiceMailNumber(TEL_PA_HANDLE_CURRENT, vmNumber, DEFAULT_DIALER_PACKAGE)); 7980a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 7990a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 80084b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 8010a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testGetVoicemailNumberWithNullAccountHandle() throws Exception { 8020a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakePhoneAccountRegistrar.getPhoneAccount(isNull(PhoneAccountHandle.class), 8030a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu eq(Binder.getCallingUserHandle()))) 8040a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .thenReturn(makePhoneAccount(TEL_PA_HANDLE_CURRENT).build()); 8050a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu int subId = 58374; 8060a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu String vmNumber = "543"; 8070a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu doReturn(subId).when(mSubscriptionManagerAdapter).getDefaultVoiceSubId(); 8080a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 8090a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu TelephonyManager mockTelephonyManager = 8100a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); 8110a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mockTelephonyManager.getVoiceMailNumber(subId)).thenReturn(vmNumber); 8120a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 8130a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertEquals(vmNumber, mTSIBinder.getVoiceMailNumber(null, DEFAULT_DIALER_PACKAGE)); 8140a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 8150a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 81684b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 8170a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testGetVoicemailNumberWithNonNullAccountHandle() throws Exception { 8180a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakePhoneAccountRegistrar.getPhoneAccount(eq(TEL_PA_HANDLE_CURRENT), 8190a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu eq(Binder.getCallingUserHandle()))) 8200a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .thenReturn(makePhoneAccount(TEL_PA_HANDLE_CURRENT).build()); 8210a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu int subId = 58374; 8220a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu String vmNumber = "543"; 8230a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 8240a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu TelephonyManager mockTelephonyManager = 8250a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); 8260a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mockTelephonyManager.getVoiceMailNumber(subId)).thenReturn(vmNumber); 8270a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakePhoneAccountRegistrar.getSubscriptionIdForPhoneAccount(TEL_PA_HANDLE_CURRENT)) 8280a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .thenReturn(subId); 8290a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 8300a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertEquals(vmNumber, 8310a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu mTSIBinder.getVoiceMailNumber(TEL_PA_HANDLE_CURRENT, DEFAULT_DIALER_PACKAGE)); 8320a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 8330a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 83484b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 8350a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testGetLine1Number() throws Exception { 8360a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu int subId = 58374; 8370a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu String line1Number = "9482752023479"; 8380a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_CURRENT); 8390a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakePhoneAccountRegistrar.getSubscriptionIdForPhoneAccount(TEL_PA_HANDLE_CURRENT)) 8400a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .thenReturn(subId); 8410a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu TelephonyManager mockTelephonyManager = 8420a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); 843ce68874475498dcb69a543559177d69ac6dae215Shishir Agrawal when(mockTelephonyManager.getLine1Number(subId)).thenReturn(line1Number); 8440a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 8450a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertEquals(line1Number, 8460a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu mTSIBinder.getLine1Number(TEL_PA_HANDLE_CURRENT, DEFAULT_DIALER_PACKAGE)); 8470a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 8480a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 84984b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 8500a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testEndCallWithRingingForegroundCall() throws Exception { 8510a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu Call call = mock(Call.class); 8520a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(call.getState()).thenReturn(CallState.RINGING); 8530a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakeCallsManager.getForegroundCall()).thenReturn(call); 8540a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertTrue(mTSIBinder.endCall()); 8550a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu verify(call).reject(false, null); 8560a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 8570a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 85884b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 8590a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testEndCallWithNonRingingForegroundCall() throws Exception { 8600a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu Call call = mock(Call.class); 8610a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(call.getState()).thenReturn(CallState.ACTIVE); 8620a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakeCallsManager.getForegroundCall()).thenReturn(call); 8630a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertTrue(mTSIBinder.endCall()); 8640a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu verify(call).disconnect(); 8650a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 8660a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 86784b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 8680a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testEndCallWithNoForegroundCall() throws Exception { 8690a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu Call call = mock(Call.class); 8700a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(call.getState()).thenReturn(CallState.ACTIVE); 871609992b6d222e54a74cc7e6af06173090103a28aHall Liu when(mFakeCallsManager.getFirstCallWithState(argThat(new IntVarArgMatcher()))) 8720a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .thenReturn(call); 8730a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertTrue(mTSIBinder.endCall()); 8740a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu verify(call).disconnect(); 8750a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 8760a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 87784b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 8780a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testEndCallWithNoCalls() throws Exception { 8790a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu assertFalse(mTSIBinder.endCall()); 8800a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 8810a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 88284b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 8830a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testAcceptRingingCall() throws Exception { 8840a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu Call call = mock(Call.class); 8850a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakeCallsManager.getFirstCallWithState(any(int[].class))) 8860a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .thenReturn(call); 8870a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu // Not intended to be a real video state. Here to ensure that the call will be answered 8880a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu // with whatever video state it's currently in. 8890a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu int fakeVideoState = 29578215; 8900a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(call.getVideoState()).thenReturn(fakeVideoState); 8910a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu mTSIBinder.acceptRingingCall(); 8920a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu verify(call).answer(fakeVideoState); 8930a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 8940a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 89584b6c878ba75be8d4fee99af8da31a55ab50b99cHall Liu @SmallTest 8960a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu public void testAcceptRingingCallWithValidVideoState() throws Exception { 8970a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu Call call = mock(Call.class); 8980a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakeCallsManager.getFirstCallWithState(any(int[].class))) 8990a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .thenReturn(call); 9000a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu // Not intended to be a real video state. Here to ensure that the call will be answered 9010a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu // with the video state passed in to acceptRingingCallWithVideoState 9020a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu int fakeVideoState = 29578215; 9030a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu int realVideoState = VideoProfile.STATE_RX_ENABLED | VideoProfile.STATE_TX_ENABLED; 9040a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(call.getVideoState()).thenReturn(fakeVideoState); 9050a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu mTSIBinder.acceptRingingCallWithVideoState(realVideoState); 9060a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu verify(call).answer(realVideoState); 9070a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu } 9080a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu 909ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu /** 910ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * Register phone accounts for the supplied PhoneAccountHandles to make them 911ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * visible to all users (via the isVisibleToCaller method in TelecomServiceImpl. 912ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu * @param handles the handles for which phone accounts should be created for. 913ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu */ 914ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private void makeAccountsVisibleToAllUsers(PhoneAccountHandle... handles) { 915ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu for (PhoneAccountHandle ph : handles) { 916ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar.getPhoneAccountUnchecked(eq(ph))).thenReturn( 917ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu makeMultiUserPhoneAccount(ph).build()); 918ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu when(mFakePhoneAccountRegistrar 919ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .getPhoneAccount(eq(ph), any(UserHandle.class), anyBoolean())) 920ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu .thenReturn(makeMultiUserPhoneAccount(ph).build()); 9210a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu when(mFakePhoneAccountRegistrar 9220a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .getPhoneAccount(eq(ph), any(UserHandle.class))) 9230a6dd30f0f7acab586db9933bd4836148cd91c89Hall Liu .thenReturn(makeMultiUserPhoneAccount(ph).build()); 924ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 925ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 926ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 927ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private PhoneAccount.Builder makeMultiUserPhoneAccount(PhoneAccountHandle paHandle) { 928ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu PhoneAccount.Builder paBuilder = makePhoneAccount(paHandle); 929ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu paBuilder.setCapabilities(PhoneAccount.CAPABILITY_MULTI_USER); 930ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return paBuilder; 931ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 932ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 933ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private PhoneAccount.Builder makePhoneAccount(PhoneAccountHandle paHandle) { 934ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return new PhoneAccount.Builder(paHandle, "testLabel"); 935ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 936ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 937ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private Bundle createSampleExtras() { 938ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu Bundle extras = new Bundle(); 939ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu extras.putString("test_key", "test_value"); 940ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return extras; 941ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 942ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 943ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu private static boolean areBundlesEqual(Bundle b1, Bundle b2) { 944ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu for (String key1 : b1.keySet()) { 945ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu if (!b1.get(key1).equals(b2.get(key1))) { 946ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return false; 947ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 948ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 949ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu 950ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu for (String key2 : b2.keySet()) { 951ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu if (!b2.get(key2).equals(b1.get(key2))) { 952ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return false; 953ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 954ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 955ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu return true; 956ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu } 957ecda55454f4993003e71e09a63d20f94a216cc47Hall Liu} 958