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