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