blob: ed0f9ab224ebb7ba986f022bf08b9324f7c27624 [file] [log] [blame]
Jason Monk07b75fe2015-05-14 16:47:03 -04001/*
2 * Copyright (C) 2015 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 */
16package com.android.systemui.statusbar.policy;
17
18import android.os.HandlerThread;
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040019import android.support.test.runner.AndroidJUnit4;
Jason Monk07b75fe2015-05-14 16:47:03 -040020import android.telephony.SubscriptionInfo;
Jason Monke427cb82015-07-28 09:18:08 -040021import android.test.suitebuilder.annotation.SmallTest;
Jason Monk07b75fe2015-05-14 16:47:03 -040022import com.android.systemui.R;
Jason Monk25a52b62017-05-23 10:42:59 -040023import com.android.systemui.SysuiTestCase;
Jason Monk46dbfb42016-02-25 14:59:20 -050024import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener;
Jason Monk33f8ae72015-05-08 10:45:15 -040025import com.android.systemui.statusbar.policy.NetworkController.IconState;
Jason Monk07b75fe2015-05-14 16:47:03 -040026import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040027import java.util.ArrayList;
28import java.util.List;
29import org.junit.Before;
30import org.junit.runner.RunWith;
31import org.junit.Test;
Jason Monk07b75fe2015-05-14 16:47:03 -040032import org.mockito.ArgumentCaptor;
33import org.mockito.Mock;
34import org.mockito.Mockito;
35import org.mockito.MockitoAnnotations;
36
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040037import static junit.framework.Assert.assertTrue;
38import static junit.framework.Assert.assertEquals;
Jason Monk07b75fe2015-05-14 16:47:03 -040039
Jason Monk0f0de132016-12-19 15:36:13 -050040import static org.mockito.Matchers.eq;
41
Jason Monke427cb82015-07-28 09:18:08 -040042@SmallTest
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040043@RunWith(AndroidJUnit4.class)
Jason Monk25a52b62017-05-23 10:42:59 -040044public class CallbackHandlerTest extends SysuiTestCase {
Jason Monk07b75fe2015-05-14 16:47:03 -040045
46 private CallbackHandler mHandler;
47 private HandlerThread mHandlerThread;
48
49 @Mock
50 private EmergencyListener mEmengencyListener;
51 @Mock
52 private SignalCallback mSignalCallback;
53
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040054 @Before
55 public void setUp() throws Exception {
Jason Monk07b75fe2015-05-14 16:47:03 -040056 mHandlerThread = new HandlerThread("TestThread");
57 mHandlerThread.start();
58 mHandler = new CallbackHandler(mHandlerThread.getLooper());
59
60 MockitoAnnotations.initMocks(this);
61 mHandler.setListening(mEmengencyListener, true);
62 mHandler.setListening(mSignalCallback, true);
63 }
64
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040065 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -040066 public void testEmergencyListener() {
67 mHandler.setEmergencyCallsOnly(true);
68 waitForCallbacks();
69
70 ArgumentCaptor<Boolean> captor = ArgumentCaptor.forClass(Boolean.class);
71 Mockito.verify(mEmengencyListener).setEmergencyCallsOnly(captor.capture());
72 assertTrue(captor.getValue());
73 }
74
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040075 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -040076 public void testSignalCallback_setWifiIndicators() {
77 boolean enabled = true;
78 IconState status = new IconState(true, 0, "");
79 IconState qs = new IconState(true, 1, "");
80 boolean in = true;
81 boolean out = true;
82 String description = "Test";
Amin Shaikhe74dbdd2018-03-09 16:05:30 -050083 String secondaryLabel = "Secondary label";
84 mHandler.setWifiIndicators(enabled, status, qs, in, out, description, true, secondaryLabel);
Jason Monk07b75fe2015-05-14 16:47:03 -040085 waitForCallbacks();
86
87 ArgumentCaptor<Boolean> enableArg = ArgumentCaptor.forClass(Boolean.class);
88 ArgumentCaptor<IconState> statusArg = ArgumentCaptor.forClass(IconState.class);
89 ArgumentCaptor<IconState> qsArg = ArgumentCaptor.forClass(IconState.class);
90 ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class);
91 ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class);
92 ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class);
Jason Monk110e5f62017-03-31 13:45:12 -040093 ArgumentCaptor<Boolean> isTransient = ArgumentCaptor.forClass(Boolean.class);
Amin Shaikhe74dbdd2018-03-09 16:05:30 -050094 ArgumentCaptor<String> secondary = ArgumentCaptor.forClass(String.class);
Jason Monk07b75fe2015-05-14 16:47:03 -040095 Mockito.verify(mSignalCallback).setWifiIndicators(enableArg.capture(),
96 statusArg.capture(), qsArg.capture(), inArg.capture(), outArg.capture(),
Amin Shaikhe74dbdd2018-03-09 16:05:30 -050097 descArg.capture(), isTransient.capture(), secondary.capture());
Jason Monk07b75fe2015-05-14 16:47:03 -040098 assertEquals(enabled, (boolean) enableArg.getValue());
99 assertEquals(status, statusArg.getValue());
100 assertEquals(qs, qsArg.getValue());
101 assertEquals(in, (boolean) inArg.getValue());
102 assertEquals(out, (boolean) outArg.getValue());
103 assertEquals(description, descArg.getValue());
Jason Monk110e5f62017-03-31 13:45:12 -0400104 assertTrue(isTransient.getValue());
Amin Shaikhe74dbdd2018-03-09 16:05:30 -0500105 assertEquals(secondaryLabel, secondary.getValue());
Jason Monk07b75fe2015-05-14 16:47:03 -0400106 }
107
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400108 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400109 public void testSignalCallback_setMobileDataIndicators() {
110 IconState status = new IconState(true, 0, "");
111 IconState qs = new IconState(true, 1, "");
Jason Monk07b75fe2015-05-14 16:47:03 -0400112 boolean in = true;
113 boolean out = true;
114 String typeDescription = "Test 1";
115 String description = "Test 2";
Amin Shaikhd64e6262018-03-08 10:08:13 -0500116 int type = TelephonyIcons.ICON_1X;
117 int qsType = TelephonyIcons.ICON_1X;
Jason Monk07b75fe2015-05-14 16:47:03 -0400118 boolean wide = true;
119 int subId = 5;
Jason Monk0f0de132016-12-19 15:36:13 -0500120 boolean roaming = true;
Jason Monk7e6c83c2017-04-26 14:35:24 -0400121 mHandler.setMobileDataIndicators(status, qs, type, qsType, in, out, typeDescription,
122 description, wide, subId, roaming);
Jason Monk07b75fe2015-05-14 16:47:03 -0400123 waitForCallbacks();
124
125 ArgumentCaptor<IconState> statusArg = ArgumentCaptor.forClass(IconState.class);
Jason Monk7e6c83c2017-04-26 14:35:24 -0400126 ArgumentCaptor<IconState> qsArg = ArgumentCaptor.forClass(IconState.class);
Jason Monk07b75fe2015-05-14 16:47:03 -0400127 ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class);
Jason Monk7e6c83c2017-04-26 14:35:24 -0400128 ArgumentCaptor<Integer> qsTypeIconArg = ArgumentCaptor.forClass(Integer.class);
Jason Monk07b75fe2015-05-14 16:47:03 -0400129 ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class);
130 ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class);
131 ArgumentCaptor<String> typeContentArg = ArgumentCaptor.forClass(String.class);
Jason Monk7e6c83c2017-04-26 14:35:24 -0400132 ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class);
133 ArgumentCaptor<Boolean> wideArg = ArgumentCaptor.forClass(Boolean.class);
Jason Monk07b75fe2015-05-14 16:47:03 -0400134 ArgumentCaptor<Integer> subIdArg = ArgumentCaptor.forClass(Integer.class);
Andrew Flynn2fdbe122015-06-01 16:34:21 -0400135 Mockito.verify(mSignalCallback).setMobileDataIndicators(statusArg.capture(),
Jason Monk7e6c83c2017-04-26 14:35:24 -0400136 qsArg.capture(), typeIconArg.capture(), qsTypeIconArg.capture(), inArg.capture(),
137 outArg.capture(), typeContentArg.capture(), descArg.capture(), wideArg.capture(),
138 subIdArg.capture(), eq(roaming));
Jason Monk07b75fe2015-05-14 16:47:03 -0400139 assertEquals(status, statusArg.getValue());
Jason Monk7e6c83c2017-04-26 14:35:24 -0400140 assertEquals(qs, qsArg.getValue());
Jason Monk07b75fe2015-05-14 16:47:03 -0400141 assertEquals(type, (int) typeIconArg.getValue());
Jason Monk7e6c83c2017-04-26 14:35:24 -0400142 assertEquals(qsType, (int) qsTypeIconArg.getValue());
Jason Monk07b75fe2015-05-14 16:47:03 -0400143 assertEquals(in, (boolean) inArg.getValue());
144 assertEquals(out, (boolean) outArg.getValue());
145 assertEquals(typeDescription, typeContentArg.getValue());
Jason Monk7e6c83c2017-04-26 14:35:24 -0400146 assertEquals(description, descArg.getValue());
147 assertEquals(wide, (boolean) wideArg.getValue());
Jason Monk07b75fe2015-05-14 16:47:03 -0400148 assertEquals(subId, (int) subIdArg.getValue());
149 }
150
151 @SuppressWarnings("unchecked")
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400152 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400153 public void testSignalCallback_setSubs() {
154 List<SubscriptionInfo> subs = new ArrayList<>();
155 mHandler.setSubs(subs);
156 waitForCallbacks();
157
158 ArgumentCaptor<ArrayList> subsArg = ArgumentCaptor.forClass(ArrayList.class);
159 Mockito.verify(mSignalCallback).setSubs(subsArg.capture());
160 assertTrue(subs == subsArg.getValue());
161 }
162
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400163 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400164 public void testSignalCallback_setNoSims() {
165 boolean noSims = true;
Jason Monk1ff77662017-09-29 11:17:05 -0400166 boolean simDetected = false;
167 mHandler.setNoSims(noSims, simDetected);
Jason Monk07b75fe2015-05-14 16:47:03 -0400168 waitForCallbacks();
169
Jason Monk1ff77662017-09-29 11:17:05 -0400170 Mockito.verify(mSignalCallback).setNoSims(eq(noSims), eq(simDetected));
Jason Monk07b75fe2015-05-14 16:47:03 -0400171 }
172
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400173 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400174 public void testSignalCallback_setEthernetIndicators() {
175 IconState state = new IconState(true, R.drawable.stat_sys_ethernet, "Test Description");
176 mHandler.setEthernetIndicators(state);
177 waitForCallbacks();
178
179 ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
180 Mockito.verify(mSignalCallback).setEthernetIndicators(iconArg.capture());
181 assertEquals(state, iconArg.getValue());
182 }
183
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400184 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400185 public void testSignalCallback_setIsAirplaneMode() {
186 IconState state = new IconState(true, R.drawable.stat_sys_airplane_mode, "Test Description");
187 mHandler.setIsAirplaneMode(state);
188 waitForCallbacks();
189
190 ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
191 Mockito.verify(mSignalCallback).setIsAirplaneMode(iconArg.capture());
192 assertEquals(state, iconArg.getValue());
193 }
194
195 private void waitForCallbacks() {
196 mHandlerThread.quitSafely();
197 try {
198 mHandlerThread.join();
199 } catch (InterruptedException e) {
200 }
201 }
202
203}