blob: 18e7840f120127bbe914f96ec00e17ac7077b0ed [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;
Evan Laird83c87e52019-09-24 19:14:05 -0400118 CharSequence typeDescription = "Test 1";
119 CharSequence typeDescriptionHtml = "<b>Test 1</b>";
120 CharSequence description = "Test 2";
Amin Shaikhd64e6262018-03-08 10:08:13 -0500121 int type = TelephonyIcons.ICON_1X;
122 int qsType = TelephonyIcons.ICON_1X;
Jason Monk07b75fe2015-05-14 16:47:03 -0400123 boolean wide = true;
124 int subId = 5;
Jason Monk0f0de132016-12-19 15:36:13 -0500125 boolean roaming = true;
Jason Monk7e6c83c2017-04-26 14:35:24 -0400126 mHandler.setMobileDataIndicators(status, qs, type, qsType, in, out, typeDescription,
Evan Laird83c87e52019-09-24 19:14:05 -0400127 typeDescriptionHtml, description, wide, subId, roaming);
Jason Monk07b75fe2015-05-14 16:47:03 -0400128 waitForCallbacks();
129
130 ArgumentCaptor<IconState> statusArg = ArgumentCaptor.forClass(IconState.class);
Jason Monk7e6c83c2017-04-26 14:35:24 -0400131 ArgumentCaptor<IconState> qsArg = ArgumentCaptor.forClass(IconState.class);
Jason Monk07b75fe2015-05-14 16:47:03 -0400132 ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class);
Jason Monk7e6c83c2017-04-26 14:35:24 -0400133 ArgumentCaptor<Integer> qsTypeIconArg = ArgumentCaptor.forClass(Integer.class);
Jason Monk07b75fe2015-05-14 16:47:03 -0400134 ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class);
135 ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class);
Evan Laird83c87e52019-09-24 19:14:05 -0400136 ArgumentCaptor<CharSequence> typeContentArg = ArgumentCaptor.forClass(CharSequence.class);
137 ArgumentCaptor<CharSequence> typeContentHtmlArg =
138 ArgumentCaptor.forClass(CharSequence.class);
139 ArgumentCaptor<CharSequence> descArg = ArgumentCaptor.forClass(CharSequence.class);
Jason Monk7e6c83c2017-04-26 14:35:24 -0400140 ArgumentCaptor<Boolean> wideArg = ArgumentCaptor.forClass(Boolean.class);
Jason Monk07b75fe2015-05-14 16:47:03 -0400141 ArgumentCaptor<Integer> subIdArg = ArgumentCaptor.forClass(Integer.class);
Andrew Flynn2fdbe122015-06-01 16:34:21 -0400142 Mockito.verify(mSignalCallback).setMobileDataIndicators(statusArg.capture(),
Jason Monk7e6c83c2017-04-26 14:35:24 -0400143 qsArg.capture(), typeIconArg.capture(), qsTypeIconArg.capture(), inArg.capture(),
Evan Laird83c87e52019-09-24 19:14:05 -0400144 outArg.capture(), typeContentArg.capture(), typeContentHtmlArg.capture(),
145 descArg.capture(), wideArg.capture(), subIdArg.capture(), eq(roaming));
Jason Monk07b75fe2015-05-14 16:47:03 -0400146 assertEquals(status, statusArg.getValue());
Jason Monk7e6c83c2017-04-26 14:35:24 -0400147 assertEquals(qs, qsArg.getValue());
Jason Monk07b75fe2015-05-14 16:47:03 -0400148 assertEquals(type, (int) typeIconArg.getValue());
Jason Monk7e6c83c2017-04-26 14:35:24 -0400149 assertEquals(qsType, (int) qsTypeIconArg.getValue());
Jason Monk07b75fe2015-05-14 16:47:03 -0400150 assertEquals(in, (boolean) inArg.getValue());
151 assertEquals(out, (boolean) outArg.getValue());
152 assertEquals(typeDescription, typeContentArg.getValue());
Evan Laird83c87e52019-09-24 19:14:05 -0400153 assertEquals(typeDescriptionHtml, typeContentHtmlArg.getValue());
Jason Monk7e6c83c2017-04-26 14:35:24 -0400154 assertEquals(description, descArg.getValue());
155 assertEquals(wide, (boolean) wideArg.getValue());
Jason Monk07b75fe2015-05-14 16:47:03 -0400156 assertEquals(subId, (int) subIdArg.getValue());
157 }
158
159 @SuppressWarnings("unchecked")
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400160 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400161 public void testSignalCallback_setSubs() {
162 List<SubscriptionInfo> subs = new ArrayList<>();
163 mHandler.setSubs(subs);
164 waitForCallbacks();
165
166 ArgumentCaptor<ArrayList> subsArg = ArgumentCaptor.forClass(ArrayList.class);
167 Mockito.verify(mSignalCallback).setSubs(subsArg.capture());
168 assertTrue(subs == subsArg.getValue());
169 }
170
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400171 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400172 public void testSignalCallback_setNoSims() {
173 boolean noSims = true;
Jason Monk1ff77662017-09-29 11:17:05 -0400174 boolean simDetected = false;
175 mHandler.setNoSims(noSims, simDetected);
Jason Monk07b75fe2015-05-14 16:47:03 -0400176 waitForCallbacks();
177
Jason Monk1ff77662017-09-29 11:17:05 -0400178 Mockito.verify(mSignalCallback).setNoSims(eq(noSims), eq(simDetected));
Jason Monk07b75fe2015-05-14 16:47:03 -0400179 }
180
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400181 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400182 public void testSignalCallback_setEthernetIndicators() {
183 IconState state = new IconState(true, R.drawable.stat_sys_ethernet, "Test Description");
184 mHandler.setEthernetIndicators(state);
185 waitForCallbacks();
186
187 ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
188 Mockito.verify(mSignalCallback).setEthernetIndicators(iconArg.capture());
189 assertEquals(state, iconArg.getValue());
190 }
191
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400192 @Test
Jason Monk07b75fe2015-05-14 16:47:03 -0400193 public void testSignalCallback_setIsAirplaneMode() {
194 IconState state = new IconState(true, R.drawable.stat_sys_airplane_mode, "Test Description");
195 mHandler.setIsAirplaneMode(state);
196 waitForCallbacks();
197
198 ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
199 Mockito.verify(mSignalCallback).setIsAirplaneMode(iconArg.capture());
200 assertEquals(state, iconArg.getValue());
201 }
202
203 private void waitForCallbacks() {
204 mHandlerThread.quitSafely();
205 try {
206 mHandlerThread.join();
207 } catch (InterruptedException e) {
208 }
209 }
210
211}