blob: 85f60338b6e88661de882e7cdb5c933b816934e6 [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
Brett Chabot84151d92019-02-27 15:37:59 -080018import static junit.framework.Assert.assertEquals;
19import static junit.framework.Assert.assertTrue;
20
21import static org.mockito.Matchers.eq;
22
Jason Monk07b75fe2015-05-14 16:47:03 -040023import android.os.HandlerThread;
24import android.telephony.SubscriptionInfo;
Jason Monke427cb82015-07-28 09:18:08 -040025import android.test.suitebuilder.annotation.SmallTest;
Brett Chabot84151d92019-02-27 15:37:59 -080026
27import androidx.test.runner.AndroidJUnit4;
28
Jason Monk07b75fe2015-05-14 16:47:03 -040029import com.android.systemui.R;
Jason Monk25a52b62017-05-23 10:42:59 -040030import com.android.systemui.SysuiTestCase;
Jason Monk46dbfb42016-02-25 14:59:20 -050031import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener;
Jason Monk33f8ae72015-05-08 10:45:15 -040032import com.android.systemui.statusbar.policy.NetworkController.IconState;
Jason Monk07b75fe2015-05-14 16:47:03 -040033import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
Brett Chabot84151d92019-02-27 15:37:59 -080034
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040035import org.junit.Before;
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040036import org.junit.Test;
Brett Chabot84151d92019-02-27 15:37:59 -080037import org.junit.runner.RunWith;
Jason Monk07b75fe2015-05-14 16:47:03 -040038import org.mockito.ArgumentCaptor;
39import org.mockito.Mock;
40import org.mockito.Mockito;
41import org.mockito.MockitoAnnotations;
42
Brett Chabot84151d92019-02-27 15:37:59 -080043import java.util.ArrayList;
44import java.util.List;
Jason Monk0f0de132016-12-19 15:36:13 -050045
Jason Monke427cb82015-07-28 09:18:08 -040046@SmallTest
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040047@RunWith(AndroidJUnit4.class)
Jason Monk25a52b62017-05-23 10:42:59 -040048public class CallbackHandlerTest extends SysuiTestCase {
Jason Monk07b75fe2015-05-14 16:47:03 -040049
50 private CallbackHandler mHandler;
51 private HandlerThread mHandlerThread;
52
53 @Mock
54 private EmergencyListener mEmengencyListener;
55 @Mock
56 private SignalCallback mSignalCallback;
57
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040058 @Before
59 public void setUp() throws Exception {
Jason Monk07b75fe2015-05-14 16:47:03 -040060 mHandlerThread = new HandlerThread("TestThread");
61 mHandlerThread.start();
62 mHandler = new CallbackHandler(mHandlerThread.getLooper());
63
64 MockitoAnnotations.initMocks(this);
65 mHandler.setListening(mEmengencyListener, true);
66 mHandler.setListening(mSignalCallback, true);
67 }
68
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040069 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -040070 public void testEmergencyListener() {
71 mHandler.setEmergencyCallsOnly(true);
72 waitForCallbacks();
73
74 ArgumentCaptor<Boolean> captor = ArgumentCaptor.forClass(Boolean.class);
75 Mockito.verify(mEmengencyListener).setEmergencyCallsOnly(captor.capture());
76 assertTrue(captor.getValue());
77 }
78
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040079 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -040080 public void testSignalCallback_setWifiIndicators() {
81 boolean enabled = true;
82 IconState status = new IconState(true, 0, "");
83 IconState qs = new IconState(true, 1, "");
84 boolean in = true;
85 boolean out = true;
86 String description = "Test";
Amin Shaikhe74dbdd2018-03-09 16:05:30 -050087 String secondaryLabel = "Secondary label";
88 mHandler.setWifiIndicators(enabled, status, qs, in, out, description, true, secondaryLabel);
Jason Monk07b75fe2015-05-14 16:47:03 -040089 waitForCallbacks();
90
91 ArgumentCaptor<Boolean> enableArg = ArgumentCaptor.forClass(Boolean.class);
92 ArgumentCaptor<IconState> statusArg = ArgumentCaptor.forClass(IconState.class);
93 ArgumentCaptor<IconState> qsArg = ArgumentCaptor.forClass(IconState.class);
94 ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class);
95 ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class);
96 ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class);
Jason Monk110e5f62017-03-31 13:45:12 -040097 ArgumentCaptor<Boolean> isTransient = ArgumentCaptor.forClass(Boolean.class);
Amin Shaikhe74dbdd2018-03-09 16:05:30 -050098 ArgumentCaptor<String> secondary = ArgumentCaptor.forClass(String.class);
Jason Monk07b75fe2015-05-14 16:47:03 -040099 Mockito.verify(mSignalCallback).setWifiIndicators(enableArg.capture(),
100 statusArg.capture(), qsArg.capture(), inArg.capture(), outArg.capture(),
Amin Shaikhe74dbdd2018-03-09 16:05:30 -0500101 descArg.capture(), isTransient.capture(), secondary.capture());
Jason Monk07b75fe2015-05-14 16:47:03 -0400102 assertEquals(enabled, (boolean) enableArg.getValue());
103 assertEquals(status, statusArg.getValue());
104 assertEquals(qs, qsArg.getValue());
105 assertEquals(in, (boolean) inArg.getValue());
106 assertEquals(out, (boolean) outArg.getValue());
107 assertEquals(description, descArg.getValue());
Jason Monk110e5f62017-03-31 13:45:12 -0400108 assertTrue(isTransient.getValue());
Amin Shaikhe74dbdd2018-03-09 16:05:30 -0500109 assertEquals(secondaryLabel, secondary.getValue());
Jason Monk07b75fe2015-05-14 16:47:03 -0400110 }
111
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400112 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400113 public void testSignalCallback_setMobileDataIndicators() {
114 IconState status = new IconState(true, 0, "");
115 IconState qs = new IconState(true, 1, "");
Jason Monk07b75fe2015-05-14 16:47:03 -0400116 boolean in = true;
117 boolean out = true;
118 String typeDescription = "Test 1";
119 String description = "Test 2";
Amin Shaikhd64e6262018-03-08 10:08:13 -0500120 int type = TelephonyIcons.ICON_1X;
121 int qsType = TelephonyIcons.ICON_1X;
Jason Monk07b75fe2015-05-14 16:47:03 -0400122 boolean wide = true;
123 int subId = 5;
Jason Monk0f0de132016-12-19 15:36:13 -0500124 boolean roaming = true;
Jason Monk7e6c83c2017-04-26 14:35:24 -0400125 mHandler.setMobileDataIndicators(status, qs, type, qsType, in, out, typeDescription,
126 description, wide, subId, roaming);
Jason Monk07b75fe2015-05-14 16:47:03 -0400127 waitForCallbacks();
128
129 ArgumentCaptor<IconState> statusArg = ArgumentCaptor.forClass(IconState.class);
Jason Monk7e6c83c2017-04-26 14:35:24 -0400130 ArgumentCaptor<IconState> qsArg = ArgumentCaptor.forClass(IconState.class);
Jason Monk07b75fe2015-05-14 16:47:03 -0400131 ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class);
Jason Monk7e6c83c2017-04-26 14:35:24 -0400132 ArgumentCaptor<Integer> qsTypeIconArg = ArgumentCaptor.forClass(Integer.class);
Jason Monk07b75fe2015-05-14 16:47:03 -0400133 ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class);
134 ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class);
135 ArgumentCaptor<String> typeContentArg = ArgumentCaptor.forClass(String.class);
Jason Monk7e6c83c2017-04-26 14:35:24 -0400136 ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class);
137 ArgumentCaptor<Boolean> wideArg = ArgumentCaptor.forClass(Boolean.class);
Jason Monk07b75fe2015-05-14 16:47:03 -0400138 ArgumentCaptor<Integer> subIdArg = ArgumentCaptor.forClass(Integer.class);
Andrew Flynn2fdbe122015-06-01 16:34:21 -0400139 Mockito.verify(mSignalCallback).setMobileDataIndicators(statusArg.capture(),
Jason Monk7e6c83c2017-04-26 14:35:24 -0400140 qsArg.capture(), typeIconArg.capture(), qsTypeIconArg.capture(), inArg.capture(),
141 outArg.capture(), typeContentArg.capture(), descArg.capture(), wideArg.capture(),
142 subIdArg.capture(), eq(roaming));
Jason Monk07b75fe2015-05-14 16:47:03 -0400143 assertEquals(status, statusArg.getValue());
Jason Monk7e6c83c2017-04-26 14:35:24 -0400144 assertEquals(qs, qsArg.getValue());
Jason Monk07b75fe2015-05-14 16:47:03 -0400145 assertEquals(type, (int) typeIconArg.getValue());
Jason Monk7e6c83c2017-04-26 14:35:24 -0400146 assertEquals(qsType, (int) qsTypeIconArg.getValue());
Jason Monk07b75fe2015-05-14 16:47:03 -0400147 assertEquals(in, (boolean) inArg.getValue());
148 assertEquals(out, (boolean) outArg.getValue());
149 assertEquals(typeDescription, typeContentArg.getValue());
Jason Monk7e6c83c2017-04-26 14:35:24 -0400150 assertEquals(description, descArg.getValue());
151 assertEquals(wide, (boolean) wideArg.getValue());
Jason Monk07b75fe2015-05-14 16:47:03 -0400152 assertEquals(subId, (int) subIdArg.getValue());
153 }
154
155 @SuppressWarnings("unchecked")
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400156 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400157 public void testSignalCallback_setSubs() {
158 List<SubscriptionInfo> subs = new ArrayList<>();
159 mHandler.setSubs(subs);
160 waitForCallbacks();
161
162 ArgumentCaptor<ArrayList> subsArg = ArgumentCaptor.forClass(ArrayList.class);
163 Mockito.verify(mSignalCallback).setSubs(subsArg.capture());
164 assertTrue(subs == subsArg.getValue());
165 }
166
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400167 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400168 public void testSignalCallback_setNoSims() {
169 boolean noSims = true;
Jason Monk1ff77662017-09-29 11:17:05 -0400170 boolean simDetected = false;
171 mHandler.setNoSims(noSims, simDetected);
Jason Monk07b75fe2015-05-14 16:47:03 -0400172 waitForCallbacks();
173
Jason Monk1ff77662017-09-29 11:17:05 -0400174 Mockito.verify(mSignalCallback).setNoSims(eq(noSims), eq(simDetected));
Jason Monk07b75fe2015-05-14 16:47:03 -0400175 }
176
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400177 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400178 public void testSignalCallback_setEthernetIndicators() {
179 IconState state = new IconState(true, R.drawable.stat_sys_ethernet, "Test Description");
180 mHandler.setEthernetIndicators(state);
181 waitForCallbacks();
182
183 ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
184 Mockito.verify(mSignalCallback).setEthernetIndicators(iconArg.capture());
185 assertEquals(state, iconArg.getValue());
186 }
187
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400188 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400189 public void testSignalCallback_setIsAirplaneMode() {
190 IconState state = new IconState(true, R.drawable.stat_sys_airplane_mode, "Test Description");
191 mHandler.setIsAirplaneMode(state);
192 waitForCallbacks();
193
194 ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
195 Mockito.verify(mSignalCallback).setIsAirplaneMode(iconArg.capture());
196 assertEquals(state, iconArg.getValue());
197 }
198
199 private void waitForCallbacks() {
200 mHandlerThread.quitSafely();
201 try {
202 mHandlerThread.join();
203 } catch (InterruptedException e) {
204 }
205 }
206
207}