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