blob: e3558d46992a03e67e06d5c301749b45cdb3376c [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;
Sundeep Ghuman9d10a3c2017-06-16 00:05:16 +000021import android.test.AndroidTestCase;
Jason Monke427cb82015-07-28 09:18:08 -040022import android.test.suitebuilder.annotation.SmallTest;
Jason Monk07b75fe2015-05-14 16:47:03 -040023import com.android.systemui.R;
Jason Monk25a52b62017-05-23 10:42:59 -040024import com.android.systemui.SysuiTestCase;
Jason Monk46dbfb42016-02-25 14:59:20 -050025import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener;
Jason Monk33f8ae72015-05-08 10:45:15 -040026import com.android.systemui.statusbar.policy.NetworkController.IconState;
Jason Monk07b75fe2015-05-14 16:47:03 -040027import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040028import java.util.ArrayList;
29import java.util.List;
30import org.junit.Before;
31import org.junit.runner.RunWith;
32import org.junit.Test;
Jason Monk07b75fe2015-05-14 16:47:03 -040033import org.mockito.ArgumentCaptor;
34import org.mockito.Mock;
35import org.mockito.Mockito;
36import org.mockito.MockitoAnnotations;
37
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040038import static junit.framework.Assert.assertTrue;
39import static junit.framework.Assert.assertEquals;
Jason Monk07b75fe2015-05-14 16:47:03 -040040
Jason Monk0f0de132016-12-19 15:36:13 -050041import static org.mockito.Matchers.eq;
42
Jason Monke427cb82015-07-28 09:18:08 -040043@SmallTest
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040044@RunWith(AndroidJUnit4.class)
Jason Monk25a52b62017-05-23 10:42:59 -040045public class CallbackHandlerTest extends SysuiTestCase {
Jason Monk07b75fe2015-05-14 16:47:03 -040046
47 private CallbackHandler mHandler;
48 private HandlerThread mHandlerThread;
49
50 @Mock
51 private EmergencyListener mEmengencyListener;
52 @Mock
53 private SignalCallback mSignalCallback;
54
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040055 @Before
56 public void setUp() throws Exception {
Jason Monk07b75fe2015-05-14 16:47:03 -040057 mHandlerThread = new HandlerThread("TestThread");
58 mHandlerThread.start();
59 mHandler = new CallbackHandler(mHandlerThread.getLooper());
60
61 MockitoAnnotations.initMocks(this);
62 mHandler.setListening(mEmengencyListener, true);
63 mHandler.setListening(mSignalCallback, true);
64 }
65
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040066 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -040067 public void testEmergencyListener() {
68 mHandler.setEmergencyCallsOnly(true);
69 waitForCallbacks();
70
71 ArgumentCaptor<Boolean> captor = ArgumentCaptor.forClass(Boolean.class);
72 Mockito.verify(mEmengencyListener).setEmergencyCallsOnly(captor.capture());
73 assertTrue(captor.getValue());
74 }
75
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040076 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -040077 public void testSignalCallback_setWifiIndicators() {
78 boolean enabled = true;
79 IconState status = new IconState(true, 0, "");
80 IconState qs = new IconState(true, 1, "");
81 boolean in = true;
82 boolean out = true;
83 String description = "Test";
Jason Monk110e5f62017-03-31 13:45:12 -040084 mHandler.setWifiIndicators(enabled, status, qs, in, out, description, true);
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);
Jason Monk07b75fe2015-05-14 16:47:03 -040094 Mockito.verify(mSignalCallback).setWifiIndicators(enableArg.capture(),
95 statusArg.capture(), qsArg.capture(), inArg.capture(), outArg.capture(),
Jason Monk110e5f62017-03-31 13:45:12 -040096 descArg.capture(), isTransient.capture());
Jason Monk07b75fe2015-05-14 16:47:03 -040097 assertEquals(enabled, (boolean) enableArg.getValue());
98 assertEquals(status, statusArg.getValue());
99 assertEquals(qs, qsArg.getValue());
100 assertEquals(in, (boolean) inArg.getValue());
101 assertEquals(out, (boolean) outArg.getValue());
102 assertEquals(description, descArg.getValue());
Jason Monk110e5f62017-03-31 13:45:12 -0400103 assertTrue(isTransient.getValue());
Jason Monk07b75fe2015-05-14 16:47:03 -0400104 }
105
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400106 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400107 public void testSignalCallback_setMobileDataIndicators() {
108 IconState status = new IconState(true, 0, "");
109 IconState qs = new IconState(true, 1, "");
Jason Monk07b75fe2015-05-14 16:47:03 -0400110 boolean in = true;
111 boolean out = true;
112 String typeDescription = "Test 1";
113 String description = "Test 2";
114 int type = R.drawable.stat_sys_data_fully_connected_1x;
Jason Monk01df36f2017-06-07 13:02:47 -0400115 int qsType = R.drawable.ic_qs_signal_1x;
Jason Monk07b75fe2015-05-14 16:47:03 -0400116 boolean wide = true;
117 int subId = 5;
Jason Monk0f0de132016-12-19 15:36:13 -0500118 boolean roaming = true;
Jason Monk7e6c83c2017-04-26 14:35:24 -0400119 mHandler.setMobileDataIndicators(status, qs, type, qsType, in, out, typeDescription,
120 description, wide, subId, roaming);
Jason Monk07b75fe2015-05-14 16:47:03 -0400121 waitForCallbacks();
122
123 ArgumentCaptor<IconState> statusArg = ArgumentCaptor.forClass(IconState.class);
Jason Monk7e6c83c2017-04-26 14:35:24 -0400124 ArgumentCaptor<IconState> qsArg = ArgumentCaptor.forClass(IconState.class);
Jason Monk07b75fe2015-05-14 16:47:03 -0400125 ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class);
Jason Monk7e6c83c2017-04-26 14:35:24 -0400126 ArgumentCaptor<Integer> qsTypeIconArg = ArgumentCaptor.forClass(Integer.class);
Jason Monk07b75fe2015-05-14 16:47:03 -0400127 ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class);
128 ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class);
129 ArgumentCaptor<String> typeContentArg = ArgumentCaptor.forClass(String.class);
Jason Monk7e6c83c2017-04-26 14:35:24 -0400130 ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class);
131 ArgumentCaptor<Boolean> wideArg = ArgumentCaptor.forClass(Boolean.class);
Jason Monk07b75fe2015-05-14 16:47:03 -0400132 ArgumentCaptor<Integer> subIdArg = ArgumentCaptor.forClass(Integer.class);
Andrew Flynn2fdbe122015-06-01 16:34:21 -0400133 Mockito.verify(mSignalCallback).setMobileDataIndicators(statusArg.capture(),
Jason Monk7e6c83c2017-04-26 14:35:24 -0400134 qsArg.capture(), typeIconArg.capture(), qsTypeIconArg.capture(), inArg.capture(),
135 outArg.capture(), typeContentArg.capture(), descArg.capture(), wideArg.capture(),
136 subIdArg.capture(), eq(roaming));
Jason Monk07b75fe2015-05-14 16:47:03 -0400137 assertEquals(status, statusArg.getValue());
Jason Monk7e6c83c2017-04-26 14:35:24 -0400138 assertEquals(qs, qsArg.getValue());
Jason Monk07b75fe2015-05-14 16:47:03 -0400139 assertEquals(type, (int) typeIconArg.getValue());
Jason Monk7e6c83c2017-04-26 14:35:24 -0400140 assertEquals(qsType, (int) qsTypeIconArg.getValue());
Jason Monk07b75fe2015-05-14 16:47:03 -0400141 assertEquals(in, (boolean) inArg.getValue());
142 assertEquals(out, (boolean) outArg.getValue());
143 assertEquals(typeDescription, typeContentArg.getValue());
Jason Monk7e6c83c2017-04-26 14:35:24 -0400144 assertEquals(description, descArg.getValue());
145 assertEquals(wide, (boolean) wideArg.getValue());
Jason Monk07b75fe2015-05-14 16:47:03 -0400146 assertEquals(subId, (int) subIdArg.getValue());
147 }
148
149 @SuppressWarnings("unchecked")
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400150 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400151 public void testSignalCallback_setSubs() {
152 List<SubscriptionInfo> subs = new ArrayList<>();
153 mHandler.setSubs(subs);
154 waitForCallbacks();
155
156 ArgumentCaptor<ArrayList> subsArg = ArgumentCaptor.forClass(ArrayList.class);
157 Mockito.verify(mSignalCallback).setSubs(subsArg.capture());
158 assertTrue(subs == subsArg.getValue());
159 }
160
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400161 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400162 public void testSignalCallback_setNoSims() {
163 boolean noSims = true;
Jason Monk1ff77662017-09-29 11:17:05 -0400164 boolean simDetected = false;
165 mHandler.setNoSims(noSims, simDetected);
Jason Monk07b75fe2015-05-14 16:47:03 -0400166 waitForCallbacks();
167
Jason Monk1ff77662017-09-29 11:17:05 -0400168 Mockito.verify(mSignalCallback).setNoSims(eq(noSims), eq(simDetected));
Jason Monk07b75fe2015-05-14 16:47:03 -0400169 }
170
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400171 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400172 public void testSignalCallback_setEthernetIndicators() {
173 IconState state = new IconState(true, R.drawable.stat_sys_ethernet, "Test Description");
174 mHandler.setEthernetIndicators(state);
175 waitForCallbacks();
176
177 ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
178 Mockito.verify(mSignalCallback).setEthernetIndicators(iconArg.capture());
179 assertEquals(state, iconArg.getValue());
180 }
181
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400182 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400183 public void testSignalCallback_setIsAirplaneMode() {
184 IconState state = new IconState(true, R.drawable.stat_sys_airplane_mode, "Test Description");
185 mHandler.setIsAirplaneMode(state);
186 waitForCallbacks();
187
188 ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
189 Mockito.verify(mSignalCallback).setIsAirplaneMode(iconArg.capture());
190 assertEquals(state, iconArg.getValue());
191 }
192
193 private void waitForCallbacks() {
194 mHandlerThread.quitSafely();
195 try {
196 mHandlerThread.join();
197 } catch (InterruptedException e) {
198 }
199 }
200
201}