1ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn/* 2ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * Copyright (C) 2017 The Android Open Source Project 3ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * 4ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * Licensed under the Apache License, Version 2.0 (the "License"); 5ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * you may not use this file except in compliance with the License. 6ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * You may obtain a copy of the License at 7ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * 8ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * http://www.apache.org/licenses/LICENSE-2.0 9ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * 10ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * Unless required by applicable law or agreed to in writing, software 11ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * distributed under the License is distributed on an "AS IS" BASIS, 12ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * See the License for the specific language governing permissions and 14ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * limitations under the License 15ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn */ 16ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn 17ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnpackage com.android.server.telecom.tests; 18ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn 19ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport android.app.Notification; 20ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport android.app.NotificationManager; 21ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport android.content.Context; 22ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport android.content.pm.ApplicationInfo; 23ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport android.content.res.Resources; 24ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport android.os.Build; 25ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport android.telecom.VideoProfile; 26ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport android.test.suitebuilder.annotation.SmallTest; 27ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn 28ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport com.android.server.telecom.Call; 29ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport com.android.server.telecom.CallState; 30ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport com.android.server.telecom.ui.IncomingCallNotifier; 31ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn 32ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport org.mockito.ArgumentCaptor; 33ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport org.mockito.Mock; 34ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn 35ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport static org.mockito.Matchers.any; 36ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport static org.mockito.Matchers.eq; 37ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport static org.mockito.Matchers.isNull; 38ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport static org.mockito.Mockito.doReturn; 39ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport static org.mockito.Mockito.never; 40ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport static org.mockito.Mockito.verify; 41ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnimport static org.mockito.Mockito.when; 42ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn 43ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn/** 44ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * Tests for the {@link com.android.server.telecom.ui.IncomingCallNotifier} class. 45ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn */ 46ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunnpublic class IncomingCallNotifierTest extends TelecomTestCase { 47ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn 48ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn @Mock private IncomingCallNotifier.CallsManagerProxy mCallsManagerProxy; 49ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn @Mock private Call mAudioCall; 50ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn @Mock private Call mVideoCall; 51ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn @Mock private Call mRingingCall; 52ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn private IncomingCallNotifier mIncomingCallNotifier; 53ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn private NotificationManager mNotificationManager; 54ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn 55ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn public void setUp() throws Exception { 56ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn super.setUp(); 57ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn mContext = mComponentContextFixture.getTestDouble().getApplicationContext(); 58ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn ApplicationInfo info = new ApplicationInfo(); 59ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn info.targetSdkVersion = Build.VERSION_CODES.N_MR1; 60ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn doReturn(info).when(mContext).getApplicationInfo(); 61ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn doReturn(null).when(mContext).getTheme(); 62ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn mNotificationManager = (NotificationManager) mContext.getSystemService( 63ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn Context.NOTIFICATION_SERVICE); 64ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn mIncomingCallNotifier = new IncomingCallNotifier(mContext); 65ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn mIncomingCallNotifier.setCallsManagerProxy(mCallsManagerProxy); 66ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn 67ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mAudioCall.getVideoState()).thenReturn(VideoProfile.STATE_AUDIO_ONLY); 68ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mAudioCall.getTargetPhoneAccountLabel()).thenReturn("Bar"); 69ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mVideoCall.getVideoState()).thenReturn(VideoProfile.STATE_BIDIRECTIONAL); 70ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mVideoCall.getTargetPhoneAccountLabel()).thenReturn("Bar"); 71ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mRingingCall.isSelfManaged()).thenReturn(true); 72ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mRingingCall.isIncoming()).thenReturn(true); 73ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mRingingCall.getState()).thenReturn(CallState.RINGING); 74ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mRingingCall.getVideoState()).thenReturn(VideoProfile.STATE_AUDIO_ONLY); 75ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mRingingCall.getTargetPhoneAccountLabel()).thenReturn("Foo"); 76ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn } 77ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn 78ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn /** 79ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * Add a call that isn't ringing. 80ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn */ 81ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn @SmallTest 82ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn public void testSingleCall() { 83ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn mIncomingCallNotifier.onCallAdded(mAudioCall); 84acc09c44870b58e3350086a78add37bbedccfce8Tyler Gunn verify(mNotificationManager, never()).notify(eq(IncomingCallNotifier.NOTIFICATION_TAG), 85ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn eq(IncomingCallNotifier.NOTIFICATION_INCOMING_CALL), any()); 86ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn } 87ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn 88ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn /** 89ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * Add a ringing call when there is no other ongoing call. 90ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn */ 91ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn @SmallTest 92ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn public void testIncomingDuringOngoingCall() { 93ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mCallsManagerProxy.hasCallsForOtherPhoneAccount(any())).thenReturn(false); 94ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn mIncomingCallNotifier.onCallAdded(mRingingCall); 95acc09c44870b58e3350086a78add37bbedccfce8Tyler Gunn verify(mNotificationManager, never()).notify(eq(IncomingCallNotifier.NOTIFICATION_TAG), 96ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn eq(IncomingCallNotifier.NOTIFICATION_INCOMING_CALL), any()); 97ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn } 98ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn 99ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn /** 100ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * Add a ringing call with another call ongoing, not from a different phone account. 101ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn */ 102ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn @SmallTest 103ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn public void testIncomingDuringOngoingCall2() { 104ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mCallsManagerProxy.hasCallsForOtherPhoneAccount(any())).thenReturn(false); 105ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mCallsManagerProxy.getNumCallsForOtherPhoneAccount(any())).thenReturn(0); 106ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mCallsManagerProxy.getActiveCall()).thenReturn(mAudioCall); 107ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn 108ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn mIncomingCallNotifier.onCallAdded(mAudioCall); 109ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn mIncomingCallNotifier.onCallAdded(mRingingCall); 110acc09c44870b58e3350086a78add37bbedccfce8Tyler Gunn verify(mNotificationManager, never()).notify(eq(IncomingCallNotifier.NOTIFICATION_TAG), 111ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn eq(IncomingCallNotifier.NOTIFICATION_INCOMING_CALL), any());; 112ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn } 113ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn 114ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn /** 115ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn * Remove ringing call with another call ongoing. 116ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn */ 117ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn @SmallTest 118ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn public void testCallRemoved() { 119ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mCallsManagerProxy.hasCallsForOtherPhoneAccount(any())).thenReturn(true); 120ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mCallsManagerProxy.getNumCallsForOtherPhoneAccount(any())).thenReturn(1); 121ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn when(mCallsManagerProxy.getActiveCall()).thenReturn(mAudioCall); 122ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn 123ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn mIncomingCallNotifier.onCallAdded(mAudioCall); 124ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn mIncomingCallNotifier.onCallAdded(mRingingCall); 125acc09c44870b58e3350086a78add37bbedccfce8Tyler Gunn verify(mNotificationManager).notify(eq(IncomingCallNotifier.NOTIFICATION_TAG), 126ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn eq(IncomingCallNotifier.NOTIFICATION_INCOMING_CALL), any()); 127ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn mIncomingCallNotifier.onCallRemoved(mRingingCall); 128acc09c44870b58e3350086a78add37bbedccfce8Tyler Gunn verify(mNotificationManager).cancel(eq(IncomingCallNotifier.NOTIFICATION_TAG), 129acc09c44870b58e3350086a78add37bbedccfce8Tyler Gunn eq(IncomingCallNotifier.NOTIFICATION_INCOMING_CALL)); 130ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn } 131ca766d28471cc41d9ef33682a41edd1f99448d42Tyler Gunn} 132