107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk/* 207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk * Copyright (C) 2015 The Android Open Source Project 307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk * 407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk * Licensed under the Apache License, Version 2.0 (the "License"); 507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk * you may not use this file except in compliance with the License. 607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk * You may obtain a copy of the License at 707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk * 807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk * http://www.apache.org/licenses/LICENSE-2.0 907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk * 1007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk * Unless required by applicable law or agreed to in writing, software 1107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk * distributed under the License is distributed on an "AS IS" BASIS, 1207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk * See the License for the specific language governing permissions and 1407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk * limitations under the License. 1507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk */ 1607b75fe65dcb5b8add8246654c65f95f1191933eJason Monkpackage com.android.systemui.statusbar.policy; 1707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 1807b75fe65dcb5b8add8246654c65f95f1191933eJason Monkimport android.os.HandlerThread; 1907b75fe65dcb5b8add8246654c65f95f1191933eJason Monkimport android.telephony.SubscriptionInfo; 2007b75fe65dcb5b8add8246654c65f95f1191933eJason Monkimport android.test.AndroidTestCase; 21e427cb80762c5cd067f3c419eb0a427d077b3d95Jason Monkimport android.test.suitebuilder.annotation.SmallTest; 2207b75fe65dcb5b8add8246654c65f95f1191933eJason Monkimport com.android.systemui.R; 2346dbfb475fe0d1644f27f78e35735ba32c92225bJason Monkimport com.android.systemui.statusbar.policy.NetworkController.EmergencyListener; 2433f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monkimport com.android.systemui.statusbar.policy.NetworkController.IconState; 2507b75fe65dcb5b8add8246654c65f95f1191933eJason Monkimport com.android.systemui.statusbar.policy.NetworkController.SignalCallback; 2607b75fe65dcb5b8add8246654c65f95f1191933eJason Monkimport org.mockito.ArgumentCaptor; 2707b75fe65dcb5b8add8246654c65f95f1191933eJason Monkimport org.mockito.Mock; 2807b75fe65dcb5b8add8246654c65f95f1191933eJason Monkimport org.mockito.Mockito; 2907b75fe65dcb5b8add8246654c65f95f1191933eJason Monkimport org.mockito.MockitoAnnotations; 3007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 3107b75fe65dcb5b8add8246654c65f95f1191933eJason Monkimport java.util.ArrayList; 3207b75fe65dcb5b8add8246654c65f95f1191933eJason Monkimport java.util.List; 3307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 34e427cb80762c5cd067f3c419eb0a427d077b3d95Jason Monk@SmallTest 3507b75fe65dcb5b8add8246654c65f95f1191933eJason Monkpublic class CallbackHandlerTest extends AndroidTestCase { 3607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 3707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk private CallbackHandler mHandler; 3807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk private HandlerThread mHandlerThread; 3907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 4007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk @Mock 4107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk private EmergencyListener mEmengencyListener; 4207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk @Mock 4307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk private SignalCallback mSignalCallback; 4407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 4507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk @Override 4607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk protected void setUp() throws Exception { 4707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk super.setUp(); 4807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 4907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mHandlerThread = new HandlerThread("TestThread"); 5007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mHandlerThread.start(); 5107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mHandler = new CallbackHandler(mHandlerThread.getLooper()); 5207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 5307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk MockitoAnnotations.initMocks(this); 5407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mHandler.setListening(mEmengencyListener, true); 5507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mHandler.setListening(mSignalCallback, true); 5607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk } 5707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 5807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk public void testEmergencyListener() { 5907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mHandler.setEmergencyCallsOnly(true); 6007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk waitForCallbacks(); 6107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 6207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<Boolean> captor = ArgumentCaptor.forClass(Boolean.class); 6307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk Mockito.verify(mEmengencyListener).setEmergencyCallsOnly(captor.capture()); 6407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertTrue(captor.getValue()); 6507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk } 6607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 6707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk public void testSignalCallback_setWifiIndicators() { 6807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk boolean enabled = true; 6907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk IconState status = new IconState(true, 0, ""); 7007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk IconState qs = new IconState(true, 1, ""); 7107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk boolean in = true; 7207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk boolean out = true; 7307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk String description = "Test"; 7407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mHandler.setWifiIndicators(enabled, status, qs, in, out, description); 7507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk waitForCallbacks(); 7607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 7707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<Boolean> enableArg = ArgumentCaptor.forClass(Boolean.class); 7807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<IconState> statusArg = ArgumentCaptor.forClass(IconState.class); 7907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<IconState> qsArg = ArgumentCaptor.forClass(IconState.class); 8007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class); 8107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class); 8207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class); 8307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk Mockito.verify(mSignalCallback).setWifiIndicators(enableArg.capture(), 8407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk statusArg.capture(), qsArg.capture(), inArg.capture(), outArg.capture(), 8507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk descArg.capture()); 8607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(enabled, (boolean) enableArg.getValue()); 8707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(status, statusArg.getValue()); 8807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(qs, qsArg.getValue()); 8907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(in, (boolean) inArg.getValue()); 9007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(out, (boolean) outArg.getValue()); 9107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(description, descArg.getValue()); 9207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk } 9307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 9407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk public void testSignalCallback_setMobileDataIndicators() { 9507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk IconState status = new IconState(true, 0, ""); 9607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk IconState qs = new IconState(true, 1, ""); 9707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk boolean in = true; 9807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk boolean out = true; 9907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk String typeDescription = "Test 1"; 10007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk String description = "Test 2"; 10107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk int type = R.drawable.stat_sys_data_fully_connected_1x; 10207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk int qsType = R.drawable.ic_qs_signal_1x; 10307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk boolean wide = true; 10407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk int subId = 5; 1052fdbe128209f02725c645f29bff941efe865da56Andrew Flynn mHandler.setMobileDataIndicators(status, qs, type, qsType, in, out, typeDescription, 10607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk description, wide, subId); 10707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk waitForCallbacks(); 10807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 10907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<IconState> statusArg = ArgumentCaptor.forClass(IconState.class); 11007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<IconState> qsArg = ArgumentCaptor.forClass(IconState.class); 11107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class); 11207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<Integer> qsTypeIconArg = ArgumentCaptor.forClass(Integer.class); 11307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class); 11407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class); 11507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<String> typeContentArg = ArgumentCaptor.forClass(String.class); 11607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class); 11707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<Boolean> wideArg = ArgumentCaptor.forClass(Boolean.class); 11807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<Integer> subIdArg = ArgumentCaptor.forClass(Integer.class); 1192fdbe128209f02725c645f29bff941efe865da56Andrew Flynn Mockito.verify(mSignalCallback).setMobileDataIndicators(statusArg.capture(), 1202fdbe128209f02725c645f29bff941efe865da56Andrew Flynn qsArg.capture(), typeIconArg.capture(), qsTypeIconArg.capture(), inArg.capture(), 1212fdbe128209f02725c645f29bff941efe865da56Andrew Flynn outArg.capture(), typeContentArg.capture(), descArg.capture(), wideArg.capture(), 1222fdbe128209f02725c645f29bff941efe865da56Andrew Flynn subIdArg.capture()); 12307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(status, statusArg.getValue()); 12407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(qs, qsArg.getValue()); 12507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(type, (int) typeIconArg.getValue()); 12607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(qsType, (int) qsTypeIconArg.getValue()); 12707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(in, (boolean) inArg.getValue()); 12807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(out, (boolean) outArg.getValue()); 12907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(typeDescription, typeContentArg.getValue()); 13007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(description, descArg.getValue()); 13107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(wide, (boolean) wideArg.getValue()); 13207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(subId, (int) subIdArg.getValue()); 13307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk } 13407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 13507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk @SuppressWarnings("unchecked") 13607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk public void testSignalCallback_setSubs() { 13707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk List<SubscriptionInfo> subs = new ArrayList<>(); 13807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mHandler.setSubs(subs); 13907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk waitForCallbacks(); 14007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 14107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<ArrayList> subsArg = ArgumentCaptor.forClass(ArrayList.class); 14207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk Mockito.verify(mSignalCallback).setSubs(subsArg.capture()); 14307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertTrue(subs == subsArg.getValue()); 14407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk } 14507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 14607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk public void testSignalCallback_setNoSims() { 14707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk boolean noSims = true; 14807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mHandler.setNoSims(noSims); 14907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk waitForCallbacks(); 15007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 15107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<Boolean> noSimsArg = ArgumentCaptor.forClass(Boolean.class); 15207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk Mockito.verify(mSignalCallback).setNoSims(noSimsArg.capture()); 15307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(noSims, (boolean) noSimsArg.getValue()); 15407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk } 15507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 15607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk public void testSignalCallback_setEthernetIndicators() { 15707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk IconState state = new IconState(true, R.drawable.stat_sys_ethernet, "Test Description"); 15807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mHandler.setEthernetIndicators(state); 15907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk waitForCallbacks(); 16007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 16107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class); 16207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk Mockito.verify(mSignalCallback).setEthernetIndicators(iconArg.capture()); 16307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(state, iconArg.getValue()); 16407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk } 16507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 16607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk public void testSignalCallback_setIsAirplaneMode() { 16707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk IconState state = new IconState(true, R.drawable.stat_sys_airplane_mode, "Test Description"); 16807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mHandler.setIsAirplaneMode(state); 16907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk waitForCallbacks(); 17007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 17107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class); 17207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk Mockito.verify(mSignalCallback).setIsAirplaneMode(iconArg.capture()); 17307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals(state, iconArg.getValue()); 17407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk } 17507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 17607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk private void waitForCallbacks() { 17707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mHandlerThread.quitSafely(); 17807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk try { 17907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mHandlerThread.join(); 18007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk } catch (InterruptedException e) { 18107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk } 18207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk } 18307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 18407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk} 185