1da68f596282e60bee832dff07cc96bf64bd15939Jason Monk/*
2da68f596282e60bee832dff07cc96bf64bd15939Jason Monk * Copyright (C) 2015 The Android Open Source Project
3da68f596282e60bee832dff07cc96bf64bd15939Jason Monk *
4da68f596282e60bee832dff07cc96bf64bd15939Jason Monk * Licensed under the Apache License, Version 2.0 (the "License");
5da68f596282e60bee832dff07cc96bf64bd15939Jason Monk * you may not use this file except in compliance with the License.
6da68f596282e60bee832dff07cc96bf64bd15939Jason Monk * You may obtain a copy of the License at
7da68f596282e60bee832dff07cc96bf64bd15939Jason Monk *
8da68f596282e60bee832dff07cc96bf64bd15939Jason Monk *      http://www.apache.org/licenses/LICENSE-2.0
9da68f596282e60bee832dff07cc96bf64bd15939Jason Monk *
10da68f596282e60bee832dff07cc96bf64bd15939Jason Monk * Unless required by applicable law or agreed to in writing, software
11da68f596282e60bee832dff07cc96bf64bd15939Jason Monk * distributed under the License is distributed on an "AS IS" BASIS,
12da68f596282e60bee832dff07cc96bf64bd15939Jason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13da68f596282e60bee832dff07cc96bf64bd15939Jason Monk * See the License for the specific language governing permissions and
14da68f596282e60bee832dff07cc96bf64bd15939Jason Monk * limitations under the License.
15da68f596282e60bee832dff07cc96bf64bd15939Jason Monk */
16e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monkpackage com.android.systemui.statusbar.policy;
17e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monk
1829f7a7b0ae2264651c176ef50cc21cf9131247e3Jason Monkimport static org.mockito.Mockito.mock;
19c014decc74edc3a415efb78893f597f3b800a212Jason Monk
20d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anneimport android.content.Intent;
21e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monkimport android.net.ConnectivityManager;
2233f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monkimport android.net.NetworkCapabilities;
2307b75fe65dcb5b8add8246654c65f95f1191933eJason Monkimport android.os.Looper;
24b0808aab0caec42a068b927be974076783a87692Jason Monkimport android.telephony.ServiceState;
25e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monkimport android.telephony.SignalStrength;
26c014decc74edc3a415efb78893f597f3b800a212Jason Monkimport android.telephony.SubscriptionInfo;
27e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monkimport android.telephony.TelephonyManager;
28e427cb80762c5cd067f3c419eb0a427d077b3d95Jason Monkimport android.test.suitebuilder.annotation.SmallTest;
29e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monk
3018985e08ebd1c04e3160262925be995cf7c82001Jason Monkimport com.android.internal.telephony.PhoneConstants;
31d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anneimport com.android.internal.telephony.TelephonyIntents;
32f13b4b39f266e43239e40e3bf7d6997600555068Jason Monkimport com.android.systemui.R;
33da68f596282e60bee832dff07cc96bf64bd15939Jason Monk
34c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monkimport org.mockito.ArgumentCaptor;
35da68f596282e60bee832dff07cc96bf64bd15939Jason Monkimport org.mockito.Mockito;
36da68f596282e60bee832dff07cc96bf64bd15939Jason Monk
37da68f596282e60bee832dff07cc96bf64bd15939Jason Monkimport java.util.ArrayList;
38da68f596282e60bee832dff07cc96bf64bd15939Jason Monkimport java.util.List;
39f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk
40e427cb80762c5cd067f3c419eb0a427d077b3d95Jason Monk@SmallTest
41e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monkpublic class NetworkControllerSignalTest extends NetworkControllerBaseTest {
42e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monk
43f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk    public void testNoIconWithoutMobile() {
44f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        // Turn off mobile network support.
45f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        Mockito.when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
46f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        // Create a new NetworkController as this is currently handled in constructor.
47b574627ebc383d35cf8212ee241b191b26518a0dJason Monk        mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
4807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk                mConfig, Looper.getMainLooper(), mCallbackHandler,
49c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk                mock(AccessPointControllerImpl.class), mock(MobileDataControllerImpl.class),
50c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk                mMockSubDefaults);
51f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        setupNetworkController();
52f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk
53f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        verifyLastMobileDataIndicators(false, 0, 0);
54f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk    }
55f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk
5621d05a08d8ab632608980371d78990890029f4e4Jason Monk    public void testNoSimsIconPresent() {
5721d05a08d8ab632608980371d78990890029f4e4Jason Monk        // No Subscriptions.
5821d05a08d8ab632608980371d78990890029f4e4Jason Monk        mNetworkController.mMobileSignalControllers.clear();
5921d05a08d8ab632608980371d78990890029f4e4Jason Monk        mNetworkController.updateNoSims();
6021d05a08d8ab632608980371d78990890029f4e4Jason Monk
6121d05a08d8ab632608980371d78990890029f4e4Jason Monk        verifyHasNoSims(true);
6221d05a08d8ab632608980371d78990890029f4e4Jason Monk    }
6321d05a08d8ab632608980371d78990890029f4e4Jason Monk
64c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk    public void testEmergencyOnly() {
65c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk        setupDefaultSignal();
66c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk        mNetworkController.recalculateEmergency();
67c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk        verifyEmergencyOnly(false);
68c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk
69c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk        mMobileSignalController.getState().isEmergency = true;
70c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk        mNetworkController.recalculateEmergency();
71c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk        verifyEmergencyOnly(true);
72c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk    }
73c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk
74c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk    public void testEmergencyOnlyNoSubscriptions() {
75c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk        setupDefaultSignal();
76b0808aab0caec42a068b927be974076783a87692Jason Monk        setSubscriptions();
77b0808aab0caec42a068b927be974076783a87692Jason Monk        mNetworkController.mLastServiceState = new ServiceState();
78b0808aab0caec42a068b927be974076783a87692Jason Monk        mNetworkController.mLastServiceState.setEmergencyOnly(true);
79c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk        mNetworkController.recalculateEmergency();
80b0808aab0caec42a068b927be974076783a87692Jason Monk        verifyEmergencyOnly(true);
81b0808aab0caec42a068b927be974076783a87692Jason Monk    }
82c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk
83b0808aab0caec42a068b927be974076783a87692Jason Monk    public void testNoEmengencyNoSubscriptions() {
84b0808aab0caec42a068b927be974076783a87692Jason Monk        setupDefaultSignal();
85c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk        setSubscriptions();
86b0808aab0caec42a068b927be974076783a87692Jason Monk        mNetworkController.mLastServiceState = new ServiceState();
87b0808aab0caec42a068b927be974076783a87692Jason Monk        mNetworkController.mLastServiceState.setEmergencyOnly(false);
88b0808aab0caec42a068b927be974076783a87692Jason Monk        mNetworkController.recalculateEmergency();
89b0808aab0caec42a068b927be974076783a87692Jason Monk        verifyEmergencyOnly(false);
90c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk    }
91c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk
9221d05a08d8ab632608980371d78990890029f4e4Jason Monk    public void testNoSimlessIconWithoutMobile() {
9321d05a08d8ab632608980371d78990890029f4e4Jason Monk        // Turn off mobile network support.
9421d05a08d8ab632608980371d78990890029f4e4Jason Monk        Mockito.when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
9521d05a08d8ab632608980371d78990890029f4e4Jason Monk        // Create a new NetworkController as this is currently handled in constructor.
9621d05a08d8ab632608980371d78990890029f4e4Jason Monk        mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
9707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk                mConfig, Looper.getMainLooper(), mCallbackHandler,
98c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk                mock(AccessPointControllerImpl.class), mock(MobileDataControllerImpl.class),
99c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk                mMockSubDefaults);
10021d05a08d8ab632608980371d78990890029f4e4Jason Monk        setupNetworkController();
10121d05a08d8ab632608980371d78990890029f4e4Jason Monk
10221d05a08d8ab632608980371d78990890029f4e4Jason Monk        // No Subscriptions.
10321d05a08d8ab632608980371d78990890029f4e4Jason Monk        mNetworkController.mMobileSignalControllers.clear();
10421d05a08d8ab632608980371d78990890029f4e4Jason Monk        mNetworkController.updateNoSims();
10521d05a08d8ab632608980371d78990890029f4e4Jason Monk
10621d05a08d8ab632608980371d78990890029f4e4Jason Monk        verifyHasNoSims(false);
10721d05a08d8ab632608980371d78990890029f4e4Jason Monk    }
10821d05a08d8ab632608980371d78990890029f4e4Jason Monk
109e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monk    public void testSignalStrength() {
110f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        for (int testStrength = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
111f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk                testStrength <= SignalStrength.SIGNAL_STRENGTH_GREAT; testStrength++) {
112f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setupDefaultSignal();
113f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setLevel(testStrength);
114f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk
115f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            verifyLastMobileDataIndicators(true,
11633f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monk                    TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[1][testStrength], DEFAULT_ICON);
117e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monk
118f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            // Verify low inet number indexing.
11933f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monk            setConnectivity(NetworkCapabilities.TRANSPORT_CELLULAR, false, true);
120f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            verifyLastMobileDataIndicators(true,
12133f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monk                    TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[0][testStrength], DEFAULT_ICON);
122f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        }
123f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk    }
124f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk
125f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk    public void testCdmaSignalStrength() {
126f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        for (int testStrength = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
127f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk                testStrength <= SignalStrength.SIGNAL_STRENGTH_GREAT; testStrength++) {
128f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setupDefaultSignal();
129f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setCdma();
130f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setLevel(testStrength);
131f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk
132f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            verifyLastMobileDataIndicators(true,
133f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk                    TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[1][testStrength],
134f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk                    TelephonyIcons.DATA_1X[1][0 /* No direction */]);
135f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        }
136e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monk    }
137e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monk
138e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monk    public void testSignalRoaming() {
139f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        for (int testStrength = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
140f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk                testStrength <= SignalStrength.SIGNAL_STRENGTH_GREAT; testStrength++) {
141f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setupDefaultSignal();
14261633f18611731d7011facbfe3d14f3ec83d86a3Jason Monk            setConnectivity(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
143f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setGsmRoaming(true);
144f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setLevel(testStrength);
145f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk
146f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            verifyLastMobileDataIndicators(true,
147f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk                    TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH_ROAMING[1][testStrength],
148f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk                    TelephonyIcons.ROAMING_ICON);
149f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        }
150f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk    }
151e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monk
152f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk    public void testCdmaSignalRoaming() {
153f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        for (int testStrength = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
154f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk                testStrength <= SignalStrength.SIGNAL_STRENGTH_GREAT; testStrength++) {
155f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setupDefaultSignal();
156f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setCdma();
157f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setCdmaRoaming(true);
158f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setLevel(testStrength);
159f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk
160f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            verifyLastMobileDataIndicators(true,
161f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk                    TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH_ROAMING[1][testStrength],
162f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk                    TelephonyIcons.ROAMING_ICON);
163f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        }
164f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk    }
165f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk
166f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk    public void testQsSignalStrength() {
167f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        for (int testStrength = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
168f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk                testStrength <= SignalStrength.SIGNAL_STRENGTH_GREAT; testStrength++) {
169f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setupDefaultSignal();
170f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setLevel(testStrength);
171f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk
172f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            verifyLastQsMobileDataIndicators(true,
173f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk                    TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH[1][testStrength],
174b574627ebc383d35cf8212ee241b191b26518a0dJason Monk                    DEFAULT_QS_ICON, false, false);
175f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        }
176f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk    }
177f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk
178f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk    public void testCdmaQsSignalStrength() {
179f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        for (int testStrength = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
180f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk                testStrength <= SignalStrength.SIGNAL_STRENGTH_GREAT; testStrength++) {
181f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setupDefaultSignal();
182f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setCdma();
183f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            setLevel(testStrength);
184f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk
185f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk            verifyLastQsMobileDataIndicators(true,
186f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk                    TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH[1][testStrength],
187b574627ebc383d35cf8212ee241b191b26518a0dJason Monk                    TelephonyIcons.QS_ICON_1X, false, false);
188f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        }
189f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk    }
190f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk
19133f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monk    public void testNoBangWithWifi() {
192f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        setupDefaultSignal();
19333f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monk        setConnectivity(mMobileSignalController.mTransportType, false, false);
19433f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monk        setConnectivity(NetworkCapabilities.TRANSPORT_WIFI, true, true);
19533f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monk
19633f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monk        verifyLastMobileDataIndicators(true, TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[1][2], 0);
197f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk    }
198f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk
199c014decc74edc3a415efb78893f597f3b800a212Jason Monk    // Some tests of actual NetworkController code, just internals not display stuff
200c014decc74edc3a415efb78893f597f3b800a212Jason Monk    // TODO: Put this somewhere else, maybe in its own file.
201c014decc74edc3a415efb78893f597f3b800a212Jason Monk    public void testHasCorrectMobileControllers() {
202c014decc74edc3a415efb78893f597f3b800a212Jason Monk        int[] testSubscriptions = new int[] { 1, 5, 3 };
203c014decc74edc3a415efb78893f597f3b800a212Jason Monk        int notTestSubscription = 0;
204c014decc74edc3a415efb78893f597f3b800a212Jason Monk        MobileSignalController mobileSignalController = Mockito.mock(MobileSignalController.class);
205c014decc74edc3a415efb78893f597f3b800a212Jason Monk
206c014decc74edc3a415efb78893f597f3b800a212Jason Monk        mNetworkController.mMobileSignalControllers.clear();
207c014decc74edc3a415efb78893f597f3b800a212Jason Monk        List<SubscriptionInfo> subscriptions = new ArrayList<>();
208c014decc74edc3a415efb78893f597f3b800a212Jason Monk        for (int i = 0; i < testSubscriptions.length; i++) {
209c014decc74edc3a415efb78893f597f3b800a212Jason Monk            // Force the test controllers into NetworkController.
210c014decc74edc3a415efb78893f597f3b800a212Jason Monk            mNetworkController.mMobileSignalControllers.put(testSubscriptions[i],
211c014decc74edc3a415efb78893f597f3b800a212Jason Monk                    mobileSignalController);
212c014decc74edc3a415efb78893f597f3b800a212Jason Monk
213c014decc74edc3a415efb78893f597f3b800a212Jason Monk            // Generate a list of subscriptions we will tell the NetworkController to use.
214c014decc74edc3a415efb78893f597f3b800a212Jason Monk            SubscriptionInfo mockSubInfo = Mockito.mock(SubscriptionInfo.class);
215c014decc74edc3a415efb78893f597f3b800a212Jason Monk            Mockito.when(mockSubInfo.getSubscriptionId()).thenReturn(testSubscriptions[i]);
216c014decc74edc3a415efb78893f597f3b800a212Jason Monk            subscriptions.add(mockSubInfo);
217c014decc74edc3a415efb78893f597f3b800a212Jason Monk        }
218c014decc74edc3a415efb78893f597f3b800a212Jason Monk        assertTrue(mNetworkController.hasCorrectMobileControllers(subscriptions));
219c014decc74edc3a415efb78893f597f3b800a212Jason Monk
220c014decc74edc3a415efb78893f597f3b800a212Jason Monk        // Add a subscription that the NetworkController doesn't know about.
221c014decc74edc3a415efb78893f597f3b800a212Jason Monk        SubscriptionInfo mockSubInfo = Mockito.mock(SubscriptionInfo.class);
222c014decc74edc3a415efb78893f597f3b800a212Jason Monk        Mockito.when(mockSubInfo.getSubscriptionId()).thenReturn(notTestSubscription);
223c014decc74edc3a415efb78893f597f3b800a212Jason Monk        subscriptions.add(mockSubInfo);
224c014decc74edc3a415efb78893f597f3b800a212Jason Monk        assertFalse(mNetworkController.hasCorrectMobileControllers(subscriptions));
225c014decc74edc3a415efb78893f597f3b800a212Jason Monk    }
226c014decc74edc3a415efb78893f597f3b800a212Jason Monk
227c014decc74edc3a415efb78893f597f3b800a212Jason Monk    public void testSetCurrentSubscriptions() {
228c014decc74edc3a415efb78893f597f3b800a212Jason Monk        // We will not add one controller to make sure it gets created.
229c014decc74edc3a415efb78893f597f3b800a212Jason Monk        int indexToSkipController = 0;
230c014decc74edc3a415efb78893f597f3b800a212Jason Monk        // We will not add one subscription to make sure it's controller gets removed.
231c014decc74edc3a415efb78893f597f3b800a212Jason Monk        int indexToSkipSubscription = 1;
232c014decc74edc3a415efb78893f597f3b800a212Jason Monk
233c014decc74edc3a415efb78893f597f3b800a212Jason Monk        int[] testSubscriptions = new int[] { 1, 5, 3 };
234c014decc74edc3a415efb78893f597f3b800a212Jason Monk        MobileSignalController[] mobileSignalControllers = new MobileSignalController[] {
235c014decc74edc3a415efb78893f597f3b800a212Jason Monk                Mockito.mock(MobileSignalController.class),
236c014decc74edc3a415efb78893f597f3b800a212Jason Monk                Mockito.mock(MobileSignalController.class),
237c014decc74edc3a415efb78893f597f3b800a212Jason Monk                Mockito.mock(MobileSignalController.class),
238c014decc74edc3a415efb78893f597f3b800a212Jason Monk        };
239c014decc74edc3a415efb78893f597f3b800a212Jason Monk        mNetworkController.mMobileSignalControllers.clear();
240c014decc74edc3a415efb78893f597f3b800a212Jason Monk        List<SubscriptionInfo> subscriptions = new ArrayList<>();
241c014decc74edc3a415efb78893f597f3b800a212Jason Monk        for (int i = 0; i < testSubscriptions.length; i++) {
242c014decc74edc3a415efb78893f597f3b800a212Jason Monk            if (i != indexToSkipController) {
243c014decc74edc3a415efb78893f597f3b800a212Jason Monk                // Force the test controllers into NetworkController.
244c014decc74edc3a415efb78893f597f3b800a212Jason Monk                mNetworkController.mMobileSignalControllers.put(testSubscriptions[i],
245c014decc74edc3a415efb78893f597f3b800a212Jason Monk                        mobileSignalControllers[i]);
246c014decc74edc3a415efb78893f597f3b800a212Jason Monk            }
247c014decc74edc3a415efb78893f597f3b800a212Jason Monk
248c014decc74edc3a415efb78893f597f3b800a212Jason Monk            if (i != indexToSkipSubscription) {
249c014decc74edc3a415efb78893f597f3b800a212Jason Monk                // Generate a list of subscriptions we will tell the NetworkController to use.
250c014decc74edc3a415efb78893f597f3b800a212Jason Monk                SubscriptionInfo mockSubInfo = Mockito.mock(SubscriptionInfo.class);
251c014decc74edc3a415efb78893f597f3b800a212Jason Monk                Mockito.when(mockSubInfo.getSubscriptionId()).thenReturn(testSubscriptions[i]);
252c014decc74edc3a415efb78893f597f3b800a212Jason Monk                Mockito.when(mockSubInfo.getSimSlotIndex()).thenReturn(testSubscriptions[i]);
253c014decc74edc3a415efb78893f597f3b800a212Jason Monk                subscriptions.add(mockSubInfo);
254c014decc74edc3a415efb78893f597f3b800a212Jason Monk            }
255c014decc74edc3a415efb78893f597f3b800a212Jason Monk        }
256c014decc74edc3a415efb78893f597f3b800a212Jason Monk
257c014decc74edc3a415efb78893f597f3b800a212Jason Monk        // We can only test whether unregister gets called if it thinks its in a listening
258c014decc74edc3a415efb78893f597f3b800a212Jason Monk        // state.
259c014decc74edc3a415efb78893f597f3b800a212Jason Monk        mNetworkController.mListening = true;
260c014decc74edc3a415efb78893f597f3b800a212Jason Monk        mNetworkController.setCurrentSubscriptions(subscriptions);
261c014decc74edc3a415efb78893f597f3b800a212Jason Monk
262c014decc74edc3a415efb78893f597f3b800a212Jason Monk        for (int i = 0; i < testSubscriptions.length; i++) {
263c014decc74edc3a415efb78893f597f3b800a212Jason Monk            if (i == indexToSkipController) {
264c014decc74edc3a415efb78893f597f3b800a212Jason Monk                // Make sure a controller was created despite us not adding one.
265c014decc74edc3a415efb78893f597f3b800a212Jason Monk                assertTrue(mNetworkController.mMobileSignalControllers.containsKey(
266c014decc74edc3a415efb78893f597f3b800a212Jason Monk                        testSubscriptions[i]));
267c014decc74edc3a415efb78893f597f3b800a212Jason Monk            } else if (i == indexToSkipSubscription) {
268c014decc74edc3a415efb78893f597f3b800a212Jason Monk                // Make sure the controller that did exist was removed
269c014decc74edc3a415efb78893f597f3b800a212Jason Monk                assertFalse(mNetworkController.mMobileSignalControllers.containsKey(
270c014decc74edc3a415efb78893f597f3b800a212Jason Monk                        testSubscriptions[i]));
271c014decc74edc3a415efb78893f597f3b800a212Jason Monk            } else {
272c014decc74edc3a415efb78893f597f3b800a212Jason Monk                // If a MobileSignalController is around it needs to not be unregistered.
273c014decc74edc3a415efb78893f597f3b800a212Jason Monk                Mockito.verify(mobileSignalControllers[i], Mockito.never())
274c014decc74edc3a415efb78893f597f3b800a212Jason Monk                        .unregisterListener();
275c014decc74edc3a415efb78893f597f3b800a212Jason Monk            }
276c014decc74edc3a415efb78893f597f3b800a212Jason Monk        }
277c014decc74edc3a415efb78893f597f3b800a212Jason Monk    }
278c014decc74edc3a415efb78893f597f3b800a212Jason Monk
2797f9623f3dc6ec5f548bbade0b497d1f5e7f6db06Jason Monk    public void testHistorySize() {
2807f9623f3dc6ec5f548bbade0b497d1f5e7f6db06Jason Monk        // Verify valid history size, otherwise it gits printed out the wrong order and whatnot.
2817f9623f3dc6ec5f548bbade0b497d1f5e7f6db06Jason Monk        assertEquals(0, SignalController.HISTORY_SIZE & (SignalController.HISTORY_SIZE - 1));
2827f9623f3dc6ec5f548bbade0b497d1f5e7f6db06Jason Monk    }
2837f9623f3dc6ec5f548bbade0b497d1f5e7f6db06Jason Monk
284f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk    private void setCdma() {
285f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        setIsGsm(false);
286f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
287f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk                TelephonyManager.NETWORK_TYPE_CDMA);
288f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk        setCdmaRoaming(false);
289e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monk    }
290d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
291d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    public void testOnReceive_stringsUpdatedAction_spn() {
292d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        String expectedMNetworkName = "Test";
293d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        Intent intent = createStringsUpdatedIntent(true /* showSpn */,
294d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne                expectedMNetworkName /* spn */,
295d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne                false /* showPlmn */,
296d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne                "NotTest" /* plmn */);
297d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
298d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        mNetworkController.onReceive(mContext, intent);
299d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
300d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        assertNetworkNameEquals(expectedMNetworkName);
301d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    }
302d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
303d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    public void testOnReceive_stringsUpdatedAction_plmn() {
304d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        String expectedMNetworkName = "Test";
305d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
306d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        Intent intent = createStringsUpdatedIntent(false /* showSpn */,
307d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne                "NotTest" /* spn */,
308d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne                true /* showPlmn */,
309d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne                expectedMNetworkName /* plmn */);
310d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
311d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        mNetworkController.onReceive(mContext, intent);
312d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
313d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        assertNetworkNameEquals(expectedMNetworkName);
314d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    }
315d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
316d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    public void testOnReceive_stringsUpdatedAction_bothFalse() {
317d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        Intent intent = createStringsUpdatedIntent(false /* showSpn */,
318d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne              "Irrelevant" /* spn */,
319d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne              false /* showPlmn */,
320d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne              "Irrelevant" /* plmn */);
321d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
322d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        mNetworkController.onReceive(mContext, intent);
323d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
324d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        String defaultNetworkName = mMobileSignalController
325d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne            .getStringIfExists(
326d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne                com.android.internal.R.string.lockscreen_carrier_default);
327d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        assertNetworkNameEquals(defaultNetworkName);
328d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    }
329d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
330d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    public void testOnReceive_stringsUpdatedAction_bothTrueAndNull() {
331d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        Intent intent = createStringsUpdatedIntent(true /* showSpn */,
332d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne            null /* spn */,
333d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne            true /* showPlmn */,
334d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne            null /* plmn */);
335d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
336d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        mNetworkController.onReceive(mContext, intent);
337d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
338d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        String defaultNetworkName = mMobileSignalController.getStringIfExists(
339d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne                com.android.internal.R.string.lockscreen_carrier_default);
340d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        assertNetworkNameEquals(defaultNetworkName);
341d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    }
342d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
343d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    public void testOnReceive_stringsUpdatedAction_bothTrueAndNonNull() {
344d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        String spn = "Test1";
345d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        String plmn = "Test2";
346d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
347d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        Intent intent = createStringsUpdatedIntent(true /* showSpn */,
348d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne            spn /* spn */,
349d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne            true /* showPlmn */,
350d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne            plmn /* plmn */);
351d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
352d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        mNetworkController.onReceive(mContext, intent);
353d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
354d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        assertNetworkNameEquals(plmn
355d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne                + mMobileSignalController.getStringIfExists(
356d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne                        R.string.status_bar_network_name_separator)
357d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne                + spn);
358d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    }
359d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
360d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    private Intent createStringsUpdatedIntent(boolean showSpn, String spn,
361d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne            boolean showPlmn, String plmn) {
362d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
363d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        Intent intent = new Intent();
364d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        intent.setAction(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION);
365d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
366d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        intent.putExtra(TelephonyIntents.EXTRA_SHOW_SPN, showSpn);
367d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        intent.putExtra(TelephonyIntents.EXTRA_SPN, spn);
368d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
369d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        intent.putExtra(TelephonyIntents.EXTRA_SHOW_PLMN, showPlmn);
370d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        intent.putExtra(TelephonyIntents.EXTRA_PLMN, plmn);
37118985e08ebd1c04e3160262925be995cf7c82001Jason Monk        intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, mSubId);
372d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
373d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        return intent;
374d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    }
375d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
376d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    public void testOnUpdateDataActivity_dataIn() {
377d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        setupDefaultSignal();
378d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
379d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        updateDataActivity(TelephonyManager.DATA_ACTIVITY_IN);
380d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
381d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne        verifyLastQsMobileDataIndicators(true /* visible */,
382d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne                TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH[1][DEFAULT_LEVEL] /* icon */,
383d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne                DEFAULT_QS_ICON /* typeIcon */,
384d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne                true /* dataIn */,
385d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne                false /* dataOut */);
386d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
387d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    }
388d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
389d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    public void testOnUpdateDataActivity_dataOut() {
390d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne      setupDefaultSignal();
391d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
392d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne      updateDataActivity(TelephonyManager.DATA_ACTIVITY_OUT);
393d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
394d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne      verifyLastQsMobileDataIndicators(true /* visible */,
395d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne              TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH[1][DEFAULT_LEVEL] /* icon */,
396d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne              DEFAULT_QS_ICON /* typeIcon */,
397d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne              false /* dataIn */,
398d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne              true /* dataOut */);
399d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
400d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    }
401d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
402d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    public void testOnUpdateDataActivity_dataInOut() {
403d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne      setupDefaultSignal();
404d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
405d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne      updateDataActivity(TelephonyManager.DATA_ACTIVITY_INOUT);
406d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
407d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne      verifyLastQsMobileDataIndicators(true /* visible */,
408d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne              TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH[1][DEFAULT_LEVEL] /* icon */,
409d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne              DEFAULT_QS_ICON /* typeIcon */,
410d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne              true /* dataIn */,
411d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne              true /* dataOut */);
412d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
413d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    }
414d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
415d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    public void testOnUpdateDataActivity_dataActivityNone() {
416d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne      setupDefaultSignal();
417d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
418d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne      updateDataActivity(TelephonyManager.DATA_ACTIVITY_NONE);
419d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
420d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne      verifyLastQsMobileDataIndicators(true /* visible */,
421d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne              TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH[1][DEFAULT_LEVEL] /* icon */,
422d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne              DEFAULT_QS_ICON /* typeIcon */,
423d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne              false /* dataIn */,
424d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne              false /* dataOut */);
425d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne
426d0a6279af69184621bf6384c5435d3eb6f62ac03Leigh Anne    }
4275e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn
42855fc8004ad1896da615fd08caca87d1b393d085cAndrew Flynn    public void testCarrierNetworkChange_carrierNetworkChange() {
4295e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn      int strength = SignalStrength.SIGNAL_STRENGTH_GREAT;
4305e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn
4315e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn      setupDefaultSignal();
4325e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn      setLevel(strength);
4335e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn
4345e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn      // Verify baseline
4355e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn      verifyLastMobileDataIndicators(true /* visible */,
4365e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn              TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[1][strength] /* strengthIcon */,
4375e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn              DEFAULT_ICON /* typeIcon */);
4385e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn
43955fc8004ad1896da615fd08caca87d1b393d085cAndrew Flynn      // API call is made
4405e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn      setCarrierNetworkChange(true /* enabled */);
4415e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn
44255fc8004ad1896da615fd08caca87d1b393d085cAndrew Flynn      // Carrier network change is true, show special indicator
4435e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn      verifyLastMobileDataIndicators(true /* visible */,
4445e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn              TelephonyIcons.TELEPHONY_CARRIER_NETWORK_CHANGE[0][0] /* strengthIcon */,
4455e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn              0 /* typeIcon */);
4465e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn
4475e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn      // Revert back
4485e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn      setCarrierNetworkChange(false /* enabled */);
4495e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn
4505e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn      // Verify back in previous state
4515e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn      verifyLastMobileDataIndicators(true /* visible */,
4525e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn              TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[1][strength] /* strengthIcon */,
4535e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn              DEFAULT_ICON /* typeIcon */);
4545e751478065835cf86f661cf34fa4f52f851cef5Andrew Flynn    }
455c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk
456c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk    private void verifyEmergencyOnly(boolean isEmergencyOnly) {
457c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk        ArgumentCaptor<Boolean> emergencyOnly = ArgumentCaptor.forClass(Boolean.class);
458c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk        Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setEmergencyCallsOnly(
459c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk                emergencyOnly.capture());
460c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk        assertEquals(isEmergencyOnly, (boolean) emergencyOnly.getValue());
461c6cc6266c9325f180b1a073f733fdf0a64e9286fJason Monk    }
462e0cdb6079e9e9e8b87a71d67ef5aa1dc0e3e6840Jason Monk}
463