1package com.android.systemui.statusbar.policy;
2
3import android.net.NetworkCapabilities;
4import android.os.Looper;
5import android.telephony.TelephonyManager;
6import android.test.suitebuilder.annotation.SmallTest;
7import com.android.settingslib.net.DataUsageController;
8import org.mockito.Mockito;
9
10@SmallTest
11public class NetworkControllerDataTest extends NetworkControllerBaseTest {
12
13    public void test3gDataIcon() {
14        setupDefaultSignal();
15
16        verifyDataIndicators(TelephonyIcons.DATA_3G[1][0 /* No direction */],
17                TelephonyIcons.QS_DATA_3G);
18    }
19
20    public void testRoamingDataIcon() {
21        setupDefaultSignal();
22        setGsmRoaming(true);
23
24        verifyLastMobileDataIndicators(true,
25                TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH_ROAMING[1][DEFAULT_LEVEL],
26                TelephonyIcons.ROAMING_ICON);
27        verifyLastQsMobileDataIndicators(true,
28                TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH[1][DEFAULT_LEVEL],
29                TelephonyIcons.QS_DATA_R, false, false);
30    }
31
32    public void test2gDataIcon() {
33        setupDefaultSignal();
34        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
35                TelephonyManager.NETWORK_TYPE_GSM);
36
37        verifyDataIndicators(TelephonyIcons.DATA_G[1][0 /* No direction */],
38                TelephonyIcons.QS_DATA_G);
39    }
40
41    public void testCdmaDataIcon() {
42        setupDefaultSignal();
43        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
44                TelephonyManager.NETWORK_TYPE_CDMA);
45
46        verifyDataIndicators(TelephonyIcons.DATA_1X[1][0 /* No direction */],
47                TelephonyIcons.QS_DATA_1X);
48    }
49
50    public void testEdgeDataIcon() {
51        setupDefaultSignal();
52        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
53                TelephonyManager.NETWORK_TYPE_EDGE);
54
55        verifyDataIndicators(TelephonyIcons.DATA_E[1][0 /* No direction */],
56                TelephonyIcons.QS_DATA_E);
57    }
58
59    public void testLteDataIcon() {
60        setupDefaultSignal();
61        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
62                TelephonyManager.NETWORK_TYPE_LTE);
63
64        verifyDataIndicators(TelephonyIcons.DATA_LTE[1][0 /* No direction */],
65                TelephonyIcons.QS_DATA_LTE);
66    }
67
68    public void testHspaDataIcon() {
69        setupDefaultSignal();
70        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
71                TelephonyManager.NETWORK_TYPE_HSPA);
72
73        verifyDataIndicators(TelephonyIcons.DATA_H[1][0 /* No direction */],
74                TelephonyIcons.QS_DATA_H);
75    }
76
77    public void testWfcNoDataIcon() {
78        setupDefaultSignal();
79        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
80                TelephonyManager.NETWORK_TYPE_IWLAN);
81
82        verifyDataIndicators(0, 0);
83    }
84
85    public void test4gDataIcon() {
86        // Switch to showing 4g icon and re-initialize the NetworkController.
87        mConfig.show4gForLte = true;
88        mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
89                mConfig, Looper.getMainLooper(), mCallbackHandler,
90                Mockito.mock(AccessPointControllerImpl.class),
91                Mockito.mock(DataUsageController.class), mMockSubDefaults);
92        setupNetworkController();
93
94        setupDefaultSignal();
95        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
96                TelephonyManager.NETWORK_TYPE_LTE);
97
98        verifyDataIndicators(TelephonyIcons.DATA_4G[1][0 /* No direction */],
99                TelephonyIcons.QS_DATA_4G);
100    }
101
102    public void testDataDisabledIcon() {
103        setupNetworkController();
104        Mockito.when(mMockTm.getDataEnabled(mSubId)).thenReturn(false);
105        setupDefaultSignal();
106        updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0);
107        setConnectivity(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
108
109        verifyDataIndicators(TelephonyIcons.ICON_DATA_DISABLED,
110                TelephonyIcons.QS_ICON_DATA_DISABLED);
111    }
112
113    public void testDataDisabledIcon_UserNotSetup() {
114        setupNetworkController();
115        Mockito.when(mMockTm.getDataEnabled(mSubId)).thenReturn(false);
116        setupDefaultSignal();
117        updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0);
118        setConnectivity(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
119        mNetworkController.handleSetUserSetupComplete(false);
120
121        // Don't show the X until the device is setup.
122        verifyDataIndicators(0, 0);
123    }
124
125    public void test4gDataIconConfigChange() {
126        setupDefaultSignal();
127        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
128                TelephonyManager.NETWORK_TYPE_LTE);
129
130        // Switch to showing 4g icon and re-initialize the NetworkController.
131        mConfig.show4gForLte = true;
132        // Can't send the broadcast as that would actually read the config from
133        // the context.  Instead we'll just poke at a function that does all of
134        // the after work.
135        mNetworkController.handleConfigurationChanged();
136
137        verifyDataIndicators(TelephonyIcons.DATA_4G[1][0 /* No direction */],
138                TelephonyIcons.QS_DATA_4G);
139    }
140
141    public void testDataChangeWithoutConnectionState() {
142        setupDefaultSignal();
143        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
144                TelephonyManager.NETWORK_TYPE_LTE);
145
146        verifyDataIndicators(TelephonyIcons.DATA_LTE[1][0 /* No direction */],
147                TelephonyIcons.QS_DATA_LTE);
148
149        Mockito.when(mServiceState.getDataNetworkType())
150                .thenReturn(TelephonyManager.NETWORK_TYPE_HSPA);
151        updateServiceState();
152        verifyDataIndicators(TelephonyIcons.DATA_H[1][0 /* No direction */],
153                TelephonyIcons.QS_DATA_H);
154    }
155
156    public void testDataActivity() {
157        setupDefaultSignal();
158
159        testDataActivity(TelephonyManager.DATA_ACTIVITY_NONE, false, false);
160        testDataActivity(TelephonyManager.DATA_ACTIVITY_IN, true, false);
161        testDataActivity(TelephonyManager.DATA_ACTIVITY_OUT, false, true);
162        testDataActivity(TelephonyManager.DATA_ACTIVITY_INOUT, true, true);
163    }
164
165    private void testDataActivity(int direction, boolean in, boolean out) {
166        updateDataActivity(direction);
167
168        verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, DEFAULT_ICON);
169        verifyLastQsMobileDataIndicators(true, DEFAULT_QS_SIGNAL_STRENGTH,
170                DEFAULT_QS_ICON, in, out);
171    }
172
173    private void verifyDataIndicators(int dataIcon, int qsDataIcon) {
174        verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, dataIcon);
175        verifyLastQsMobileDataIndicators(true, DEFAULT_QS_SIGNAL_STRENGTH, qsDataIcon, false,
176                false);
177    }
178
179}
180