• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.telephony.ims;
18 
19 import static junit.framework.Assert.assertEquals;
20 import static junit.framework.Assert.assertTrue;
21 
22 import static org.mockito.ArgumentMatchers.any;
23 import static org.mockito.ArgumentMatchers.eq;
24 import static org.mockito.Mockito.spy;
25 import static org.mockito.Mockito.verify;
26 
27 import android.os.Handler;
28 import android.os.Looper;
29 import android.os.Message;
30 import android.os.Messenger;
31 import android.telecom.TelecomManager;
32 import android.telephony.ims.aidl.IImsCapabilityCallback;
33 import android.telephony.ims.aidl.IImsMmTelFeature;
34 import android.telephony.ims.feature.MmTelFeature;
35 import android.telephony.ims.stub.ImsCallSessionImplBase;
36 import android.test.suitebuilder.annotation.SmallTest;
37 
38 import androidx.test.runner.AndroidJUnit4;
39 
40 import com.android.ims.internal.IImsCallSession;
41 import com.android.internal.telephony.ims.ImsTestBase;
42 
43 import org.junit.After;
44 import org.junit.Before;
45 import org.junit.Test;
46 import org.junit.runner.RunWith;
47 import org.mockito.ArgumentCaptor;
48 import org.mockito.Mockito;
49 
50 @RunWith(AndroidJUnit4.class)
51 public class MmTelFeatureTests extends ImsTestBase {
52 
53     // Public for Mockito testing
54     public class CapabilityCallback extends IImsCapabilityCallback.Stub {
55 
56         @Override
onQueryCapabilityConfiguration(int capability, int radioTech, boolean enabled)57         public void onQueryCapabilityConfiguration(int capability, int radioTech, boolean enabled) {
58 
59         }
60 
61         @Override
onChangeCapabilityConfigurationError(int capability, int radioTech, int reason)62         public void onChangeCapabilityConfigurationError(int capability, int radioTech,
63                 int reason) {
64 
65         }
66 
67         @Override
onCapabilitiesStatusChanged(int config)68         public void onCapabilitiesStatusChanged(int config) {
69 
70         }
71     }
72 
73     private static final int TEST_CAPABILITY = 1;
74     private static final int TEST_RADIO_TECH = 0;
75 
76     private static final int TEST_TTY_RESULT = 0;
77     private static final int TEST_SEND_DTMF_RESULT = 1;
78     private static final int TEST_RESULT_MAX = 2;
79 
80     private static final int TEST_RESULT_DELAY_MS = 5000;
81 
82     private android.telephony.ims.TestMmTelFeature mFeature;
83     private IImsMmTelFeature mFeatureBinder;
84     private CapabilityCallback mCapabilityCallback;
85     private MmTelFeature.Listener mListener;
86 
87     // set to true when the handler receives a message back from the Feature.
88     private boolean[] mHandlerResults;
89 
90     private class TestHandler extends Handler {
91 
TestHandler(Looper looper)92         TestHandler(Looper looper) {
93             super(looper);
94         }
95 
96         @Override
handleMessage(Message msg)97         public void handleMessage(Message msg) {
98             switch (msg.what) {
99                 case TEST_TTY_RESULT:
100                     mHandlerResults[TEST_TTY_RESULT] = true;
101                     break;
102                 case TEST_SEND_DTMF_RESULT:
103                     mHandlerResults[TEST_SEND_DTMF_RESULT] = true;
104                     break;
105             }
106         }
107     }
108     private final Handler mHandler = new TestHandler(Looper.getMainLooper());
109     private final Messenger mHandlerMessenger = new Messenger(mHandler);
110 
111     @Before
setup()112     public void setup() throws Exception {
113         super.setUp();
114         mFeature = new TestMmTelFeature();
115         mFeatureBinder = mFeature.getBinder();
116         mCapabilityCallback = spy(new CapabilityCallback());
117         mListener = spy(new MmTelFeature.Listener());
118         mFeatureBinder.setListener(mListener);
119         mHandlerResults = new boolean[TEST_RESULT_MAX];
120     }
121 
122     @After
tearDown()123     public void tearDown() {
124         mFeature = null;
125         mFeatureBinder = null;
126     }
127 
128     @SmallTest
129     @Test
testQueryCapabilityConfiguration()130     public void testQueryCapabilityConfiguration() throws Exception {
131         mFeature.queryConfigurationResult = true;
132 
133         mFeatureBinder.queryCapabilityConfiguration(TEST_CAPABILITY, TEST_RADIO_TECH,
134                 mCapabilityCallback);
135 
136         verify(mCapabilityCallback).onQueryCapabilityConfiguration(eq(TEST_CAPABILITY),
137                 eq(TEST_RADIO_TECH), eq(true));
138     }
139 
140     @SmallTest
141     @Test
testNewIncomingCall()142     public void testNewIncomingCall() throws Exception {
143         IImsCallSession sessionBinder = Mockito.mock(IImsCallSession.class);
144         ImsCallSessionImplBase session = new ImsCallSessionImplBase();
145         session.setServiceImpl(sessionBinder);
146 
147         mFeature.incomingCall(session);
148         ArgumentCaptor<IImsCallSession> captor = ArgumentCaptor.forClass(IImsCallSession.class);
149         verify(mListener).onIncomingCall(captor.capture(), any());
150 
151         assertEquals(sessionBinder, captor.getValue());
152     }
153 
154     @SmallTest
155     @Test
testSetTtyMessageMessenger()156     public void testSetTtyMessageMessenger() throws Exception {
157         Message resultMessage = Message.obtain(mHandler, TEST_TTY_RESULT);
158         resultMessage.replyTo = mHandlerMessenger;
159         mFeatureBinder.setUiTtyMode(TelecomManager.TTY_MODE_FULL, resultMessage);
160         waitForHandlerAction(mHandler, TEST_RESULT_DELAY_MS);
161         assertTrue(mHandlerResults[TEST_TTY_RESULT]);
162     }
163 
164     @SmallTest
165     @Test
testSendDtmfMessageMessenger()166     public void testSendDtmfMessageMessenger() throws Exception {
167         Message resultMessage = Message.obtain(mHandler, TEST_SEND_DTMF_RESULT);
168         resultMessage.replyTo = mHandlerMessenger;
169         IImsCallSession callSession = mFeatureBinder.createCallSession(null);
170         callSession.sendDtmf('0', resultMessage);
171         waitForHandlerAction(mHandler, TEST_RESULT_DELAY_MS);
172         assertTrue(mHandlerResults[TEST_SEND_DTMF_RESULT]);
173     }
174 }
175